![]() |
Re: Zwei Fragen zu Komponentenentwicklung
das bedeutet also, der konstruktor wird schon ausgeführt, wenn ich die komponente aufs form setze, oder? (alles andere würde ja auch keinen sinn machen)
|
Re: Zwei Fragen zu Komponentenentwicklung
Klar ;) um herauszufinden ob du dich in der "DesignZeit" befindest oder zur Laufzeit musst du überprüfen ob csDesigning im Set von DesignTime ist.
|
Re: Zwei Fragen zu Komponentenentwicklung
hmm... TComponent hat gar keine Methode paint; sprich ich kann gar nichts überschreiben. was mach ich jetzt?
ich will auf jeden fall nicht von etwas anderem ableiten. |
Re: Zwei Fragen zu Komponentenentwicklung
Hallo,
nur visuelle Komponenten haben die Methode Paint (TCustomControl, TGraphicControl). Deshalb hatte ich ja von TGraphicControl abgeleitet. Wenn Du eine Paint-Methode haben willst, musst Du wohl ein WM_PAINT Ereignis abfangen, und zwar von übergeordneten Control. Ansonsten musst Du Dir deinen eigenen DC besorgen. Da Du aber dann im Grunde ein TGraphicControl nachbauen musst ist es eigentlich sinnvoller, gleich das Original zu nehmen. Gruß xaromz |
Re: Zwei Fragen zu Komponentenentwicklung
nein, wenn ich schon nicht von TGraphicControl ableiten will, dann will ich es auch nicht nachbauen.
Wie bringe ich das Parent dann dazu, WM_PAINT an die komponente zu senden? natürlich muss alles komponentenseitig ablaufen. |
Re: Zwei Fragen zu Komponentenentwicklung
Hallo,
Dein Parent wird Dir nie eine WM_PAINT-Botschaft schicken, es kennt Deine Komponente ja nicht und außerdem ist diese nicht visuell. Du musst also beim Zuweisen Deines Parent dessen WindowProc ersetzen (Alte merken, durch neue ersetzen und in dieser die gemerkte am Ende aufrufen<-wichtig!). Beim Zerstören/neu zuweisen von Parent musst Du denn auch die WindowProc zurücksetzen. In Deiner WindowProc kannst Du dann die Message abfangen. Das Ganze sieht dann so aus:
Delphi-Quellcode:
Gruß
private
FParent: TControl; OldWindowProc: TWndMethod; procedure SetParent(Control: TControl); procedure MyWindowProc(var Message: TMessage); public destructor Destroy; override; published property Parent: TControl read FParent write SetParent; end; destructor TMyClass.Destroy; begin // aufräumen ... // Evtl. alte WindowProc wiederherstellen if FParent <> nil then FParent.WindowProc := OdWindowProc; inherited; end; procedure TMyProc.SetParent(Control: TControl); begin // Alte WindowProc wiederherstellen if FParent <> nil then FParent.WindowProc := OldWindowProc; FParent := Control; // Neue WindowProc hooken if Control <> nil then begin OldWindowProc := FParent.WindowProc; FParent.WindowProc := MyWindowProc; end; end; procedure TMyClass.MyWindowProc(var Message: TMessage); begin // Alte WindowProc aufrufen OldWindowProc(Message); if Message.Msg = WM_PAINT then begin // Hier auf WM_PAINT reagieren end; end; xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz