AGB  ·  Datenschutz  ·  Impressum  







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

Fehler vor OnCreate finden

Ein Thema von Ykcim · begonnen am 18. Feb 2019 · letzter Beitrag vom 21. Feb 2019
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#31

AW: Fehler vor OnCreate finden

  Alt 20. Feb 2019, 16:50
Hallo,
Zitat:
Wo steht da etwas von FormCreate? Das ist ein normaler Mausklick, durch den das Editieren einer Zelle ausgeführt wird
Es steht im Titel "Fehler vor OnCreate", also nix Mausklick.
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
Heiko

Geändert von hoika (20. Feb 2019 um 16:53 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#32

AW: Fehler vor OnCreate finden

  Alt 20. Feb 2019, 17:16
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 von hoika:
MessageBox = Remote-Debugger für Arme
Ja, aber manchmal extrem hilfreich, wenn man überhauptnicht weiß, wo denn da was klemmt oder der Fehler halt mit dem Debugger nicht zu lokalisieren ist, weil der entweder garnicht bis zu der Stelle kommt oder eben (wie hier) der Fehler auf der Entwicklungsmaschine nicht zu reproduzieren ist.

@Ykcim

Schlimmstenfalls:

Pflastere jede, wirklich jede Prozedure am Anfang und am Ende mit ShowMessage ein:
Delphi-Quellcode:
// 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;
Durch den Kompilerschalter muss Du dann nicht alles wieder entfernen, bevor die Software in Betrieb geht. Den Kompilerschalter kannst Du dann von {$DEFINE MsgDebug} nach { $DEFINE MsgDebug} ändern und die Meldungen sind mit dem nächsten Kompilieren wieder weg.

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
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#33

AW: Fehler vor OnCreate finden

  Alt 20. Feb 2019, 17:26
Hallo hoika,

Zitat:
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?
Das Programm ruft bei Aufruf ein LogIn-Fenster auf (DoLogin):
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_LogIn, Form_LogIn);
  Application.CreateForm(TForm_Start, Form_Start);
  Application.CreateForm(TForm_Return, Form_Return);
  Application.Run;
  Main.WindowState:=wsMaximized;
end.
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.
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:
Woher weißt Du, dass es in/vorm OnCreate passiert?
Ich habe mir auch einen Remote_Debugger für Arme gebaut:
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
Patrick
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#34

AW: Fehler vor OnCreate finden

  Alt 20. Feb 2019, 17:29
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)
Heiko

Geändert von hoika (20. Feb 2019 um 17:31 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#35

AW: Fehler vor OnCreate finden

  Alt 20. Feb 2019, 17:32
Hallo Delphi.Narium

Zitat:
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?)
Habe leider nichts gefunden. Neben den Standard-Komponenten habe ich die TMS-Komponenten, UniDac und JamShellBrowser verbaut.
Patrick
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#36

AW: Fehler vor OnCreate finden

  Alt 20. Feb 2019, 17:36
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".
Heiko
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#37

AW: Fehler vor OnCreate finden

  Alt 20. Feb 2019, 17:37
Zitat:
2. in den Grafikoptionen mal alle visuellen Effekte außer Kantenglättung deaktivieren
(rechte Maustaste auf Computer/dieser PC -> Erweiterte Systemeinstellungen -> Leistung)
Das hatte leider keinen Effekt...
Patrick
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#38

AW: Fehler vor OnCreate finden

  Alt 20. Feb 2019, 17:41
Zitat:
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.
Vielen Dank, habe ich geändert...
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.
Patrick
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#39

AW: Fehler vor OnCreate finden

  Alt 20. Feb 2019, 17:46
Ok, Fehler nicht in MAP-Datei, damit ist dann klar, das hoikas Ansatz der einzig verbleibende Weg zum Finden des Fehlers ist.
Delphi-Quellcode:
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.
In welchen Formularen wird das TAdvStringGrid genutzt?

Könnte eventuell eine Änderung der Application.CreateForm ... - Reihenfolge was ändern (außer TMain, das als erstes Formular ja zum Hauptformular der Anwendung wird).
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#40

AW: Fehler vor OnCreate finden

  Alt 20. Feb 2019, 17:52
Zitat:
In welchen Formularen wird das TAdvStringGrid genutzt?
Die Anwendung ist ziemlich groß - besteht aus 29 Frames und 4 Forms. In Summe sind es über 30 TAdvStringLists, die beim Design auf den Frames / Forms liegen. Darüber hinaus können zu einem späteren Zeitpunkt auch noch viele dynamisch erstellt werden, wenn Daten von Maschinen abgerufen werden. Aber das passiert nur nach einer User-Aktivität...
Patrick
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 23:46 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