Прозрачность

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Blood_Magic, попробовал. Выглядит здоровско. Этакий "скелет" окна, "рентгеновский снимок" :)
Все-таки, Билл Гейтс - гений. Такие возможности WinAPI предоставляет! Всего лишь десятком операторов такой эффект достигается! Напрасно его хают.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Blood_Magic, а с дочерними окнами такой финт, что ли не проходит?
Я попробовал сделать кнопку (Button) круглой. В OnCreate кнопки вставил (вообще-то, пробовал на C++):

Код: Выделить всё

 RECT rClientRect;
 HRGN rgn;
 GetClientRect (&rClientRect);
 rgn = CreateEllipticRgnIndirect (&rClientRect);

  if (rgn)
    SetWindowRgn (m_hWnd, rgn, TRUE);
Думал, получу визуально круглую кнопку (на родительском диалоговом окне), ан нет. Кнопка внешне ничуть не поменялась :(
Аватара пользователя
SergeyS
Сообщения: 196
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

&quot писал(а):Все-таки, Билл Гейтс - гений. Такие возможности WinAPI предоставляет!
Билл Гейтс - гений, согласен (иначе мы бы о нём и не говорили), но вот про WinAPI я бы по воздержался - не думаю что WinAPI придумал Гейтс, это заслуга других людей, да и большинство идей от MS ворованные (перекупленные)
Yura_ua
Сообщения: 63
Зарегистрирован: 07 дек 2006, 17:52

Blood_Magic, огромное спасибо. Вот только остался один маленький вопросик:
как мне теперь можно перетаскивать мою форму, если Border я сделаю bsNone?
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

Yura_ua писал(а):Blood_Magic, огромное спасибо. Вот только остался один маленький вопросик:
как мне теперь можно перетаскивать мою форму, если Border я сделаю bsNone?

откуда ж мне знать ))), ну может кинуть TPanel и таскать за ее
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

BBB писал(а):Blood_Magic, а с дочерними окнами такой финт, что ли не проходит?
Я попробовал сделать кнопку (Button) круглой. В OnCreate кнопки вставил (вообще-то, пробовал на C++):

Код: Выделить всё

 RECT rClientRect;
 HRGN rgn;
 GetClientRect (&rClientRect);
 rgn = CreateEllipticRgnIndirect (&rClientRect);
 
  if (rgn)
    SetWindowRgn (m_hWnd, rgn, TRUE);
Думал, получу визуально круглую кнопку (на родительском диалоговом окне), ан нет. Кнопка внешне ничуть не поменялась :(

проходит, может с hWnd что напутал или с координатами
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Yura_ua
Сообщения: 63
Зарегистрирован: 07 дек 2006, 17:52

Blood_Magic писал(а):откуда ж мне знать ))), ну может кинуть TPanel и таскать за ее
Я пробовал так:

Код: Выделить всё

 private
      procedure WMNCHitTest(var M: TWMNCHitTest);
                 message wm_NCHitTest;
 public
    end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1. WMNCHitTest(var M: TWMNCHitTest); 

begin
  inherited;
  if M.Result = htClient then
    M.Result := htCaption;
end;
но перестает работать OnClick некоторых обьектов, а некоторые компоненты(не Borland-a) вообще не отображаются. Как это можно исправить?
Аватара пользователя
SergeyS
Сообщения: 196
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

[quote] if M.Result = htClient then
M.Result := htCaption;[/quot]

ты не бездумно присваивай всему htCaption, а анализируй только свободное место формы (место не занятое другими компонентами) или ещё лучше определи место за которое можно таскать и обозначь его.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):как мне теперь можно перетаскивать мою форму, если Border я сделаю bsNone?
Все это свободно отрабатывается на
- TForm.OnMouseDown
- TForm.OnMouseUp
- TForm.OnMouseMove
и не надо никаких суперизвращений через всякие HitTest'ы и т.п.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
SergeyS
Сообщения: 196
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

&quot писал(а):Все это свободно отрабатывается на
- TForm.OnMouseDown
- TForm.OnMouseUp
- TForm.OnMouseMove
и не надо никаких суперизвращений через всякие HitTest'ы и т.п.
только добавлю, что когда будешь перетаскивать форму данным способом не забудь на OnMouseDown поставить у формы MouseCapture := True, а на OnMouseUp - MouseCapture := False;
Это чтобы при резких рывках мышью форма не "соскакивала" с указателя
Ответить