SOLVED:DBGrid und Enter Key Press

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

SOLVED:DBGrid und Enter Key Press

Beitrag von Bernie110 »

Hallo,

ich möchte in einem DBGrid ein Land auswählen und es in ein anderes Formular übernehmen.
Per Mouse-Click funktioniert das auch.
Nun möchte ich dieses Click Ereignis auch mit der Enter Taste auslösen.
Habs so versucht...
Drücke ich die Enter - Taste passiert nichts.. er spring einfach zum nächsten Datensatz

Code: Alles auswählen

procedure TFrm_Stamm_Land_Auswahl.DBGrid1KeyPress(Sender: TObject; var Key: char
  );
begin
      If Key = #13 then
    begin
      Key := #0;
            // STAMM NL EDIT
            If frm_Stamm_Land_Auswahl.OPEN_Form.text = 'STAMM_NL' then
            begin
                frm_STAMM_NL.Land.Text := frm_Stamm_Land_Auswahl.DBLand.Text;
                frm_STAMM_NL.Flag_Img.Picture.LoadFromFile(DBFlagPath.Text);
               Close;
            end;
       KeyPreview := false;
     end;
 
end;


Wäre für jede Hilfe echt dankbar, Kann und kann im Netz nichts finden.
Lg Bernie

Edit ; Das DBGRid hat folgende Einstellung : dgRowLines = True vll wichtig :)
Zuletzt geändert von Bernie110 am Mi 26. Feb 2020, 20:09, insgesamt 1-mal geändert.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: DBGrid und Enter Key Press

Beitrag von Winni »

Hi!

Hast Du in der Haupt-Form KeyPreview auf true gesetzt?

Winni

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGrid und Enter Key Press

Beitrag von Bernie110 »

Winni hat geschrieben:Hi!

Hast Du in der Haupt-Form KeyPreview auf true gesetzt?

Winni


Jep, habs mit True und ohne versucht.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: DBGrid und Enter Key Press

Beitrag von Winni »

Hi!


Wird denn das event überhaupt verabeitet?

Füg doch mal zur Kontrolle als erste Zeile ins KeyPress ein:

Code: Alles auswählen

 
showMessage ('Key: '+IntoToStr(ord(key)) );


Winni

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGrid und Enter Key Press

Beitrag von Bernie110 »

Winni hat geschrieben:Hi!


Wird denn das event überhaupt verabeitet?

Füg doch mal zur Kontrolle als erste Zeile ins KeyPress ein:

Code: Alles auswählen

 
showMessage ('Key: '+IntoToStr(ord(key)) );


Winni


Hi winni,
nein hatte ich auch schon versucht. Im Grid erkennt er keinen KeyCode
Habs auch noch einmal im HF getestet... da funktionierts.
Liegts an irgend einer anderen Einstellung ?
Lg Bernie

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: DBGrid und Enter Key Press

Beitrag von Winni »

Hi!

Grübel, grübel.

Hab mir gerade mal n DBGrid auf ne Form gepackt: Wenn KeyPreview an ist, funktioniert das immer.
Und bei [Return] gibt er brav 13 zurück.

Was ist denn der parent vom DBgrid??

Winni

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGrid und Enter Key Press

Beitrag von Bernie110 »

Winni hat geschrieben:Hi!

Grübel, grübel.

Hab mir gerade mal n DBGrid auf ne Form gepackt: Wenn KeyPreview an ist, funktioniert das immer.
Und bei [Return] gibt er brav 13 zurück.

Was ist denn der parent vom DBgrid??

Winni


Hi Winni, was meinst du genau mit Parent vom DBGrid ?

Hier trotzdem mal die Einstellungen...vll siehst du was :-) Danke für deine Hilfe
Bild

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

Re: DBGrid und Enter Key Press

Beitrag von wp_xyz »

Wenn man sich den Quellcode von TDBGrid ansieht, dann findet man, dass die ENTER-Taste schon beim KeyDown vernichtet wird:

Code: Alles auswählen

