Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CreateMessageDialog


Decoding ©   (2010-04-05 21:50:00) 

Hi мастера.

Создаю диалог с помощью функции CreateMessageDialog. Хочу что-либо рисовать на этой форме, для чего меняю ей оконную процедуру и обрабатываю событие WM_ERASEBKGND. Но есть проблема, а именно - фон у надписи, которая передается первым параметром в функцию CreateMessageDialog непрозрачный, что очень портит вид. Подскажите, как "добраться" до этой надписи и сделать ее фон прозрачным?

Краткий пример проблемы лежит тут - http://www.onlinedisk.ru/file/398668/


Decoding   (2010-04-06 16:10:00) [1]

Спасибо!


Игорь Шевченко   (2010-04-06 00:23:00) [2]

Примером:

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   FOldDialogWindowProc: TWndMethod;
   procedure DialogWindowProc (var Message: TMessage);
 end;

var
 Form1: TForm1;

implementation
uses
 GraphUtil;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 AForm: TForm;
begin
 AForm := CreateMessageDialog('Transparent dialog', mtInformation, [mbOk]);
 with AForm.FindComponent('Message') as TLabel do
   Transparent := true;
 FOldDialogWindowProc := AForm.WindowProc;
 AForm.WindowProc := DialogWindowProc;
 AForm.ShowModal;
end;

procedure TForm1.DialogWindowProc(var Message: TMessage);
var
 Wnd: HWND;
 ARect: TRect;
 Canvas: TCanvas;
begin
 if Message.Msg = WM_ERASEBKGND then
   with TWmEraseBkGnd(Message) do
   begin
     Canvas := TCanvas.Create;
     try
       Canvas.Handle := DC;
       Wnd := WindowFromDC(DC);
       Windows.GetClientRect(Wnd, ARect);
       GradientFillCanvas(Canvas, clYellow, clRed, ARect, gdHorizontal);
     finally
       Canvas.Free;
     end;
   end
 else
   FOldDialogWindowProc(Message);
end;

end.


Decoding   (2010-04-06 00:00:00) [3]


> внутри WM_ERASEBKGND
>
> SetBkMode(Canvas.Handle, TRANSPARENT) ?


Пробовал, не получилось… Может на примере покажете?


Игорь Шевченко   (2010-04-05 23:52:00) [4]


> Но есть проблема, а именно - фон у надписи, которая передается
> первым параметром в функцию CreateMessageDialog непрозрачный,
>  что очень портит вид


внутри WM_ERASEBKGND

SetBkMode(Canvas.Handle, TRANSPARENT) ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо