Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Timage ein Handle verpassen?

  Alt 4. Jul 2005, 19:13
Hallo,
ich musste zwar noch nie einem TGraphicControl ein Fensterhandle verpassen. Ich habe mich aber erinnert es in den VCL-Sourcen bei TTimer schon einmal gesehen zu haben. Dort wird dem Timer ein Fensterhandle untergeschoben.
Das habe ich jetzt auf TImage angewendet und einen Nachfahren gebastelt.
Delphi-Quellcode:
unit HandleImage;

interface

uses
  Windows, Messages, SysUtils, Classes, Forms, Controls, ExtCtrls;


const

  PM_LOADIMAGE = WM_USER+1024;
    
type

  THandleImage = class(TImage)
  private
    { Private-Deklarationen }
    FWindowHandle : HWND;
    FOnLoadImage : TNotifyEvent;
    procedure WndProc(var Msg: TMessage);
  protected
    { Protected-Deklarationen }
    procedure LoadImage; virtual;
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property Handle : HWnd read FWindowHandle;
  published
    { Published-Deklarationen }
    property OnLoadImage : TNotifyEvent read FOnLoadImage write FOnLoadImage;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyComps', [THandleImage]);
end;

{ THandleImage }

constructor THandleImage.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FWindowHandle := Classes.AllocateHWnd(WndProc);
end;

destructor THandleImage.Destroy;
begin
  Classes.DeallocateHWnd(FWindowHandle);
  inherited Destroy;
end;

procedure THandleImage.LoadImage;
begin
  If Assigned(FOnLoadImage) then
    FOnLoadImage(Self);
end;

procedure THandleImage.WndProc(var Msg: TMessage);
begin
  with Msg do
    if Msg = PM_LOADIMAGE then
      try
        LoadImage;
      except
        Application.HandleException(Self);
      end
    else
      Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
end;

end.
Und siehe da - man kann der Komponente mit SendMessage ein Botschaft senden.
Siehe Anlage. Evt kann man das ja auch für ein Hintwindow verwenden.
Angehängte Dateien
Dateityp: zip zip_161.zip (221,7 KB, 11x aufgerufen)
I come from outer space to save the human race
  Mit Zitat antworten Zitat