procedure TCustomDBGrid.KeyDown(var Key: Word; Shift: TShiftState);
...
begin
  {$ifdef dbgGrid}DebugLnEnter('%s.KeyDown %s INIT Key=%d',[ClassName, Name,Key]);{$endif}
  case Key of
  ...
    VK_RETURN:
      begin
        doOnKeyDown;
        if (Key<>0) and ValidDataset then begin
          key:=0;   // <-------------- HIER
          if (dgEditing in Options) and not EditorMode then
            EditorMode:=true
          else begin
            GetDeltaMoveNext(ssShift in Shift, DeltaCol, DeltaRow, AutoAdvance);
            MoveSel(True);
          end;
        end;
      end;
...

Daher kommt beim KeyPress nichts mehr an.

Die Lösung sollte daher sein, einen Handler für OnKeydown zu schreiben (DoOnKeydown im Fragment oben löst das Event ganz zu Beginn aus). Damit wird die ENTER-Taste erkannt.

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGrid und Enter Key Press

Beitrag von Bernie110 »

wp_xyz hat geschrieben:Wenn man sich den Quellcode von TDBGrid ansieht, dann findet man, dass die ENTER-Taste schon beim KeyDown vernichtet wird:

Daher kommt beim KeyPress nichts mehr an.

Die Lösung sollte daher sein, einen Handler für OnKeydown zu schreiben (DoOnKeydown im Fragment oben löst das Event ganz zu Beginn aus). Damit wird die ENTER-Taste erkannt.


Hi wp_xyz und Uffff.. :D

ok und wie macht man das ?
Bei Winni scheint es aber ohne dem Handler zu funktionieren. Warum ist das bei ihm anders ? Lg

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

Re: DBGrid und Enter Key Press

Beitrag von wp_xyz »

Bernie110 hat geschrieben:ok und wie macht man das ?

Schreibe deinen Code nicht in OnKeyPress, sondern in das Event OnKeyDown oder noch besser OnKeyUp. Ich habe beide ausprobiert, bei beiden kommt die ENTER-Taste noch an. OnKeyUp hat den Vorteil, dass alles, was in OnKeyDown passiert, noch ausgeführt wird. Beim Eingriff in OnKeyDown könnte der Datensatz noch nicht gespeichert sein, wenn dein Code drankommt. Das musst du halt ausprobieren.

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGrid und Enter Key Press

Beitrag von Bernie110 »

Hatte ich auch schon versucht.
Das Problem ist, dass er dann VK_RETURN nicht erkennt

Code: Alles auswählen

        if Key = VK_RETURN then
    begin
      showMessage ('Key: ' + IntToStr(ord(key)) );
      Key := #0;
 
            // STAMM NL EDID
            If frm_Stamm_Land_Auswahl.OPEN_Form.text = 'STAMM_NL' then
            begin
                frm_STAMM_NL.Land.Text := frm_Stamm_Land_Auswahl.DBLand.Text;
                frm_STAMM_NL.Flag_Img.Picture.LoadFromFile(DBFlagPath.Text);
               Close;
            end;
       KeyPreview := false;
     end;   


Error : Identifier not Found"VK_RETURN"
Error : Incompatible types : got "Char" expected Word

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

Re: DBGrid und Enter Key Press

Beitrag von wp_xyz »

Bernie110 hat geschrieben:Hatte ich auch schon versucht.
Das Problem ist, dass er dann VK_RETURN nicht erkennt

Code: Alles auswählen

        if Key = VK_RETURN then
    begin
      showMessage ('Key: ' + IntToStr(ord(key)) );
      Key := #0;
 
            // STAMM NL EDID
            If frm_Stamm_Land_Auswahl.OPEN_Form.text = 'STAMM_NL' then
            begin
                frm_STAMM_NL.Land.Text := frm_Stamm_Land_Auswahl.DBLand.Text;
                frm_STAMM_NL.Flag_Img.Picture.LoadFromFile(DBFlagPath.Text);
               Close;
            end;
       KeyPreview := false;
     end;   


Error : Identifier not Found"VK_RETURN"
Error : Incompatible types : got "Char" expected Word

Für VK_RETURN brauchst du die Unit LCLType in der Uses-Zeile. Und bei "Key := #0" musst du das '#' weglassen, damit's ein Word wird.

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGrid und Enter Key Press

Beitrag von Bernie110 »

wp_xyz schwierige Geburt, aber jetzt funktioniert es.
Herzlichen Dank @all
Lg Bernie

Antworten