Form2.ShowModal mit ESCAPE

Rund um die LCL und andere Komponenten
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Form2.ShowModal mit ESCAPE

Beitrag von pluto »

Hallo,
ich möchte gerne das mein Dialog per ESCAPE und RETURN Taste beendet werden kann.

Sonst mache ich es immer so das ich beim Klicken auf einer der beiden Bitbtn der from tag gesetzt wird und ich ihn einfach abfange.

ich habe gesehen das es ein Eigenschaft:
ModalResult
gibt die ich heute gerne nutzen möchte.

Ich kann jetzt auf einer der beiden Buttons Klicken, aber beim drücken einer taste gibt er mir das falsche Ergbnis zurück:

Code: Alles auswählen

procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
  if KEY = VK_RETURN then begin
//    ModalResult:=mrOK;
    closeFrom(mrOK);
  end;
 
  if KEY = VK_ESCAPE then begin
    closeFrom(mrCancel);
//      ModalResult:=mrCancel;
    close;
  end;
 
end;         
 
procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
  if Form2.ShowModal = mrOK then
    writeln('OK')
  else
    writeln('Abbrechen')
 
end;


kann mir jemand von euch sagen was ich falsche mache ?
ich habe schon nach Beispiel Dialogen geschaut, dort wird es genauso gemacht wie ich es gemacht habe. ach ja die Eigenschaft habe ich bei den beiden Buttons natürlich gesetzt.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ich hab noch nie damit gearbeitet seh aber keinen Fehler von der Logik her scheints gut zu sein. Funktionierts denn wenn du den Buttons Modalresult setzt ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ja es geht, aber ohne die Tastertur also ohne das ich auf ESCAP und RETURN drücke.

die Lazarus IDE macht es genauso habe mir da ein paar Dialoge angesehen.

ich glaube ich macht das so wie gehabt.
MFG
Michael Springwald

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

Beitrag von theo »

Das liegt wohl daran, dass das Formular nicht den Eingabefokus hat, sondern einer der Buttons.
Ausser du setzt im Formular KeyPreview auf True.

Sowas ist doch nun wirklich in 2 Minuten getestet:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
begin
 writeln('B2');
end;
 
procedure TForm1.Button2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   writeln('B2 ',Key);
end;
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
  writeln(Key);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  writeln('B1');
end;
 
procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  writeln('B1 ',Key);
end;

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ja das war mir auch schon klar das ist so geht. Also gut dann gehe ich den alten weg der bis jetzt immer Funtknierniert hat
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das mit return ist eh net so toll da ist es besser den standartbutton auf default zu setzen
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten