Страница 2 из 3
Re: Прозрачность
Добавлено: 10 апр 2007, 14:03
BBB
Blood_Magic, попробовал. Выглядит здоровско. Этакий "скелет" окна, "рентгеновский снимок"

Все-таки, Билл Гейтс - гений. Такие возможности WinAPI предоставляет! Всего лишь десятком операторов такой эффект достигается! Напрасно его хают.
Re: Прозрачность
Добавлено: 10 апр 2007, 14:36
BBB
Blood_Magic, а с дочерними окнами такой финт, что ли не проходит?
Я попробовал сделать кнопку (Button) круглой. В OnCreate кнопки вставил (вообще-то, пробовал на C++):
Код: Выделить всё
RECT rClientRect;
HRGN rgn;
GetClientRect (&rClientRect);
rgn = CreateEllipticRgnIndirect (&rClientRect);
if (rgn)
SetWindowRgn (m_hWnd, rgn, TRUE);
Думал, получу визуально круглую кнопку (на родительском диалоговом окне), ан нет. Кнопка внешне ничуть не поменялась

Re: Прозрачность
Добавлено: 11 апр 2007, 05:15
SergeyS
" писал(а):Все-таки, Билл Гейтс - гений. Такие возможности WinAPI предоставляет!
Билл Гейтс - гений, согласен (иначе мы бы о нём и не говорили), но вот про WinAPI я бы по воздержался - не думаю что WinAPI придумал Гейтс, это заслуга других людей, да и большинство идей от MS ворованные (перекупленные)
Re: Прозрачность
Добавлено: 11 апр 2007, 16:48
Yura_ua
Blood_Magic, огромное спасибо. Вот только остался один маленький вопросик:
как мне теперь можно перетаскивать мою форму, если Border я сделаю bsNone?
Re: Прозрачность
Добавлено: 11 апр 2007, 21:02
Blood_Magic
Yura_ua писал(а):Blood_Magic, огромное спасибо. Вот только остался один маленький вопросик:
как мне теперь можно перетаскивать мою форму, если Border я сделаю bsNone?
откуда ж мне знать ))), ну может кинуть TPanel и таскать за ее
Re: Прозрачность
Добавлено: 11 апр 2007, 21:09
Blood_Magic
BBB писал(а):Blood_Magic, а с дочерними окнами такой финт, что ли не проходит?
Я попробовал сделать кнопку (Button) круглой. В OnCreate кнопки вставил (вообще-то, пробовал на C++):
Код: Выделить всё
RECT rClientRect;
HRGN rgn;
GetClientRect (&rClientRect);
rgn = CreateEllipticRgnIndirect (&rClientRect);
if (rgn)
SetWindowRgn (m_hWnd, rgn, TRUE);
Думал, получу визуально круглую кнопку (на родительском диалоговом окне), ан нет. Кнопка внешне ничуть не поменялась
проходит, может с hWnd что напутал или с координатами
Re: Прозрачность
Добавлено: 11 апр 2007, 23:53
Yura_ua
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) вообще не отображаются. Как это можно исправить?
Re: Прозрачность
Добавлено: 12 апр 2007, 06:26
SergeyS
[quote] if M.Result = htClient then
M.Result := htCaption;[/quot]
ты не бездумно присваивай всему htCaption, а анализируй только свободное место формы (место не занятое другими компонентами) или ещё лучше определи место за которое можно таскать и обозначь его.
Re: Прозрачность
Добавлено: 12 апр 2007, 10:24
somewhere
" писал(а):как мне теперь можно перетаскивать мою форму, если Border я сделаю bsNone?
Все это свободно отрабатывается на
- TForm.OnMouseDown
- TForm.OnMouseUp
- TForm.OnMouseMove
и не надо никаких суперизвращений через всякие HitTest'ы и т.п.
Re: Прозрачность
Добавлено: 13 апр 2007, 04:38
SergeyS
" писал(а):Все это свободно отрабатывается на
- TForm.OnMouseDown
- TForm.OnMouseUp
- TForm.OnMouseMove
и не надо никаких суперизвращений через всякие HitTest'ы и т.п.
только добавлю, что когда будешь перетаскивать форму данным способом не забудь на OnMouseDown поставить у формы MouseCapture := True, а на OnMouseUp - MouseCapture := False;
Это чтобы при резких рывках мышью форма не "соскакивала" с указателя