Probleme mit OnClose

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
jrx
Beiträge: 49
Registriert: Fr 14. Mai 2010, 13:23
OS, Lazarus, FPC: Win/UX
Wohnort: Erlangen

Probleme mit OnClose

Beitrag von jrx »

Hallo

ich hab ein Programm mit 2 Formularen, beide sind gleich zu Programmstart vorhanden (automatisch erzeugt)
Das Hauptprgamm ruft das andre Formular mit Form2.ShowModal auf.

Code: Alles auswählen

 procedure TForm2.Button1Click(Sender: TObject);
begin
  close;
end;


Der Click auf den Button funktioniert nicht mehr.

Wenn ich den Debugger bemühe, geht der Cursor bei ModalResult:=mrCancel.

Code: Alles auswählen

procedure TCustomForm.Close;
var
  CloseAction: TCloseAction;
  IsMainForm: Boolean;
begin
  if fsModal in FFormState then
    ModalResult := mrCancel
  else
  begin
    if CloseQuery then
    begin     


Trotzdem wird das Fenster nicht geschlossen.

Ich habe meine Version geupdattet. Seit dem gehts nicht mehr.
Lazarus 1.6.4 r54278 FPC 3.0.2 x86_64-win64-win32/win64
vorher hatte ich was ca. 2 Jahre altes (genau weiß ich die Version nicht mehr).
Da ging's aber noch.

Wenn ich ein neues Project anlege, dann geht alles wie gewohnt, an der Installation kann es eigentlich nicht liegen.

Kann mir bitte jemand einen Tipp geben?

Grüe
jrx

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

Re: Probleme mit OnClose

Beitrag von wp_xyz »

Funktioniert bei mir einwandfrei (Laz 1.8/FPC 3.04 32 bit, Win10 64 bit). Auch mit Laz 1.6.4

Aber warum schließt du das modale Formular überhaupt per "Close"? Du musst nur dem Button, der das Formular schließen soll, im Objektinspektor ein ModalResult <> mrNone geben, dann geht der Rest automatisch, ohne eine Zeile Code.

Und wenn du schon updatest, warum nicht gleich auf die aktuelle Version (1.8)?

jrx
Beiträge: 49
Registriert: Fr 14. Mai 2010, 13:23
OS, Lazarus, FPC: Win/UX
Wohnort: Erlangen

Re: Probleme mit OnClose

Beitrag von jrx »

Oops - Heise/Download als meine primäre Sekundärquelle ist nicht ganz aktuell.

Leider hat aber die Neuinstallation nichts geändert.
Ich lass das Form jetzt zur Laufzeit generieren, dann geht's.
Die Ursache ist mir aber trotzdem unklar.

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

Re: Probleme mit OnClose

Beitrag von wp_xyz »

jrx hat geschrieben:Oops - Heise/Download als meine primäre Sekundärquelle ist nicht ganz aktuell.

Und warum nimmst du nicht https://www.lazarus-ide.org/index.php?page=downloads als primäre Primärquelle?

jrx hat geschrieben:Leider hat aber die Neuinstallation nichts geändert.
Ich lass das Form jetzt zur Laufzeit generieren, dann geht's.
Die Ursache ist mir aber trotzdem unklar.

Mir auch. Aber ohne den gesamten Code zu sehen, kann ich nicht helfen.

jrx
Beiträge: 49
Registriert: Fr 14. Mai 2010, 13:23
OS, Lazarus, FPC: Win/UX
Wohnort: Erlangen

Re: Probleme mit OnClose

Beitrag von jrx »

Den ganzen Code kann ich ja nicht hochladen. So richtig geht's auch immer noch nicht (verschiedene Rechner).

Hier Fragmente:

Code: Alles auswählen

Hide;
KF:=TfrmScreenKeybrd.Create(self);
KF.Titel:='MP3 suchen';
KF.footer:='Datenbank';
KF.ERG:='*';
KF.SetColors(ColorStat,ClockStat,BtnStat);
KF.ShowModal;
FctOK:= KF.OK;
s:=KF.ERG;
Show;
Top := KF.Top;
Left := KF.Left;
KF.Destroy


Da Hauptprogrammfenster wird ausgeschalten und TfrmScreenKeybrd als Formular geladen. Es bekommt ein paar Infos mit und zeigt sich dann.
Jetzt geb ich was ein in meinem Formular (s.u.) Wenn ich nun beende , werden Variablen zurückgegeben und das Hauptprogramm wieder auftauchen.
Die Position wird neu festgelegt, falls das Unterformular mit der Maus verschoben wurde und dann wird der Formular beendet.

Im Subformular:

Code: Alles auswählen

procedure TfrmScreenKeybrd.FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
begin
   if Shift = [] then
    case key of
      VK_ESCAPE, VK_LEFT: bLeft.Click;
      VK_DOWN: bDown.Click;
      VK_UP: bUp.Click;
      VK_RIGHT: bRight.Click;
      13:
      begin
        OK := True;
        Close;
      end;
  end;
  //ShowMessage(IntToStr(key));
  { TODO : Text/Kommas etc per Tasteneingabe ermöglichen }
end;           


bLeft.Click und bRight.Click sind wie "case 13:" mit paar mehr Zeilen. "Close" generiert auch ein Modalresult:=mrCancel, falls noch keines vergeben wurde.
Nicht mal ein Klick auf das Windows-Fenster-X funktioniert. Das Formular ist praktisch nur über den Debugger oder dem Taskmanager abzuwürgen.
Irgendwas ist verstellt, blos was?

So oder So wird das Formular nicht beendet , ein 2. Formular mit ähnlicher Konstellation funktioniert.
In meinen beiden Quellen sehe ich keine prinzipiellen Unterschiede, es muss also irgendwo im "nicht-transparenten" zu finden sein.

jrx

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

Re: Probleme mit OnClose

Beitrag von wp_xyz »

Hast du vielleicht vergessen das "KeyPreview" des 2.Formulars zu aktivieren? Das würde erklären, dass die ENTER-Taste nicht verarbeitet wird, es würde allerdings nicht erklären, warum du das Formular überhaupt nicht mehr schließen kannst. Gibt es einen Handler für "OnCloseQuery", der das Schließen verbietet?

jrx
Beiträge: 49
Registriert: Fr 14. Mai 2010, 13:23
OS, Lazarus, FPC: Win/UX
Wohnort: Erlangen

Re: Probleme mit OnClose

Beitrag von jrx »

in der Tat war keyPreview:=False;
Eigentlich hätte es trotzdem funktionieren müssen, weil keine Childcontrols drin sind.
Nur TPanel, TLabel und TSpeedButton.

Jetzt geht es (zumindest auf dem einen Rechner Win10/64). Es sollte ja aber dann auch auf dem anderen Win7/32 gehen.

Danke
jrx

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

Re: Probleme mit OnClose

Beitrag von wp_xyz »

Tja... Mein nach deinen Angaben zusammengeschustertes Testprogramm läuft sowohl auf Win10 als auf Win7. Das Problem wird wohl irgendwo anders liegen.

jrx
Beiträge: 49
Registriert: Fr 14. Mai 2010, 13:23
OS, Lazarus, FPC: Win/UX
Wohnort: Erlangen

Re: Probleme mit OnClose

Beitrag von jrx »

wp_xyz hat geschrieben:Das Problem wird wohl irgendwo anders liegen.

Zwischen meinen Ohren hab ich schon geschaut.

Antworten