AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

KeyDown, KeyUp, KeyPress

Ein Thema von sko1 · begonnen am 25. Jun 2018 · letzter Beitrag vom 26. Jun 2018
Antwort Antwort
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

KeyDown, KeyUp, KeyPress

  Alt 25. Jun 2018, 14:44
Hallo,

im OnKeyPress einer Komponente setze ich Key:= #0 für alle Tasten, die im bestimmten Fall nicht erlaubt sind.
Dennoch kommt ein #13 (Enter) durch!
Abgefangene Buchstaben werden nicht weitergegeben.

Irgendwie ist mir das Handling der Events unklar, wenn ich z.B. im OnKeyDown Key := 0 setze erwarte ich dass dann im KeyPress oder KeyUp nichts mehr ankommt!

Kann mich bitte jemand aufklären?

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

AW: KeyDown, KeyUp, KeyPress

  Alt 25. Jun 2018, 14:50
Wenn eine Taste vor dem KeyPress ausgewertet wird, dann kam deine Behandlung noch nicht.

Auf einige Tasten wird schon im KeyDown reagiert, also vor KeyUp und KeyPress.
Und auf einige Tasten wird erst im KeyUp reagiert und manche halt im KeyPress (z.B. für Key-Repeat)




Schlimm sind solche Dinge, wo im KeyDown reagiert wird und dann der Fokus wo anders hin geht, weil z.B. ein Fenster auf/zu geht,
und dann das KeyUp-Ereignis wo anders verarbeitet wird.

Ein schöner Fall: In einem Fenster mit F5 (KeyUp) ein Options-Fenster anzeigen und dort wieder F5 (KeyDown) um Standardauswahl zu nehmen und das Fenster zu schließen.
> Optionsfenster mit Default schließen (KeyFown) öffnet aber sofort wieder dieses Optionsfenster, weil KeyUp.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (25. Jun 2018 um 14:56 Uhr)
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
251 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: KeyDown, KeyUp, KeyPress

  Alt 25. Jun 2018, 15:44
Hallo,

Falls sich Ihre Anfrage auf WPTools bezieht (Sie verwenden diese ja) können Sie in der unit WPCtrMemo.pas nachsehen, wo welcher charcode (#13) oder VK code (VK_RETURN) bearbeitet wird.

Ob dies in OnKeyPress oder OnKeyDown passiert hängt damit zusammen, ob zusätzlich der "Shift" parameter zu Bearbeitung erforderlich ist. Bei Return wird Shift und Control abgefragt, +Shift erzeugt einen Zeilenumbruch, +Ctrl einen Seitenumbruch. Manche Tasten kann man auch nur im KeyDown abfragen da sie keinen Zeichencode auslösen, wie die Cursor Tasten.

Viele Grüsse,
Julian
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: KeyDown, KeyUp, KeyPress

  Alt 25. Jun 2018, 16:04
Volltreffer!

Ich versuche gerade zu verhindern, dass der Benutzer in einer Tabellenzelle Enter drückt und mir damit 2 einzelne Paragraphen entstehen

Im OnKeyDown setze ich key=0 wenn Enter ankommt, nur im OnKeyPress dies nun mit einem "weichen Zeilenumbruch" zu ersetzen fehlt mir noch der Ansatz, denn mit Shift-Enter kommt dort auch nur #13 an, und aus #13 dann #10 zu machen funktioniert auch nicht...

Ciao
Stefan

Geändert von sko1 (25. Jun 2018 um 16:09 Uhr)
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
251 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: KeyDown, KeyUp, KeyPress

  Alt 25. Jun 2018, 16:31
Die aktuelle Version von WPTools (8.05) enthält eine Demo "P) Premium\TextBox" welche bei #13 eine Tabellenzeile erzeugt. Diesen code kann man bestimmt gut abwandeln.

Code:
procedure TForm5.WPRichText1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var aRow : TParagraph;
    colnr : Integer;
begin
  aRow := WPRichText1.TableRow;
  if (Key=13) and (aRow<>nil)then
  begin
    if ssCtrl in Shift then
        WPRichText1.InputString(#10)
    else
    begin
        colnr := WPRichText1.TableColNumber;
        aRow := aRow.Duplicate(false, true, false, [wpParCopyStyles,wpDontCopyCellSubParagaraphs]);
        WPRichText1.ActiveParagraph := aRow.ColFirst;
        WPRichText1.TableColNumber := colnr;
        WPRichText1.ReformatAll(false, true);
    end;
    Key := 0;
  end;
end;
Wenn also Ctrl gedrückt wird, wird ein Zeilenumbruch eingefügt (kein neuer Absatz) - ansonsten wird die Tabellen Zeile dupliziert und der cursor in der neuen Zeile platziert.

Die Funktion par.Duplicate hat einen erweiterten Parameter Mode spezielle für das duplizieren von Zeilen. (vgl. manual unter "Create new tablerow on CR".

Hoffentlich hilft das weiter.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: KeyDown, KeyUp, KeyPress

  Alt 25. Jun 2018, 16:46
Gibt es eine neue 8.05?

Ich habe die 8.05 am 8.6.18 heruntergeladen, wo sie noch Beta hieß, unter Demos habe ich nur L) PremiumDemo und darunter nicht das angegebene Verzeichnis TextBox!
Ein "P) Premium" gibt es gar nicht!
Nochmal neu laden?

Aber
Delphi-Quellcode:
 WPRichText1.InputString(#10);
 Key :=0;
war der entscheidende Tip!
Vielen Dank!

Ciao
Stefan

Geändert von sko1 (25. Jun 2018 um 16:50 Uhr)
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
251 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: KeyDown, KeyUp, KeyPress

  Alt 26. Jun 2018, 07:56
Ja, die offizielle 8.05 ist inzwischen online.

Verbessert wurden die Textboxen, Berechnung der Tabellen-Zeilenhöhe im "Normal" Layout mode und diverse APIs.

Die genannte demo entspricht aber der Demo welche ich Ihnen per e-mail als ZIP am 6.6 sozusagen als Antwort auf diverse Posts im WPCubed Forum zugeschickt habe. Ich hatte die eigens erstellt um zu zeigen wie Textboxen im Header verankert werden, wie diese auf Folgeseiten dynamisch erzeugt werden.

Desweiteren zeigt die Demo wie Tabellenzeilen welche gerade bearbeitet werden hervorgehoben werden können. Dies passiert dort ohne dass der Text verändert wird, also ohne dass für jede Bewegung des Cursors die Formattierroutine aufgerufen werden muss.

Eine typische Anwendung für WPTools sind dynamische Kalkulationstabellen, Rechnungen und Angebote. Die API ist daher dafür angepasst und mehr als zwanzig Jahre Erfahrung stecken da drin.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: KeyDown, KeyUp, KeyPress

  Alt 26. Jun 2018, 08:43
Danke!

Jetzt habe ich die aktuelle 8.05 geladen und installiert, es gibt nun auch die genannte Demo

Ciao
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz