Главная страница
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.007 c
3-1301315020
samalex2504
2011-03-28 16:23
2014.11.23
В IB связать, отфильтровать и вывести несколько больших ХП


15-1397107818
ВладОшин
2014-04-10 09:30
2014.11.23
Быстро и сердито, красиво показать таблицу


15-1397565396
Cobalt
2014-04-15 16:36
2014.11.23
Кто придумывает такие интерфейсы?


11-1255389025
Валера
2009-10-13 03:10
2014.11.23
Размер файла строчкой в KOL.


2-1384954189
Няшечка
2013-11-20 17:29
2014.11.23
Локальный TCP прокси с пакетным едитингом