Witam,
Nie potrafię sobie poradzić z dodaniem obsługi nowych komunikatów np do komponentu dziedziczonego po TImage.
Unit komponentu wygląda następująco:
unit NewImage;
interface
uses Vcl.ExtCtrls, Winapi.Messages, Vcl.Graphics, System.Types, System.Classes;
const
CM_DOSTH = WM_APP + 500;
type
TNewImage=class(TImage)
protected
procedure CmDoSth(var Msg: TMessage); message CM_DOSTH;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy;override;
end;
implementation
procedure TNewImage.CmDoSth(var Msg: TMessage);
begin
Picture.Bitmap.Canvas.Brush.Color:=Msg.LParam;
Picture.Bitmap.Canvas.FillRect(TRect.Create(0,0,Width-1,Height-1));
end;
constructor TNewImage.Create(AOwner: TComponent);
begin
inherited;
end;
destructor TNewImage.Destroy;
begin
inherited;
end;
end.
Natomiast kod formy tak:
unit CompMsgT;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,NewImage;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
NewImage1: TNewImage;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(Handle,CM_DOSTH,0,random($FFFFFF));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
NewImage1:=TNewImage.Create(Self);
with NewImage1 do
begin
Width:=200;
Height:=200;
Top:=50;
Left:=100;
Parent:=Self;
Visible:=true;
Picture.Bitmap.SetSize(200,200);
Picture.Bitmap.Canvas.Brush.Color:=$FF00FF;
Picture.Bitmap.Canvas.FillRect(TRect.Create(0,0,Width-1,Height-1));
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
NewImage1.Destroy;
end;
end.
Co należałoby zrobić aby wywołana została procedury obsługi komunikatu CM_DOSTH po kliknięciu buttonem?