AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler bei Form1.Active

Ein Thema von mak · begonnen am 1. Sep 2004 · letzter Beitrag vom 6. Sep 2004
Antwort Antwort
mak

Registriert seit: 26. Mai 2004
8 Beiträge
 
#1

Fehler bei Form1.Active

  Alt 1. Sep 2004, 16:48
Hallo

hab da ein ziemlich grosses Problem und das besteht darin, das ich je nach Auslastung des PC's bei dieser Zeile "Form1.Active" einen Fehler erhalte.

Hab heute den ganzen Tag div. Versionen ausprobiert (Active, Showing) immer derselbe Effekt.

Irgendwie scheint es, dass das "Fomr1" noch nicht ganz erstellt ist, wenn der PC andere Task bearbeiten muss. z.Bsp. Word aufstarten etc., wenn ich darauf zugreife. Ich hab auch schon einen Timer eingefügt und das Programm X sec leerlaufen lass, bis ich dann die Funktion aufgerufen habe. Damit hat es funktioniert.

Gibt es irgendeine Funktion mit der ich abfragen kann ob der Create-Vorgang abgeschlossen ist.
Bzw. ist der Vorgang wirklich abgeschlossen nach dem Aufruf der Funktion Create?

Der Ablauf des Programm ist Ok. Die Abfrage "Form1.Active" erfolgt erst nach dem Aufruf "Application.Run".

Besten Dank im voraus für die Hilfe.

Gruss Markus
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Fehler bei Form1.Active

  Alt 1. Sep 2004, 17:17
Warum packst du den Code dann nicht einfach in den OnShow/OnLoaded/WasWeißIchWieDerHeißt - Event.
Dadurch würde er wirklich erst dann ausgefürht werden, wenn das Formular dargestellte wird. (oder vielleicht kurz vorher)
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Fehler bei Form1.Active

  Alt 1. Sep 2004, 17:22
Hi,

wo greifst du auf Active zu? Wird das Form automatisch erzeugt oder rufst du das Create selbst auf? Eventuell könnte auch ein bisschen Code ganz hilfreich sein.

Zitat von mak:
Irgendwie scheint es, dass das "Fomr1" noch nicht ganz erstellt ist, wenn der PC andere Task bearbeiten muss. z.Bsp. Word aufstarten etc., wenn ich darauf zugreife.
Das dürfte bei einer Ein-Thread-Anwendung IMHO nicht passieren.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Golze

Registriert seit: 26. Aug 2004
Ort: Berlin
32 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: Fehler bei Form1.Active

  Alt 1. Sep 2004, 17:27
Hi Mak,
die Form ist nach dem Create noch nicht endgültig fertig. Das liegt aber an Windows und der Bearbeitung der Message-Queue. Was ich in deinem Problem nicht verstehe ist, was du eigentlich wirklich machen willst. Gibt doch mal ein Beispiel. Das OnShow-Ereignis ist eine Möglichkeit, hat aber auch seine Tücken. Wozu hast du einen Timer gestartet. Las' mal sehen, wo dein Problem ist.
Kay
Kay Golze
  Mit Zitat antworten Zitat
mak

Registriert seit: 26. Mai 2004
8 Beiträge
 
#5

Re: Fehler bei Form1.Active

  Alt 3. Sep 2004, 08:51
Hallo

sorry für die späte Antwort, war gester leider ausser Haus, daher erst jetzt eine Rückmeldung.

Also ich habe da ein Projekt das über eine RS232-Schnittstelle kommuniziert.
Ein Teil des Projektes besteht darin, dass in einem Formular Fehler angezeigt werden, die aus eben dieser Hardware über RS232 eingelesen werden.
Wenn nun ein Fehler ansteht wird das Fehleranzeigeformular automatisch geöffnet und mittels einer Funktion das StringGrid auf dem Formular gefüllt. Diese Funktion wird über einen Timer (DelphiTimer nicht MM) zyklich aufgrufen wie die Kommunikation auch. Damit ich nun diese Funktion nur aufrufe wenn das Formular auch angezeigt ist, habe ich eben die Funktion "FormX.Showing" verwendet.

Könnte es sein, dass der Delphi-Timer (Komponente unter System) eine thread benutzt und daher nicht mehr synchronisiert ist?

Ich Versuch das ganze mal mit dem Hi-Timer von LMD, mal schauen was dabei herauskommt.

Gruss Markus und vielen Dank für die Anregungen.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#6

Re: Fehler bei Form1.Active

  Alt 3. Sep 2004, 08:57
Zitat von mak:
Könnte es sein, dass der Delphi-Timer (Komponente unter System) eine thread benutzt und daher nicht mehr synchronisiert ist?
TTimer benutzt die Windows Timer. Auf der Form wo deine TTimer Komponente liegt, wird auch die Nachricht WM_TIMER hingeschickt.
Und in der Fensternachrichtenschleife abgelegt. Alle Nachrichten die vor WM_TIMER kommen, werden auch zuerst bearbeitet.
Aber irgendwie habe ich dein Problem nicht so richtig verstanden.
  Mit Zitat antworten Zitat
mak

Registriert seit: 26. Mai 2004
8 Beiträge
 
#7

Re: Fehler bei Form1.Active

  Alt 3. Sep 2004, 09:07
Hallo

also ich versuche es noch einmal.

Ganz vereinfacht würde das Projekt aus zwei Formularen bestehen: FormHauptprogramm, FormFehlerAnzeige

FormHauptprogramm hat einen Timer. In diesem OnTimer Event steht die Abfrage FormFehlerAnzeige.Showing.
Je nach Auslastung des PC's wird bei starten des Programms an dieser Stelle ein Fehler ausgelöst.

Der Timer wird erst gestartet im "OnActivate" vom Hauptformular. Also nach meine Verständnis, wenn das Formular FormFehlerAnzeige created ist und ich auch solche Abfragen an das Formular FormFehlerAnzeige stellen kann.

Hoffe ich hab es jetzt auf den Punkt gebracht.

Gruss Markus
  Mit Zitat antworten Zitat
Golze

Registriert seit: 26. Aug 2004
Ort: Berlin
32 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: Fehler bei Form1.Active

  Alt 3. Sep 2004, 16:28
Hallo Mak,
ein Create einer Form reicht nicht aus. Das Handle einer Form ist erst im OnShow-Ereigniss einer Form verfügbar. Ein Timer ist in der Tat sowas wie ein Thread von Windows. Wenn ich dich richtig verstanden habe, mußt die natürlich in deinem OnTimer-Event abfragen, ob die Form vorhanden ist und angezeigt wird. Folgender Weg könnte dein Problem lösen:
1. Erzeuge deine Form für die Fehlerausgabe (also mit dem StringGrid) bereits beim Programmstart und setze sie auf Invisible (Visible := False).
2. Wenn durch deine Funktion Daten in den StringGrind abgelegt werden sollen, kann das nun zu jedem Zeitpunkt erfolgen.
3. Zeige die Fehler-Form durch Visible := True an, wenn es notwendig ist.
4. Zerstöre die Form erst mit dem Programmende.
Mit diesem Weg hast du nun kein Problem mit dem Timer. Es funktioniert immer. Ich verwende diesen Weg selbst an zahlreichen Stellen.

Grüße Kay
Kay Golze
Wo Gold ist, muß es auch glänzen.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: Fehler bei Form1.Active

  Alt 3. Sep 2004, 17:24
Kay hat natürlich vollkommen recht: Ohne Handle kein Message loop. -> keine Timernachricht.
Ist das Form nur unsichtbar, bekommt es trotzdem Messages.

Zitat:
Je nach Auslastung des PC's wird bei starten des Programms an dieser Stelle ein Fehler ausgelöst.
Wenn dein Timer etwas bereitstellt, das dein Form unbedingt benötigt, kannst du direkt ins nächste Messer laufen.
Timer besitzen IMHO die niedrigste Priorität überhaupt -> Will irgendein Programm CPU-Zeit, wird dein Timer nix mehr abkriegen.
  Mit Zitat antworten Zitat
mak

Registriert seit: 26. Mai 2004
8 Beiträge
 
#10

Re: Fehler bei Form1.Active

  Alt 6. Sep 2004, 07:59
Hallo

besten Dank für eure Hilfe.

Werde mal Versuchen, das System von Kay in meinem Programm umzusetzen.

Gruss Markus
  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 15:33 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