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 Verlust von Handle? (https://www.delphipraxis.net/121426-verlust-von-handle.html)

toyoman 27. Sep 2008 09:34


Verlust von Handle?
 
Hallo Delphianer

Ich schätze ich verliere den Handle meiner Listbox1 wenn ich ein selberkreiertes Window wieder schliesse.
Das Fenster öffne ich wie folgt:

Delphi-Quellcode:
procedure Tmainform.Startup();
var
     wstartup   : Tfrmstartup;
begin
   logfileschreiben('Starting up...',logfilename);
   wstartup:=Tfrmstartup.Create(frmstartup); // Formular erstellen (create)
   // Filter Fenster abfüllen -> Datenbank Felder
   wstartup.Caption:=caption; // Version und Programmname anzeigen
   wstartup.Timer1.Enabled:=true; // Progressbar starten
   wstartup.timer2.Enabled:=true;

   // Formular anzeigen
   if wstartup.showmodal = mrOk then // Auswahlformular anzeigen
   begin
        logfileschreiben('Debug mode active',logfilename);
        debugmode:=true;
   end else
   begin
        logfileschreiben('Debug mode inactive - normal startup.',logfilename);
        debugmode:=false;
        // nicht benötigt
   end;

   wstartup.Free; // Formular wieder freigeben
   listbox1.Repaint;
   Update;
end;
Nach dem Schliessen dessen (mrOk oder einfach normales schliessen), kann ich im Hauptformular die Listbox1 nicht mehr mit der Maus bedienen. Alle anderen Steuerelemente lassen sich noch bedienen (die Listbox reagiert auch noch auf Tastenbefehle aber nicht mehr auf Mausklicks).

Habt ihr eine Idee woran das liegen könnte?
Auf Wunsch kann ich auch noch mehr Code zeigen. Aber ich denke das ist eigentlich der relevante Teil...

Danke und Gruss

sirius 27. Sep 2008 09:42

Re: Verlust von Handle?
 
An dem Code sehe ich keinen Fehler (ausser das ein try finally sich gut machen würde; ändert aber nix an deinem Fehler).
Was macht den die Startupform so alles und wann wird diese Methode hier aufgerufen?

toyoman 27. Sep 2008 10:37

Re: Verlust von Handle?
 
Zitat:

Zitat von sirius
An dem Code sehe ich keinen Fehler (ausser das ein try finally sich gut machen würde; ändert aber nix an deinem Fehler).
Was macht den die Startupform so alles und wann wird diese Methode hier aufgerufen?

die wird beim Systemstart angezeigt um eben dem Benutzer die Zeit zu geben den Debug Modus zu starten (ansonsten automatischer Ablauf). Die Startup Prozedur ruf ich aus der Mainform.Activate Prozedur auf... siehe:

Delphi-Quellcode:
procedure Tmainform.FormActivate(Sender: TObject);
begin
    // Startup Window
    mainform.WindowState:=wsminimized;
    Startup;
    mainform.WindowState:=wsnormal;
    if listbox1.Count>=0 then
    begin
        // Buttons enablen
        btnsel.Enabled:=true;
        btnall.Enabled:=true;
        listbox1.ItemIndex:=0;
    end else
    begin
        btnsel.Enabled:=false;
        btnall.Enabled:=false;
    end;
    if debugmode=false then
    begin
        // Autostart Tasks wenn gewünscht
        if getinivalue('GUI_Settings','AutoStartTasks') = 'true' then
        begin
          logfileschreiben('AutoStart tasks set. Start all tasks now...',logfilename);
          if getinivalue('GUI_Settings','MinimizeWindow') = 'true' then
          begin
              logfileschreiben('Minimize window set.',logfilename);
              mainform.WindowState:=wsminimized;
          end else
          begin
              mainform.WindowState:=wsnormal;
          end;
          if btnall.Enabled=true then
          begin
                btnall.click; // Start alle Tasks
          end else
          begin
                logfileschreiben('No Task to do!',logfilename);
          end;
          if getinivalue('GUI_Settings','AutoClose') = 'true' then
          begin
            logfileschreiben('AutoClose Tool after ending all tasks.',logfilename);
            close;
          end;
        end;
    end else
    begin
       showmessage('TaskTools is ready, enjoy! (Debug-Mode)');
       logfileschreiben('Debug mode activated (by user), disable autostart functions.',logfilename);
    end;
end;

sirius 27. Sep 2008 11:00

Re: Verlust von Handle?
 
Das FormActivate wird aber u.U. mehrmals im Programmlauf ausgeführt. Setze den Code coh in die Projektdatei (dpr) an den Anfang.

Edit: Dann verschwindet vielleicht auch gleich das andere Problem.

toyoman 27. Sep 2008 13:20

Re: Verlust von Handle?
 
Zitat:

Zitat von sirius
Das FormActivate wird aber u.U. mehrmals im Programmlauf ausgeführt. Setze den Code coh in die Projektdatei (dpr) an den Anfang.

Edit: Dann verschwindet vielleicht auch gleich das andere Problem.

Das geht aber nicht. Kann das nicht in die dpr reintun. Da kennt er ja noch keine Funktionen nix.
Aber ich hab den Startup Aufruf nun in die onShow Prozedur gelegt und das hat geholfen!

Funzt.

Danke!

SirThornberry 27. Sep 2008 13:28

Re: Verlust von Handle?
 
Für mich klingt der Effekt als ob du da mit Threads arbeitest und dabei etwas durcheinander kommt.


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