Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.066 c
6-1219937720
Miraj
2008-08-28 19:35
2010.08.27
Как учитывать траффик в своей программе, только по одному порту


2-1272357036
oleg_teacher
2010-04-27 12:30
2010.08.27
DateTimePicker2.


15-1264341586
Kolan
2010-01-24 16:59
2010.08.27
Исходники DMClient а доступны для всех желающих


15-1275560855
Kerk
2010-06-03 14:27
2010.08.27
В России стартует эксперимент по имитации полета на Марс


15-1271666858
clickmaker
2010-04-19 12:47
2010.08.27
Upload control для asp.net





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский