Entwickler-Ecke
Sonstiges (Delphi) - Bug in Delphi gefunden? Probleme mit ganz einfachem Fenster
Frankieboy - Sa 12.04.08 22:21
Titel: Bug in Delphi gefunden? Probleme mit ganz einfachem Fenster
Hi,
ich werd noch verrückt. :evil: :evil:
Endlich ist mein Programm fertig, fast alle Bugs beseitigt und jetzt
das...
Ein ganz einfaches Form (FormUnlock) macht mir Probleme - für nähere Infos:
Anhang Fehler1.jpg
Jedesmal, wenn es im Code mit
FormUnlock.Show oder
FormUnlock.ShowModal
aufgerufen wird, wird es nur verstümmelt angezeigt! Das Mask-Edit und andere Komponenten fehlen während der Laufzeit einfach/werden nicht angezeigt (siehe
Anhang Fehler2.jpg).
Da es sich aber um einen wichtigen Teil des Programms handelt, kann ich nicht weitermachen...
Sobald dann das Programm per
geschlossen wird, kommt noch eine Fehlermeldung hinterher: "Ungültiges Fensterhandle" (siehe
Anhang Fehler3.jpg)
Hat jemand eine Ahnung was ich machen soll? Es ist schon klar, dass das realtiv wenige Informationen zum "Fern-Debuggen" sind, aber ich will das Programm so schnell wie möglich fertig stellen!!
Vielen Dank schon mal,
Frankie
Bernhard Geyer - Sa 12.04.08 22:25
Versuchst du das Formular in einem Thread anzuzeigen/aufzurufen?
Fals ja: Lies mal den Kommentar durch den Delphi bei Anlegen einer Unit mit einem Nachfahren von TThread in der Unitdatei ergänzt.
Frankieboy - Sa 12.04.08 23:59
Das Programm hat normalerweise nur einen Thread, den Standardthread.
Allerdings benutze ich auf einem Formular ('Process', im Anhang 2 zu sehen) die VC
TDosCommand. Damit führe ich das Befehlszeilenprogramm openssl.exe aus.
Direkt nach dessen Beendung wird auch das Formular Unlock aufgerufen.
TDosCommand bildet zur Ausführung des Programms zwar einen eigenen Thread (TThread), das weiß ich aus der Unit der VC. Allerdings ist dieser schon wieder geschlossen, wenn das FormUnlock angezeigt wird.
Außerdem habe ich ähnliche Probleme mit Anzeigen von FormUnlock, wenn ich es einfach vom Hauptformular meines Projektes aufrufe - zb. mit Onclick-Event - zu diesem Zeitpunkt wurde TDosCommand noch gar nicht benutzt, und das Hauptformular enthält ja auch kein TDosCommand-Objekt...
Ich forste nochmal den Sourcecode der Komponente durch.
Trotzdem schon mal
vielen Dank!
--- EDIT ---
An der Komponente DosCommand und ihrem eigenen Thread kann es nicht liegen. Ich habe sie zum Test einmal
komplett aus meinem Programm entfernt... Also bleibt da nur noch der Main-Thread.
Durch Zufall (Einfügen eines
Breaks) bin ich auf noch mehr Probleme gestoßen:
So macht schon das aufrufen des Create Konstruktors einer TRegistry-Variable Probleme, die ich zum lesen der Optionen in der Win-Registry benutze:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TFormOptions.LoadOptions; var Reg: TRegistry Buffer: TStrings;
begin Reg := TRegistry.Create; Buffer := TStringList.Create; end; |
Jetzt weiß ich nicht mehr so genau, was ich noch machen soll :roll: :?:
Fabian E. - So 13.04.08 18:52
welches OS hast du denn? Vielleicht springt dir vista dazwischen beim erstellen der Reg-Variable oder so. Ist mir zwar noch nie passiert aber du kannst ja mal versuchen, das program mit admin rechten zustarten falls du vista hast.
Ansonsten hast du vielleicht irgendwelche Registry schutzprogramme installiert die dazwischenfunken können?
gruß
Frankieboy - So 13.04.08 23:34
OS (seit 2 Jahren und wird so bleiben): WinXP x86
Also, ich hab jetzt mal meine Comodo Firewall runtergeschmissen.
Sonst ist nur ein Virenscanner -AntiVir- installiert, den hab ich schon lange und sollte kein Problem sein. Andere On-Access-Scanner oder Sicherheitstools irgend einer Art laufen nicht.
Entweder
1. Hab ich n Virus
2. Stimmt was mit Windows nicht oder
3. stimmt was mit Delphi nicht
Lustigerweise hab ich das Problem mit TRegistry dazu in jedem beliebigen Formular, auch komplett neu erzeugte mit New|Project.
Ich werd das ganze jetzt erst mal auf Eis legen, vielleicht fällt mir ja noch was ein.
Grüße und trotzdem Danke,
Frankie
Timbo - Mo 14.04.08 00:19
Hi,
also für mich klingt das nach einem ganz andern Problem, hast Du dynamische Arrays im Programm oder sonstige Geschichte mit manueller Speicherreservierung?
Ich denke das Problem liegt ganz wo anders und es tritt nun zufällig an der Stelle auf.
Hast Du Warungen vom Compiler?
Geh die brisanten Stellen nochmal durch, ist bestimmt irgendwo noch ein Fehler versteckt.
Kennst Du FastMM4 vieleicht hilft Dir das ja weiter...
Frankieboy - Mo 14.04.08 14:45
Zu der manuellen Speicherreservierung:
Nein, ich benutze keine dynamischen Array, etc...
Wie gesagt, nur
DosCommand und da bin ich mir nicht ganz sicher, ob es bugfrei ist.
Außerdem:
Ich hab mit mit
File|New|Application zum Testen eine komplett neue Applikation angelegt. Dann in der Unit von Form1 eine globale Variable
Reg: TRegistry erstellt und die Unit
Registry zu den Interface Units hinzugefügt.
Dann habe ich einen simplen Button eingefügt.
OnClick_Event des Buttons:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Reg := TRegistry.Create; end; |
Nach starten des Programms und Anklicken des Buttons passiert nichts: keine Fehlermeldung.
Nun füge ich aber im Editor einen Codebreak bei
Reg := TRegistry.Create; ein. Nach dem das Programm gestartet ist, hält der Compiler nach Drücken des Knopfs Button1 an.
Klicke ich jetzt
Trace Into kommt eine Access Violation.
Die Probleme treten also bei einfachsten Programmen auf -
das kann nicht an einem Codefehler liegen! Da stimmt was anderes nicht.
Zum Compiler:
nein, der Compiler warnt/meckert nicht. Ich kriege nur die Exceptions.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!