Форум: "KOL";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизФорма с полупрозрачной тенью Найти похожие ветки
← →
Сашик (2008-03-27 14:36) [0]Привожу процедуру прорисовки тени от модальной формы (Window XP). Жду замечаний и советов...
Подключение к форме:
FormShadow:= NewShadowForm(Form1.Form);
Form1.Form.AttachProc(WndProcFormShadow);
unit FmShadow;
interface
uses Windows, Messages, KOL {$IFNDEF VER120}, Variants{$ENDIF};
function WndProcFormShadow(Self_: PControl; var Msg: TMsg; var Rslt: Integer): Boolean;
function NewShadowForm(pForm: PControl): PControl;
var
FormShadow: PControl;
implementation
var
ShadowSize: Integer = 20;
ShadowColor: TColor = clBlack;
ShadowAlphaBlend: Byte = 120;
function WndProcFormShadow(Self_: PControl; var Msg: TMsg; var Rslt: Integer): Boolean;
var Bounds: TRect;
begin
if (Msg.Message = WM_WINDOWPOSCHANGED) or
(Msg.Message = WM_KILLFOCUS) then begin
GetWindowRect(Self_.Handle, Bounds);
SetWindowPos(FormShadow.Handle, Self_.Handle, Bounds.Left + ShadowSize,
Bounds.Top + ShadowSize, Bounds.Right - Bounds.Left,
Bounds.Bottom - Bounds.Top, SWP_NOACTIVATE + SWP_SHOWWINDOW);
end;
Result:= False;
end;
function NewShadowForm(pForm: PControl): PControl;
var r: TRect; aWidth, aHeight: Integer;
Src, Dst: HRGN;
begin
Result:= NewForm(Applet, "");
pForm.CanResize:= False;
pForm.StayOnTop:= True;
pForm.Style := pForm.Style and not WS_MAXIMIZEBOX;
with Result^ do begin
HasBorder:= False;
HasCaption:= False;
Color:= ShadowColor;
GetWindowRect(pForm.Handle, r);
aWidth:= r.Right - r.Left;
aHeight:= r.Bottom - r.Top;
Src:= CreateRectRgn(0, 0, aWidth, aHeight);
Dst:= CreateRectRgn(0, 0, aWidth - ShadowSize, aHeight - ShadowSize);
CombineRgn(Src, Src, Dst, RGN_DIFF);
SetWindowRgn(Handle, Src, True);
AlphaBlend:= ShadowAlphaBlend;
SetWindowPos(Handle, HWND_TOP, r.Left + ShadowSize, r.Top + ShadowSize,
aWidth, aHeight, SWP_NOACTIVATE + SWP_SHOWWINDOW);
DeleteObject(Src);
DeleteObject(Dst);
end;
end;
end.
← →
Ар2р (2008-09-17 08:47) [1]FormShadow:= NewShadowForm(Form1.Form);
Form1.Form.AttachProc(WndProcFormShadow);
и как это юзать ? у формы нет сво-ва form!
← →
MTsv DN (2008-09-17 11:50) [2]> у формы нет сво-ва form!
Посмотрите название конференции - KOL!!!
← →
Сашик (2008-09-23 00:22) [3]Прошу прощения... Имеется ввиду Form:= NewForm(...). Скорее всего код взят из проекта c MCK, а там Form1.Form имеет место наряду с Form. В Delphi 4 по крайней мере ошибок не выдается...
msgok(Form.Caption);
msgok(Form1.Form.Caption);
В обоих случаях выдает сообщение "Form1"
← →
MTsv DN (2008-09-23 10:52) [4]
msgok(Form.Caption);
msgok(Form1.Form.Caption);
Вообще-то в KOL - это одно и тоже при наличии одной формы...
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.057 c