AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Ab wann darf ein Fensterhandle verwendet werden?
Thema durchsuchen
Ansicht
Themen-Optionen

Ab wann darf ein Fensterhandle verwendet werden?

Ein Thema von Dosenelepfand · begonnen am 16. Sep 2006 · letzter Beitrag vom 17. Sep 2006
Antwort Antwort
Dosenelepfand

Registriert seit: 13. Sep 2006
19 Beiträge
 
Delphi 5 Enterprise
 
#1

Ab wann darf ein Fensterhandle verwendet werden?

  Alt 16. Sep 2006, 16:22
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Ab wann darf ein Fensterhandle verwendet werden?

  Alt 16. Sep 2006, 16:58
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dosenelepfand

Registriert seit: 13. Sep 2006
19 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Ab wann darf ein Fensterhandle verwendet werden?

  Alt 16. Sep 2006, 17:19
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Ab wann darf ein Fensterhandle verwendet werden?

  Alt 16. Sep 2006, 17:21
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dosenelepfand

Registriert seit: 13. Sep 2006
19 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Ab wann darf ein Fensterhandle verwendet werden?

  Alt 16. Sep 2006, 17:25
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Ab wann darf ein Fensterhandle verwendet werden?

  Alt 16. Sep 2006, 17:27
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dosenelepfand

Registriert seit: 13. Sep 2006
19 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Ab wann darf ein Fensterhandle verwendet werden?

  Alt 16. Sep 2006, 17:31
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
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#8

Re: Ab wann darf ein Fensterhandle verwendet werden?

  Alt 17. Sep 2006, 20:10
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.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 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