Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.11.23;
Скачать: CL | DM;

Вниз

CreateMessageDialog   Найти похожие ветки 

 
Decoding   (2010-04-05 21:50) [0]

Hi мастера.

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

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


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


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


внутри WM_ERASEBKGND

SetBkMode(Canvas.Handle, TRANSPARENT) ?


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


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


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


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

Примером:

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 16:10) [4]

Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2014.11.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.005 c
15-1397268043
ketmar_
2014-04-12 06:00
2014.11.23
всем привет


2-1384998017
MonoLife
2013-11-21 05:40
2014.11.23
ToolButton в ToolBar всегда по правому краю.


2-1384811925
Леонид
2013-11-19 01:58
2014.11.23
Как сделать файл "только для чтения"


15-1397421007
Юрий
2014-04-14 00:30
2014.11.23
С днем рождения ! 14 апреля 2014 понедельник


15-1397409286
Пит
2014-04-13 21:14
2014.11.23
HTML -> управление шириной линии <hr />