![]() |
AW: Fehler vor OnCreate finden
Hallo,
Zitat:
Und es stet ja auch kein ButtonClick-Event im MadExcept-Log auf Seite 1. Ausserdem gibt es kein WMLButtonDown, sonder nur ein WMLButtonUp; Noch mal an den Threadersteller: Woher weißt Du, dass es in/vorm OnCreate passiert? So wie ich es verstanden habe, hast Du ein Hauptprogramm, was ein anderes Form startet und dort kommt schon beim Erzeugen (nicht in FormActivate) der Fehler? Was mir noch aufgefallen ist. Das Grid steckt ja in einem Frame, ist der vielleicht nicht sichtbar oder hat den Focus nicht?! Schreib mal in TFrame_Listendruck.Grid_not_printedClick eine einfache MessageBox als erste Zeile, um zu sehen, wann die Klick-Methode aufgerufen wird. Ausserdem noch eine MessageBox zu Beginn und Ende des FormActivate. MessageBox = Remote-Debugger für Arme ;) |
AW: Fehler vor OnCreate finden
Such in der MAP-Datei bitte nach :005345D4.
Wenn das nicht da ist, nach :005345 und wenn das nicht da ist nach :0053. Findest Du irgendwo hinter dem ersten "Line numbers" der MAP-Datei was dazu? Wenn nein, könnte es sein, dass der konkrete Fehler nicht in dem Teil des Programmes geschieht, für den Du Quelltext besitzt, also z. B. Komponenten, für die Du nur die DCUs hast. (Gibt es sowas oder hast Du für alles auch die Quelltexte?) Zitat:
@Ykcim Schlimmstenfalls: Pflastere jede, wirklich jede Prozedure am Anfang und am Ende mit ShowMessage ein:
Delphi-Quellcode:
Durch den Kompilerschalter muss Du dann nicht alles wieder entfernen, bevor die Software in Betrieb geht. Den Kompilerschalter kannst Du dann von
// irgendwo am Anfang:
{$DEFINE MsgDebug} Function TForm1.NameDerFunktion : keineAhnung; begin {$IFDEF MsgDebug}ShowMessage('Start NameDerFunktion');{$ENDIF} ... der eigentliche Funktionsinhalt. {$IFDEF MsgDebug}ShowMessage('Ende NameDerFunktion');{$ENDIF} end;
Delphi-Quellcode:
nach
{$DEFINE MsgDebug}
Delphi-Quellcode:
ändern und die Meldungen sind mit dem nächsten Kompilieren wieder weg.
{ $DEFINE MsgDebug}
Statt ShowMessage ... kannst Du auch 'ne Loggingfunktion nehmen, die diese Meldungen in 'ne Datei schreibt (sofern Du sowas gerade zur Verfügung hast). Und nein, wirklich schön ist dieser Lösungsvorschlag nicht, aber als Notnagel kann man's schonmal durchgehen lassen ;-) |
AW: Fehler vor OnCreate finden
Hallo hoika,
Zitat:
Delphi-Quellcode:
Der Benutzer gibt seinen LogIn-Namen und ein Passwort ein. Wenn beides passt, wird über eine Datenbankabfrage geprüft, schließt sich das LogIn-Fenster und das Programm setzt den Start fort.
begin
Application.Initialize; Application.MainFormOnTaskbar := True; if ( not DoLogin ) then Exit; Application.CreateForm(TMain, Main); Application.CreateForm(TForm_Zeichnungen, Form_Zeichnungen); Application.CreateForm(TForm_Filter, Form_Filter); Application.CreateForm(TForm_Passwort, Form_Passwort); Application.CreateForm(TForm_LogIn, Form_LogIn); Application.CreateForm(TForm_Start, Form_Start); Application.CreateForm(TForm_Return, Form_Return); Application.Run; Main.WindowState:=wsMaximized; end. Die Eingabe kann ich auch machen. Allerdings muss ich jedes Mal meinen Benutzer neu eingeben. In der OnShow-Procedure des Main-Form wird der Benutzer in eine Tabelle geschrieben, gemeinsame mit dem Computernamen. Beim öffnen des LogIn-Fensters wird geprüft, ob sich dieser Rechner schon mal angemeldet. Wenn ja, wird der letzte Benutzer-LogIn in das Eingabefeld geschrieben. Das Passiert nicht. Also tritt der Fehler vorher auf. Zitat:
Ich habe in der Procedure des Ok-Buttons des LogIn-Fensters und in der onCreate Procedure des Main-Forms und in der onShow-Procedure des Main-Forms mit Hilfe einer TStringList eine Datei schreiben lassen, wobei ich nahzu Zeileweise den Durchlauf den Programm-Codes logge. Diese Datei habe ich dann auf den FileServer abgelegt - immer unter dem Namen des Rechners mit Datum und Uhrzeit. Die Datei würde auch im Exception-Fall geschrieben. Bei den Problem-Rechnern wird die Datei im Login-Fenster geschrieben, aber keine vom Main-Form. Bei allen anderen Rechnern klappt das. Deshalb gehe ich davon aus, dass der Fehler nach dem erfolgreichen LogIn, aber vor dem onCreate des Main-Form auftritt. Aber was ist dazwischen und wie kann ich das loggen? Vielen Dank Patrick |
AW: Fehler vor OnCreate finden
Hallo Delphi.Narium,
warum den Umweg über die Map-Datei? Auf Seite 1 ist der komplette Call-Stack. Der Fehler tritt intern im TAdvStringGrid auf, weil der Inplace-Edit anzuzeigt wird. Der Fehler sagt ja, dass das SetFocus des Inplace-Editors fehlschlägt. Entweder ist das Grid oder der Frame nicht sichtbar, oder siehe StrLCopy es wird Speicher bei Theming überschrieben. Da fallen mir noch 2 Sachen ein 1. FastMM4 wegen dem möglichen Speicherüberschreiben 2. in den Grafikoptionen mal alle visuellen Effekte außer Kantenglättung deaktivieren (rechte Maustaste auf Computer/dieser PC -> Erweiterte Systemeinstellungen -> Leistung) |
AW: Fehler vor OnCreate finden
Hallo Delphi.Narium
Zitat:
|
AW: Fehler vor OnCreate finden
Hallo,
zu spät dein Post bemerkt. Mir sind in der Dpr 2 Sachen aufgefallen Application.CreateForm(TForm_LogIn, Form_LogIn); wird erzeugt, aber wohl nicht mehr gebraucht? Application.Run; Main.WindowState:=wsMaximized; Das hat keine Wirkung, weil Delphi in der Run-Methode bleibt, bis das Hauptprogramm (Main) beendet wird. Aber jetzt zu deinem Post. Was passiert, wenn du die DoLogin-Methode mal ausklammerst? Vielleicht macht dein Login-Fenster ja was "kaputt". |
AW: Fehler vor OnCreate finden
Zitat:
|
AW: Fehler vor OnCreate finden
Zitat:
Delphi-Quellcode:
begin
Application.Initialize; Application.MainFormOnTaskbar := True; if ( not DoLogin ) then Exit; Application.CreateForm(TMain, Main); Application.CreateForm(TForm_Zeichnungen, Form_Zeichnungen); Application.CreateForm(TForm_Filter, Form_Filter); Application.CreateForm(TForm_Passwort, Form_Passwort); Application.CreateForm(TForm_Start, Form_Start); Application.CreateForm(TForm_Return, Form_Return); Main.WindowState:=wsMaximized; Application.Run; end. |
AW: Fehler vor OnCreate finden
Ok, Fehler nicht in MAP-Datei, damit ist dann klar, das hoikas Ansatz der einzig verbleibende Weg zum Finden des Fehlers ist.
Delphi-Quellcode:
In welchen Formularen wird das TAdvStringGrid genutzt?
begin
Application.Initialize; Application.MainFormOnTaskbar := True; if DoLogin then begin Application.CreateForm(TMain, Main); Application.CreateForm(TForm_Zeichnungen, Form_Zeichnungen); Application.CreateForm(TForm_Filter, Form_Filter); Application.CreateForm(TForm_Passwort, Form_Passwort); Application.CreateForm(TForm_Start, Form_Start); Application.CreateForm(TForm_Return, Form_Return); Main.WindowState:=wsMaximized; Application.Run; end; end. Könnte eventuell eine Änderung der Application.CreateForm ... - Reihenfolge was ändern (außer TMain, das als erstes Formular ja zum Hauptformular der Anwendung wird). |
AW: Fehler vor OnCreate finden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz