Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zwei Fragen zu Komponentenentwicklung (https://www.delphipraxis.net/47271-zwei-fragen-zu-komponentenentwicklung.html)

DGL-luke 11. Jun 2005 13:36

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)

phlux 11. Jun 2005 14:58

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.

DGL-luke 11. Jun 2005 15:50

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.

xaromz 11. Jun 2005 16:22

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

DGL-luke 11. Jun 2005 16:29

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.

xaromz 11. Jun 2005 17:35

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:
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;
Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr.
Seite 3 von 3     123   

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