Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Konstruktor direkt aufrufen (https://www.delphipraxis.net/20402-konstruktor-direkt-aufrufen.html)

Tubos 17. Apr 2004 13:10


Konstruktor direkt aufrufen
 
Hallo!

Der Benutzer meines Programmes soll die Schriftart und -farbe der Hints selbst wählen können.
Dazu benutze ich folgenden Code:
Delphi-Quellcode:
Type
  TMyHintWindow = Class (THintWindow)
   Constructor Create (AOwner: TComponent) ; override ;
  end;
und
Delphi-Quellcode:
Constructor TMyHintWindow.Create(AOwner:TComponent) ;
begin
  Inherited Create (AOwner);
  Canvas.Font:=form1.fontdialog1.font;
 end;
Das funktioniert.
Beim Programmstart muss ich dann folgendes machen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
{ ... }
 HintWindowClass := TMyHintWindow;
  Application.ShowHint := false;
 Application.ShowHint := True;
{ ... }
damit das übernommen wird.
Was mache ich, wenn ich das während des Programmablaufes noch ändern will?
nochmal dasselbe aufrufen, nützt nichts.
Kann man den Konstruktor direkt aufrufen?
Wenn ja, was muss ich als AOwner übergeben?

Thx;
Tubos

Luckie 17. Apr 2004 13:32

Re: Konstruktor direkt aufrufen
 
Deine Form?

Tubos 17. Apr 2004 14:19

Re: Konstruktor direkt aufrufen
 
Jetzt lässt es sich kompilieren und läuft ohne Absturz, die Schriftart der Hints ist aber immer noch die, die beim Programmstart festgelegt wurde.

Christian Seehase 17. Apr 2004 15:34

Re: Konstruktor direkt aufrufen
 
Moin Tubos,

wann wird denn das HintWindow erzeugt, bzw. wann wird der Font abgefragt?
Beim Programmstart ist mir zu ungenau.

Tubos 17. Apr 2004 15:47

Re: Konstruktor direkt aufrufen
 
onformcreate - siehe erstes posting.

Niko 17. Apr 2004 16:06

Re: Konstruktor direkt aufrufen
 
Ich habe das gerade ausprobiert und bei mir funktioniert der Wechsel mit folgendem Code ohne Probleme:
Delphi-Quellcode:
if FontDialog1.Execute then
begin
  Application.ShowHint := false;
  Application.ShowHint := true;
end;

Tubos 17. Apr 2004 16:09

Re: Konstruktor direkt aufrufen
 
wo gehört das rein?
if fontdialog1.execute then ... <-- if execute, was heißt das?

Christian Seehase 17. Apr 2004 16:20

Re: Konstruktor direkt aufrufen
 
Moin Tubos,

Du könntest im TMyHintWindow.Create direkt die gewünschten Daten des Fonts eintragen.

Ich habe es gerade mal ausprobiert, und hatte den Effekt, dass es zuerst mit FontDialog.Font nicht funktioniert hat.
Erst nachdem ich einmal Canvas.Font.Name direkt zugewiesen hatte (ohne FontDialog im Create) ging es immer mit der Zuweisung von FontDialog.Font :gruebel:

Niko 17. Apr 2004 16:33

Re: Konstruktor direkt aufrufen
 
Zitat:

Zitat von Christian Seehase
Du könntest im TMyHintWindow.Create direkt die gewünschten Daten des Fonts eintragen.

Ich glaube, das will Tubos nicht, da er ja den Font zur Laufzeit ändern können möchte.

@Tubos:
Der Code sollte dahin, wo du dem Benutzer die Möglichkeit geben willst, einen neuen Font auszusuchen - also z.B. in ein Button.OnClick.
Fontdialog.Execute zeigt den Dialog an und gibt true zurück, falls der Benutzer OK gedrückt hat, sonst false. Wenn also der Font geändert wurde setze ich Application.ShowHint auf false und gleich wieder auf true, damit das HintWindow neu erzeugt und damit auch über TMyHintWindow.Create die neue Schrift eingesetzt wird.

Tubos 17. Apr 2004 16:50

Re: Konstruktor direkt aufrufen
 
achso, execute hat einen rückgabewert ;)

danke, mein programm muss übermorgen fertig sein und ich hab jetzt im moment keine zeit, aber ich werde das dann nächste woche ausprobieren und mich hier nochmal melden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 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