AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

OnKeyDown: Tastendruck abbrechen

Ein Thema von yankee · begonnen am 17. Apr 2005 · letzter Beitrag vom 19. Apr 2005
Antwort Antwort
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#1

OnKeyDown: Tastendruck abbrechen

  Alt 17. Apr 2005, 22:04
Ich habe in meinem Editor zu dem Zweck der HTML-encodierung die Möglichkeit eingebaut, dass Sonderzeichen automatisch codiert werden können. D.h. wenn man auf ö drückt, erscheint direkt ö Das ist in einem onkeydown-event. Das funktioniert auch soweit, aber das ö kommt hinter dem codierten Umlaut trotzdem. Ich habe probiert key einfach 0 (null) zuzuweisen, aber das hat nichts geändert...
Also, was muss ich machen?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Benutzerbild von gordon freeman
gordon freeman

Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
 
Delphi 2005 Personal
 
#2

Re: OnKeyDown: Tastendruck abbrechen

  Alt 17. Apr 2005, 22:14
Delphi-Quellcode:
procedure TForm1.OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if key = 'öthen
   begin
   //füge Sonderzeichencode ein
   key := #0;
  end;
end;
So (oder so ähnlich) sollte es gehen. Zeig doch mal etwas Code, wie es bei dir aussieht.
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#3

Re: OnKeyDown: Tastendruck abbrechen

  Alt 17. Apr 2005, 22:23
So (oder so ähnlich) sollte es gehen. Zeig doch mal etwas Code, wie es bei dir aussieht.[/quote]
Ok, wenn du willst. alleridngs ist es bei mir niocht so einfach wie in deinem Beispiel. Denn der User soll einstellen können, welche Zeichen ecodiert werden sollen und diese werden in einem array aufbewahrt. Naja, key ist außerdem vom Typ word und nicht char:
Delphi-Quellcode:
//der Variablentyp:
  THotKeyItem =record
    Taste: TShortCut;
    gridLine: TStrings; //fungiert als Objektzeiger auf Ein Stringgrid
  end;

//globale Variable:
var umlautliste: array of THotKeyItem;
//gloabel Konstanten:
const
  AUSGABE =1;
  TEXTTASTE =0;

//die onkeydown-procedure:
procedure TEditorForm.SynEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var tastenkombi :TShortcut;
    i:integer;
begin
    if confForm.CheckBox2.Checked then //das ist nur ob tastenencoding aktiviert ist.
    begin
        tastenkombi :=ShortCut(Key, Shift);
        for i:=0 to length(umlautliste)-1 do with umlautliste[i] do if taste =tastenkombi then
        begin
            Synedit1.SelText :=gridLine[AUSGABE];
            key :=0;
            exit;
        end;
    end;
end;
Mir fällt auf, das record nicht fett hervorgehoben wird. Direkt mal in der DP-Fragen sparte meckern
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#4

Re: OnKeyDown: Tastendruck abbrechen

  Alt 18. Apr 2005, 22:35
*hochschieb*
bitte einer erklären!
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#5

Re: OnKeyDown: Tastendruck abbrechen

  Alt 18. Apr 2005, 23:22
Ich habe dir mal eine kleine unoptimierte Demo zusammengeklickert.
Und das ist das Ergebnis.
Angehängte Dateien
Dateityp: zip html-conv_129.zip (3,3 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#6

Re: OnKeyDown: Tastendruck abbrechen

  Alt 19. Apr 2005, 12:32
Hi.

@yankee: Nimm anstatt des Arrays ein set of char... Da kannst du ganz einfach mit in prüfen und mit Include/Exclude einfügen/rauslöschen

Mal ein Beispiel, wie man kein Zeichen 2x direkt hintereinander eingeben kann...

Delphi-Quellcode:
var
  s : set of char;

function IsOkay(c : char) : boolean;
begin
  if c in s then
  begin
    Exclude(s, c);
    return false;
  end
  else if not (c in s) then
  begin
    Include(s, c);
    return true;
  end;
end;
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: OnKeyDown: Tastendruck abbrechen

  Alt 19. Apr 2005, 13:03
[OT]Ja, so ein gemisch aus Pascal und C# hat was für sich [/OT]
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#8

Re: OnKeyDown: Tastendruck abbrechen

  Alt 19. Apr 2005, 13:08
Aber ihr verwendet alle onkeypress und ich onkeydown. Und mit onkeypress komme ich an Strg, Shift undso doch nicht darn, oder?
Und ich will dem User das ja nicht vorschreiben. In einem PHP- HTML -JavaScript-gemischten qt kann es ja auch interessanter sein, wenn man sich die Sonderzeichen auf Strg + ö legt oder sowas.
Naja, ich habe es jetzt jedenfalls so gelöst:
Delphi-Quellcode:
Synedit1.SelText :=gridLine[AUSGABE]+' '; //der Umlaut + ein Leerzeichen
key :=VK_BACK; //Backspace (entfernt das Leerzeichen wieder.)
exit;
Nicht wirklich elegant, aber es funktioniert.

EDIT: @Waldteufel: Ich habe jetzt den Zusammenhang zu meiner Frage nicht so richtig verstanden...
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:45 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