MessageDlg bringt PC zum hängen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

MessageDlg bringt PC zum hängen

Beitrag von MacWomble »

Ich habe ein Problem mit dem MessageDlg in einem von einigen Fenstern (alle anderen sind exakt gleich aufgebaut und funktionieren wie sie sollen)

In der Zeile

Code: Alles auswählen

if MessageDlg('Diese Akte wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then

hängt sich der Rechner (Mint 19.1 64Bit) auf. Auf dem Desktop geht absolut nichts mehr, ausser dem Bewegen des Mauszeigers, im Terminal kann ich mich nicht anmelden, weil dort immer ein Return hin gesendet wird. D.h. , ich kann zwar Benutzer und Passwort eingeben,
Das Programm kommt aus der Routine auch nicht mehr heraus. Der Dialog wird auch nicht angezeigt.

Code: Alles auswählen

procedure TfrAktenliste.btnDeleteAkteClick(Sender: TObject);
var
  idx: integer;
begin
  idx := GetAktenIndex;
  if idx < 0 then
    exit// Bis hier alles OK
  if MessageDlg('Diese Akte wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then // und hier kracht es !
  begin // Hier kommt er nie hin
    A := AktenListe[idx];
    AktenListe.DeleteByID(A.ID);
    AktenListe.Delete(idx);
    dgAkte.RowCount := dgAkte.RowCount - 1;
    if idx >= AktenListe.Count then
      idx := AktenListe.Count - 1;
    dgAkte.Row := dgAkte.FixedRows + idx;
    dgAkte.Invalidate;
  end;
end;     


Beim Debuggen komme ich bis Zeile 133 in messagedialogs.inc, dort ist dann Ende.

Code: Alles auswählen

begin
  Btns := GetPromptUserButtons(Buttons, CancelValue, DefaultIndex, ButtonCount,
    False, mbYes);
  Result := DialogResults[PromptUser(LineBreaksToSystemLineBreaks(aMsg), // hier kommt er nicht mehr raus
    DialogIds[DlgType], Btns, ButtonCount, DefaultIndex, CancelValue)];
  ReallocMem(Btns, 0);
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: MessageDlg bringt PC zum hängen

Beitrag von theo »

Nur unter dem Debugger oder auch ohne? Welche Laz Version?

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: MessageDlg bringt PC zum hängen

Beitrag von MacWomble »

Nein, das passiert immer, und nur bei diesem einen Formular.
Ich habe das mit verschiedenen Versionen getestet, sieht so aus als ob da irgendetwas mit dem Formular nicht stimmt. Ich teste das später.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: MessageDlg bringt PC zum hängen

Beitrag von MacWomble »

Nachtrag:

Dass ich mich im tty nicht anmelden kann ist ein anderes Problem :shock: , welches nichts mit Lazarus oder dem hier geschilderten MessageDlg-Problem zu tun hat.
Mit letzterem bin ich nicht weiter gekommen. :evil:
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: MessageDlg bringt PC zum hängen

Beitrag von MacWomble »

Ich habe nun wirklich alles versucht um dem Problem auf die Spur zu kommen. :roll:
Der MessageDlg versagt hier den Dienst. Ich habe ihn durch einen QuestionDlg ersetzt, was auch funktioniert. :shock:
Ebenfalls habe ich es erfolgreich mit der PasswordBox zum laufen gebracht. :shock:

Sobald ich aber den MessageDlg verwende, hängt sich das System komplett auf. Verwirrend ist für mich, dass nur eines von vielen Formularen betroffen ist. :evil:
Alle anderen Formulare sind 'baugleich' (Unterschied nur in den Daten) und funktionieren. Ich habe das Formular bereits auch komplett neu erzeugt und habe das selbe Resultat. :(

Eventuell muss ich ja Klicks für den MessageDlg nachkaufen, der scheint in der freien Version nur ein paar pro Anwendung zu unterstützen... :P
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 990
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: MessageDlg bringt PC zum hängen

Beitrag von kralle »

Moin,

ich hätte vielleicht noch zwei Idee:

Liegt der Problemdialog in einer eigenen Unit?
Wenn ja, liegt diese wirklich im Projektverzeichnis oder kommt die Ursprünglich aus einem anderen Verzeichnis?

Ich hatte auch schon mal Probleme mit einer Anwendung , die daran lagen, das ich nur glaubte die entsprechende Unit wäre im Projektverzeichnis,
in Wirklichkeit lag die Unit noch in eiem anderen Verzeichnis und da gab es dann unerklärliche Probleme.

Nur noch so ein Gedanke.

Wen Du MessagDlg in mehreren Proceduren nutzt, hast Du den Problem Dialog aus einer anderen kopiert oder neu eingetippt?
Bei letzterem, vielleich anstatt eines einfachen Leerzeichen im Text ein Steuerzeichen erwischt? Mal Steuerzeichen anzeigen lassen?

Gruß HEiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MessageDlg bringt PC zum hängen

Beitrag von af0815 »

MacWomble hat geschrieben:Ich habe nun wirklich alles versucht um dem Problem auf die Spur zu kommen. :roll:
Der MessageDlg versagt hier den Dienst. ...

Die meisten Dialoge werden auf Dialoge aus dem WIdgetset gemapped und verbrauchen Resourcen des Widgetsets. Kann sein, das du da auf eine Anomalie in der Behandlung mit dem Widgetsets gestossen bist. Das mit dem Nichtreagieren des BS deutet auch darauf hin, das es tiefer im System liegt.

Was für ein Widgetset verwendest du ? Wahrscheinschlich Standard (=gtk2 bei Linux).

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: MessageDlg bringt PC zum hängen

Beitrag von MacWomble »

Danke für eure Antworten.

- Die Datei liegt im Projektverzeichnis und ist dem Projekt auch hinzugefügt
- Ich habe die Zeile auch nochmal eingetippt - ohne Änderung
- Ich habe besagte Datei komplett neu erstellt - auch keine Wirkung
- Ich habe die Datei aus eine lauffähigen 'Schwester' geclont - ebenfalls wirkungslos
- Steuerzeichen in der Zeile habe ich nicht gefunden
- WidgetSet ist GTK2
- Ich habe den Debugger ziemlich weit in die Sourcen laufen lassen und lande tatsächlich irgendwo in den Tiefen der Widgetbehandlung.

Leider ist es nicht sehr effektiv zu debuggen, wenn man ständig den Rechner neu starten muss.
Im Moment habe ich das Problem beiseite gelegt, da ich mit dem Projekt weiter kommen muss. Glücklicherweise gehen ja alle anderen Dialoge.

Ich habe an der besagten Stelle nun sogar entschieden, dass nur mit Passwort gelöscht werden kann. Da es sich hier um essentiell wichtige Anwalts-Akten mit Dokumenten aus Rechtsstreitigkeiten handelt, ist das so im Moment sogar plausibel.
(Später kommen noch Funktionen zum automatischen archivieren vor dem Löschen hinzu, dann ist eine Rekonstruktion bei Bedarf möglich. Momentan geht das nur über die Datensicherung. )

Generell bin ich aber schon daran interessiert, das Problem zu lösen.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: MessageDlg bringt PC zum hängen

Beitrag von theo »

Ich sehe das ähnlich wie af0815.
Wenn du das System, bzw. den X-Server zum abnippeln bringst, dann denke ich, dass mindestens GTK da "mitspielt".
Es ist deshalb möglich, dass das Problem in der GTK Version liegt und nicht unbedingt direkt bei Lazarus.

Aber das sind nur Vermutungen. Nichts Genaues weiß man nicht.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: MessageDlg bringt PC zum hängen

Beitrag von MacWomble »

@theo
Ich sehe das ja im Prinzip auch so, aber warum tritt das nur in einer der 'baugleichen' Forms auf und nicht bei den anderen?
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: MessageDlg bringt PC zum hängen

Beitrag von wp_xyz »

Ich tippe eher auf einen Fehler in deinem Programm, der sich halt so auswirkt. Gerade bei Pointer-Listen mit den vielen Type-Casts trägt man vielleicht doch mal den falschen Typ ein, und danach ist praktisch alles möglich.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: MessageDlg bringt PC zum hängen

Beitrag von Michl »

Das Problem kann man am besten lösen, indem man es isoliert. Erstelle eine Kopie von deiner Anwendung und reduziere diese soweit, bis nur noch das Formular mit dem MessageDialog übrig ist. Entweder es erklärt sich bis dahin, was das Problem war oder du hast ein Formular das du hier zum testen posten kannst.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: MessageDlg bringt PC zum hängen

Beitrag von fliegermichl »

Stelle auch alle möglichen Compiler Prüfungen ein und ignoriere Compilerwarnungen nicht.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: MessageDlg bringt PC zum hängen

Beitrag von Timm Thaler »

Andererseits: Die Message Dialogs sind so häßlich, die baut man doch am besten gleich selbst. 8)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MessageDlg bringt PC zum hängen

Beitrag von af0815 »

Timm Thaler hat geschrieben:Andererseits: Die Message Dialogs sind so häßlich, die baut man doch am besten gleich selbst. 8)

Da kann ich mich anschließen, noch dazu wenn ich da die Möglichkeit habe, einige Eigenschaften selbst zu optimieren. Btw. In tiOpf sind da ekn paar gute Vorschläge drinnen, wie man sowas handhaben kann.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten