Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ab wann darf ein Fensterhandle verwendet werden? (https://www.delphipraxis.net/77221-ab-wann-darf-ein-fensterhandle-verwendet-werden.html)

Dosenelepfand 16. Sep 2006 15:22


Ab wann darf ein Fensterhandle verwendet werden?
 
Hallo!

Ich schreibe derzeit eine eigene Komponente und benötige für sie einen Timer. Jedoch erhalte ich einen Laufzeit-Fehler, wenn ich diesen Timer innerhalb der Create-Methode der Komponente über Aufruf von SetTimer zu erzeugen versuche. Dies ist nicht der erste derart fehlgeschlagene Versuche der Verwendung einer Funktion, die ein Handle des Fensters übernimmt, das anscheinend noch nicht verwendet werden darf.

Meine Frage nun: wo sollte ich stattdessen derartige Initialisierungen vornehmen?


Liebe Grüße,
Hanno

Luckie 16. Sep 2006 15:58

Re: Ab wann darf ein Fensterhandle verwendet werden?
 
Der Fehler muss wo anders liegen, schlägt eine API Funktion fehl, SetTimer ist eine, wird in der Regel ein Fehlercode zurückgegeben und keine Exception ausgelöst oder ähnliches. Der Laufzeitfehler deutet eher daraufhin, dass du auf einen ungültigen Speicherbereich zugreifst, denke ich mal.

Dosenelepfand 16. Sep 2006 16:19

Re: Ab wann darf ein Fensterhandle verwendet werden?
 
Hallo!

Ich erzeuge meine Komponente testweise zur Laufzeit in einem Formular.

Delphi-Quellcode:
procedure TfrmSH.FormCreate(Sender: TObject);
begin
  inherited;
  Editor := TSyntaxEditorComponent.Create(self);
  Editor.parent    := self;
  Editor.Top       := 10;
  Editor.Left      := 10;
  Editor.Width     := 800;
  Editor.height    := 550;
  Editor.Visible   := true;
  ActiveControl    := Editor;
end;
Die besagten Aufrufe, z.B. von SetTimer, befinden sich nun im Konstruktor meiner Klasse TSyntaxEditorComponent.

Erzeuge ich die Komponente bereits falsch?


Liebe Grüße,
Hanno

SirThornberry 16. Sep 2006 16:21

Re: Ab wann darf ein Fensterhandle verwendet werden?
 
wie sieht der constructor der Komponente aus. Wie Luckie bereits sage lösen Api-Funktionen keine Exception aus (und SetTimer ist so eine Funktion) sondern liefern Fehlercodes zurück. Es ist also zu vermuten das dein SetTimer etwas anderes ist als die Api-Funktion SetTimer. Daher wäre der Constructor interessant

Dosenelepfand 16. Sep 2006 16:25

Re: Ab wann darf ein Fensterhandle verwendet werden?
 
Hallo.

Der Konstruktor sieht so aus:

Delphi-Quellcode:
constructor TSyntaxEditorComponent.Create(aOwner: TComponent);
begin
  inherited;
 
  ...

  SetTimer(Handle,1,200,0);
end;
Der Fehler, der mir ausgegeben wird, ist "Element hat kein übergeordnetes Fenster". Daher glaube ich nicht, dass es etwas speziell mit dem Funktionsaufruf selbst, sondern eher mit dem Zeitpunkt, an dem ich die Funktion aufrufe.

Liebe Grüße,
Hanno

SirThornberry 16. Sep 2006 16:27

Re: Ab wann darf ein Fensterhandle verwendet werden?
 
im Constructor selbst hat das Object noch kein Handle. Das wird frühestens beim setzen des Parent zugewiesen da es vorher kein sinn macht. Wenn du aber schon mit der VCL arbeitest würde ich nicht SetTimer nutzen sondern im Private einfach einen TTimer plazieren und diesem im Constructor erzeugen.

Dosenelepfand 16. Sep 2006 16:31

Re: Ab wann darf ein Fensterhandle verwendet werden?
 
Hallo.

Okay, danke für deine Antwort - genau so etwas, wie du es sagtest (Handle wird erst zugewiesen, wenn dieses und jenes getran wurde) habe ich mir erhofft.


Liebe Grüße,
Hanno

Sunlight7 17. Sep 2006 19:10

Re: Ab wann darf ein Fensterhandle verwendet werden?
 
Alternativ zu TTimer kannst Du auch folgendes versuchen...

Delphi-Quellcode:
constructor TSyntaxEditorComponent.Create(aOwner: TComponent);
begin
  inherited;
 
  ...

  Owner:=TWinControl(AOwner);
  SetTimer(Self.Handle,1,200,0);
end;
... oder SetTimer in der "Loaded" procedure setzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz