Autor |
Beitrag |
Peter18
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mi 17.08.11 11:14
Ein freundliches Hallo an alle,
heute habe ich ein ganz übles Problem und hoffe jemand weiß Rat.
Gestern ist mir ein sehr komplexes Formular kaputt gegangen. Es enthält diverse Tabs, viele Steuerelemente mit Ereignisroutinen, die zur Laufzeit ein- oder ausgeblendet werden. Die Wiederherstellung und ausführliche Tests würden einige Tage in Anspruch nehmen.
Beim öffnen des Projektes oder laden des Formulars erscheint folgende Fehlermeldung:
"Fehler beim Erzeugen von Formular: Ein deaktiviertes oder unsichtbares Fenster kann nicht den Fokus erhalten."
Leider ist die ".~df" auch davon betroffen. Auch die Datensicherung hat in dem Moment zugeschlagen, als es passiert ist. Daher habe ich keine ältere Datei auf die ich zurückgreifen kann. Vielleicht kann man sie aber mit speziellen Tools oder einem Hex-Editor reparieren.
Ich hoffe ich kann mir die "Erneuerungstage" schenken. Dank Euch im Voraus.
Grüße Peter Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 17.08.2011 um 11:25
|
|
DonManfred
      
Beiträge: 148
Erhaltene Danke: 2
Windows 7
Delphi XE3 Pro + HTML5Builder
|
Verfasst: Mi 17.08.11 11:34
die Fehlermeldung sagt nicht das dein Formular kaputt ist sondern das du versuchst den Fokus auf ein Object zu setzen welches aktuell aber unsichtbar ist und demnach den fokus nicht erhalten kann. Prüfe deine Zuweisung(en) des Fokus...
_________________ Gruss Manfred
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mi 17.08.11 11:49
Hallo DonManfred,
DonManfred hat folgendes geschrieben : | die Fehlermeldung sagt nicht das dein Formular kaputt ist sondern das du versuchst den Fokus auf ein Object zu setzen welches aktuell aber unsichtbar ist und demnach den fokus nicht erhalten kann. Prüfe deine Zuweisung(en) des Fokus... |
das genannt Formular ist das Hauptformular der Anwendung. Ich bekomme diese Meldung auch, wenn ich es laden will. In der Projektverwaltung ist "Aktivieren" grau. Wo kann ich sonst noch dran "drehen"?
Grüße Peter
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 17.08.11 11:58
Wie sieht denn die Projektdatei (.dpr) aus?
Benutzt du irgendwo SetFocus?
Hast du vielleicht Visible beim Formular aus Versehen auf False gestellt?
Peter18 hat folgendes geschrieben : | Auch die Datensicherung hat in dem Moment zugeschlagen, als es passiert ist. Daher habe ich keine ältere Datei auf die ich zurückgreifen kann. |
Wie wäre es mit inkrementellen Backups?
Bei einigermaßen aktuellen Delphiversionen (2005+) wird übrigens automatisch ein Ordner mit einer einstellbaren Anzahl von letzten Versionen der Dateien angelegt.
|
|
DonManfred
      
Beiträge: 148
Erhaltene Danke: 2
Windows 7
Delphi XE3 Pro + HTML5Builder
|
Verfasst: Mi 17.08.11 12:01
Du könntest im Objektinspektor beim Formular bei "ActiveControl" ein Control einsetzen welches auf jeden Fall sichtbar ist.
_________________ Gruss Manfred
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mi 17.08.11 12:31
Hallo jaenicke,
Dank für Deine Antwort.
jaenicke hat folgendes geschrieben : | Wie sieht denn die Projektdatei (.dpr) aus?
Benutzt du irgendwo SetFocus?
Hast du vielleicht Visible beim Formular aus Versehen auf False gestellt?
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| program Project1; uses Forms, Unit1 in 'Unit1.pas' , Unit2 in 'Unit2.pas' , Unit3 in 'Unit3.pas' , |
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| begin Application.Initialize; Application.Title := 'Easy'; Application.CreateForm(TVertrieb, Vertrieb); Application.CreateForm(TDataModule2, DataModule2); Application.CreateForm(TNewSource, NewSource); |
Dieser Teil ist von Delphi erstellt worden. Ich habe Visible nicht bewust auf False gestellt, kann natürlich versehentlich geschehen sein.
Peter18 hat folgendes geschrieben : | Auch die Datensicherung hat in dem Moment zugeschlagen, als es passiert ist. Daher habe ich keine ältere Datei auf die ich zurückgreifen kann. | Wie wäre es mit inkrementellen Backups?
Bei einigermaßen aktuellen Delphiversionen (2005+) wird übrigens automatisch ein Ordner mit einer einstellbaren Anzahl von letzten Versionen der Dateien angelegt. |
Meine Datensicherung kopiert alle 30 Minuten geänderte Dateien. Ich habe nun eine zusätzliche Sicherung eingerichtet, die in einen anderen Ordner 1 mal pro Tag sichert und mehrere Versionen aufbewahrt. Das sollte reichen.
Bei Delphi 4 habe ich ein Backup nicht gefunden nicht gefunden.
Grüße Peter
Zuletzt bearbeitet von Peter18 am Mi 17.08.11 12:37, insgesamt 1-mal bearbeitet
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mi 17.08.11 12:36
Hallo DonManfred,
danke für deine Antwort.
DonManfred hat folgendes geschrieben : | Du könntest im Objektinspektor beim Formular bei "ActiveControl" ein Control einsetzen welches auf jeden Fall sichtbar ist. |
Ich kann das Formular nicht einmal laden. Es kommt immer die Fehlermeldung, auch wenn ich nur das Formular öffne.
Grüße Peter
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Mi 17.08.11 12:58
kommentiere doch mal die zeile mit 'TNewSource,NewSource' aus (nehme an, das ist deine Erweiterung?)
wenn's dann geht, weisst du, das du in Newsource schon beim create der Form einen Focus ungültig setzt
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mi 17.08.11 13:13
Hallo zuma,
danke für Deine Antwort.
zuma hat folgendes geschrieben : | kommentiere doch mal die zeile mit 'TNewSource,NewSource' aus (nehme an, das ist deine Erweiterung?)
wenn's dann geht, weisst du, das du in Newsource schon beim create der Form einen Focus ungültig setzt |
Hat leider nicht funktioniert. Vertrieb ist das Hauptformular und erhält als erstes den Focus. Von dort aus verzweigt es zu allen anderen Formularen.
Grüße Peter
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Mi 17.08.11 13:37
hast du den fehler auch, wenn du nur noch das Hauptformular erzeugst (also beide anderen weglässt?)
ich würde dann mal in deinem Hauptformular nachschauen, ob du im formcreate, formactivate oder so nen ungültigen Focus setzt (evtl. auch implizit durch eine andere funktion?)
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mi 17.08.11 13:48
Hallo zuma,
Dank für die Antwort.
zuma hat folgendes geschrieben : | hast du den fehler auch, wenn du nur noch das Hauptformular erzeugst (also beide anderen weglässt?)
ich würde dann mal in deinem Hauptformular nachschauen, ob du im formcreate, formactivate oder so nen ungültigen Focus setzt (evtl. auch implizit durch eine andere funktion?) |
Auch wenn ich alles restlos auskommentiere und nur das Hauptformular übrig bleibt kann ich es nicht laden. Zwar kommt dann keine Fehlermeldung, aber ich kann nicht in die Formularansicht wechseln. Der Fehler muss also in dem Hauptformular sein.
Grüße Peter
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 17.08.11 14:07
Du kannst die .dfm Daten auch komplett aus der Exe herausholen, dafür reicht ein normaler Decompiler.
Hast du denn einmal in die .dfm hineingeschaut, ob da irgendetwas schlecht aussieht?
Wenn du allerdings noch das alte Binärformat benutzt, hast du schlechte Karten...
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mi 17.08.11 14:34
Hallo jaenicke,
Danke für Deine Antwort.
jaenicke hat folgendes geschrieben : | Du kannst die .dfm Daten auch komplett aus der Exe herausholen, dafür reicht ein normaler Decompiler.
Hast du denn einmal in die .dfm hineingeschaut, ob da irgendetwas schlecht aussieht?
Wenn du allerdings noch das alte Binärformat benutzt, hast du schlechte Karten... |
Die Datei sieht nach Stream aus, als Text kann ich sie zwar auch speichern, habe ich aber nicht. Ich war gerade dabei statische Elemente, die nun dynamisch erzeugt werden, zu entfernen. Ich nehme an, beim Schreiben der Datei ist ein Fehler aufgetreten.
Momentan habe ich keinen Decompiler oder ist so etwas bei Delphi 4 dabei? Wenn nicht, gibt es geeignete Decompiler kostenlos im Internet?
Grüße Peter
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 17.08.11 14:44
Der nennt sich z.B. Delphi Decompiler  , aber was du beim Binärformat da rausbekommst, keine Ahnung...
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 17.08.11 16:44
Zur Not mal DFMEdit probieren; der kann sowohl das Binär-Format als auch das Text-Format von DFMs bearbeiten.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mi 17.08.11 17:00
Hallo BenBE,
Dank für deine Antwort.
BenBE hat folgendes geschrieben : | Zur Not mal DFMEdit probieren; der kann sowohl das Binär-Format als auch das Text-Format von DFMs bearbeiten. |
Wenn das ein Hex-Editor ist, habe ich so etwas. Werde wohl nicht drum herum kommen mit einfachen Formularen zu experementieren  und sie mir dann in Hex anzusehen. Wenn ich die Ursache finde, bevor jemand anders eine tolle Idee hat, werde ich berichten.
Grüße Peter
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 17.08.11 17:04
Ist kein HEX-Editor, sondern ein Editor, um Formulare direkt in der EXE zu bearbeiten. Kann aber auch von älteren Ständen die DFM exportieren als DFM.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mi 17.08.11 17:30
Hallo BenBE,
nochmals danke für Deine Antwort.
BenBE hat folgendes geschrieben : | Ist kein HEX-Editor, sondern ein Editor, um Formulare direkt in der EXE zu bearbeiten. Kann aber auch von älteren Ständen die DFM exportieren als DFM. |
Habe den Editor heruntergeladen. Sieht gut aus!  Ich sehe das Formular in der ".Exe" und in der ".dfm". Werde sie morgen in Ruhe vergleichen und versuchen wieder in Gang zu bringen. Dann berichte ich über die Ergebnisse.
Grüße von der wieder sonnigen Nordsee
Peter
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mi 17.08.11 21:16
Und wenn Du das wieder fertig hast, installierste Dir SVN oder Git oder irgendeine andere Versionsverwaltung. Notfalls nur mit einem lokalen Repository. Hat auch mir schon des Öfteren das Hinterteil gerettet. 
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Do 18.08.11 10:02
Hallo Nersgatt,
Danke für Deine Antwort, werde mich umsehen.
Nersgatt hat folgendes geschrieben : | Und wenn Du das wieder fertig hast, installierste Dir SVN oder Git oder irgendeine andere Versionsverwaltung. Notfalls nur mit einem lokalen Repository. Hat auch mir schon des Öfteren das Hinterteil gerettet.  |
Hallo an alle, hALLO BenBE;
Der "DFMEdit" hat mir sowohl in der ".Exe" als auch in der ".dfm" alles gezeigt, nach dem Speichern kam Delphi aber mit einem Streamfehler.  Der ist anscheinend nicht für Delphi4 geeignet.
Das brachte mich aber auf die Idee zu probieren, ob ich das Formular auch mit Delphi ohne Projekt öffnen kann. Tatsächlich gab es einen Filter für "*.dfm". Ich erhielt eine Textanzeige meines Formulars mit allen Komponenten und Konfigurationen. Mir fiel eine Zeile auf: " ActiveControl = .Owner". Diese Zeile war in keinem anderen Hauptformular enthalten und ".Owner" sehr suspekt, also entfernte ich sie. Nach dem Speichern war mein Projekt wieder vollständig!!
Grüße von der Nordsee
Peter
|
|