Form1.onkeyup wird beim drücken einer Taste ausgelöst ?

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Form1.onkeyup wird beim drücken einer Taste ausgelöst ?

Beitrag von pluto »

Hallo,
für ein vorhaben brauche ich onkeyup von Form1.

Ich dachte immer das wird erst ausgelöst sobald ich die Taste loslasse, richtig ?
z.b.
ich drücke STRG+ALT+S und halte dabei STRG+ALT+S gedrückt.
dann wird es trotzdem ausgelöst !

Ist das verhalten jetzt richtig ? oder handelt es sich um ein Bug ?

der Grund:
Bei meinem Projekt verwende ich ein Mainmenu. Das Mainmenu hat ja sowieso schon einige Mängel z.b. beim Erstellen im Desinger und die ShortKey gehen nicht.

Sobald ich ein TPageControl oder ähnliches auf mein Form habe geht es schon wieder nicht.
Dafür wollte ich eine einfache klasse schreiben die in etwa so Funktionieren sollte:
Beim Erstellen der Klasse gibt du ihr ein Form. Beim Constructur der Klasse wird onKeyPrieview auf True gestellt und onKeyUp mit einem Ereignis belegt.

Mehr nicht.

Jetzt wollte ich beim drücken einer Taste die gesammte Mainmenu Struktur durchgehen.
Dafür habe ich mir folgende Funktion ausgedacht:

Code: Alles auswählen

function TMenuKey.FindMenuShortKey(const key: word; shift: TShiftState
  ): TMenuitem;
 
  function GetMenu(aMenu:TMenuitem; const key: word; shift: TShiftState):TMenuitem;
  var
    i:Integer;
    aKey:Word;
    aShift:TShiftState;
  begin
      for i:=0 to aMenu.Count-1 do begin
        ShortCutToKey(aMenu.Items[i].ShortCut,aKey,aShift);
        if  (aKey = key) and (aShift = shift) then begin
          writeln('OK:',aMenu[i].caption);
          break;
        end;
      if aMenu.items[i].count > 0 then
        getMenu(aMenu[i],key,shift);
    end;
  end;
var
  i:Integer;
begin
  writeln('TEST');
  for i:=0 to fForm.Menu.Items.count-1 do
    GetMenu(fForm.Menu.Items[i],key,shift);
end;
das Klappt auch schon ganz gut, aber nur mit einfachen Tastenkombinationen:
strg+h z.b.
aber nicht mit
strg+alt+h. ich vermute das hängt mit dem onKeyUp Problem zusammen.

Edit:
Der Fehler ist, wenn ich die Taten länger drücke, wird es ausgelöst obwohl ich die Taste gar nicht losgelassen habe !
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 ist normal.
Und ich denke auch das die Accelerator Keys im Lazarus funktionieren das Problem ist wohl das die In deinem System irgendwo anders schon belegt sind.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Form1.onkeyup wird beim drücken einer Taste ausgelöst ?

Beitrag von Euklid »

pluto hat geschrieben: Ist das verhalten jetzt richtig ? oder handelt es sich um ein Bug
Das Verhalten habe ich auch schon beobachtet und vermute dahinter einen Lazarus-Bug. Bzw. Dass onkeyup noch nicht vollständig implementiert ist.

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 »

Tastenanschläge sind kein Bug, du kannst sogar im betriebsystem einstellen wann diese erfolgen sollen. Umgeht Delphi das ? Ist das dort nicht so ? Würde mich stark wundern.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von pluto »

also teilweise stimme ich Christian agumente überein.

ich habe z.b. beobachtet das onKeyup nur ausgelöst wird wenn ich ein Buchstaben drücke aber nicht wenn ich strg+alt drücke.

Zum MainMenu: das ist ist ein BUG: STRG+S habe ich nur einmal vergeben und es passiert nicht das was es soll:

Ich habe auf mein From mehre Panles und verwende ein NoteBook(aber auch ein PageControl) zeigt keine Änderung.

Ich dachte halt ich könnte den bug im OnKeyDown Ereignis umgehen !
oder ich muss mir eine andere Lösung einfallen lassen.
Die Frage ist nur welche ? es geht ja eigentlich: aber halt strg+alt+h geht nicht.
das habe ich auch nur einmal verwendet(unter Delphi würde sowas gehen).
MFG
Michael Springwald

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

pluto hat geschrieben:Ich dachte halt ich könnte den bug im OnKeyDown Ereignis umgehen !
Das OnKeyDown-Ereignis hat einen Bug? Wäre mir neu, das verwenden wir ständig in Lexart und es funktioniert problemlos...

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

Beitrag von pluto »

nein ich meine das onKeyUp Ereignis bzw. beim MainMenu bei den ShortCode.
sobald ich ein PageControl und oder mehre Panles drauf habe gehen sie nicht mehr. Davor ging sie prima.
MFG
Michael Springwald

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Tippfehler, hehe. Hatte mich schon gewundert...

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 »

Bugreport ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von pluto »

Ja währe nicht schlecht.
MFG
Michael Springwald

Antworten