Forum: PC-Programmierung Delphi - keypress


von Felix N. (do6jan)


Angehängte Dateien:

Lesenswert?

Moin,
ich bin dabei mit dem AVR NET IO eine Webcamsteuerung zu schreiben.
Ist eigendlich fertig, ich würde nur gerne anstatt des Lästigen 
Tastendrückens (Button hoch ...Runter) einfach die Pfeiltasten benutzen.
Also wenn Pfeiltaste hoch gedrückt wird Button1.Click; oder so.

Währe ganz nett wenn jemand das für dummies erklären könnte ;)

mfg

Jan

von Robert (Gast)


Lesenswert?

Hallo,

ich habe kein Delphi vor mir und es auch eine Weile nicht mehr benutzt, 
aber eigentlich sollte das mit den OnKeyPress- und OnKeyDown-Ereignissen 
des Formulars gehen. Evtl. noch KeyPreview oder so ähnlich im OI auf 
true setzen (könnte auch anders heißen).

Wenn du soweit die richtigen Prozeduren hast, musst du nur den 
Tastendruck selber auswerten.

MfG

P.S.: Absolut erster Google-Eintrag:
http://www.programmiersprachen.de/forum/unsere-programmierboards/delphi/p38271-wie-kann-ich-eine-prozedur-auf-tastendruck-aufrufen/
Hast du überhaupt gesucht?

von Felix N. (do6jan)


Lesenswert?

Ja, ich hab gegooglet aber nicht alles verstanden.


wenn ich gaaaanz ehrlich bin sagt mir das leider nix ... kannst du mir 
ein einfaches Beispiel geben (für dummies)
Muss was unter Users ergänst werden oder unter type

oder kann ich den code einfach unter den Button1 klatschen?!?

von Robert (Gast)


Lesenswert?

Also ein Beispiel kann ich dir nicht geben, da ich kein Delphi 
(installiert) habe. So sollte es gehen:
- im Objektinspektor solltest du das Ereignis "OnKeyDown" des Forumlars 
auswählen
- in der Codeansicht fügst du jetzt folgenden Code ein:
1
if key = VK_UP then 
2
    GeheNachOben();
- eventuell musst du noch die Eigenschaft KeyPreview auf true setzen.

Du musst nichts unter Uses etc, weiter eintragen.

Eine Übersicht über alle Keycodes findest du hier: 
http://www.delphipraxis.net/6412-liste-der-virtuellen-tastencodes-vk_.html

MfG

von Felix N. (do6jan)


Lesenswert?

Ok, vielen Dank!
Sowas habe ich gesuch!

eine frage ist da noch ... Ich hab mir delphi grössten Tels selbst bei 
gebracht, deshalb kenn ich dei ganzen begriffe nicht.

Objektinspektor = die Liste der einzelnen Elemente wie Button Timer 
Radiobox usw.???

Weil ich habe Delphi 2005 dort werden weniger Funktionen direkt als in 
Delphi 6 Unterstützt.
Delphi 6 läft auf Vista leider nicht.

Bei gelegenheit werde ich es sonst auf XP versuchen.

von Robert (Gast)


Lesenswert?

Objektinspektor ist das Fenster, wo du die Eigenschaften eines Objektes 
einstellst (also z.B. button1.Caption = 'Knopf').

von Felix N. (do6jan)


Lesenswert?

Mega AH!

Ok, jetzt hab ich OnKeyDown
Steht auf FormKEyDown

muss ich jetzt auf den zu Clickenden Button

if key = VK_UP then
    GeheNachOben();
legen???

von Drücker (Gast)


Lesenswert?

Du kannst den Button Druck simulieren


case key
  VK_UP : ButtonUp.Click;           // TButton auf dem Form
  VK_DOWN: ButtonDown.Click;
  VK_LEFT:  ButtonLeft.Click;
  VK_RIGHT:  ButtonRIGHT.Click;
end;


und fertig

von Drücker (Gast)


Lesenswert?

Drücker schrieb:
> case key

of

von Felix N. (do6jan)


Lesenswert?

ok gut, noch ein stück weiter ...
also wo mss ich casekey abschalte "of"
und wo kommen die befehle
> case key
>   VK_UP : ButtonUp.Click;           // TButton auf dem Form
>   VK_DOWN: ButtonDown.Click;
>   VK_LEFT:  ButtonLeft.Click;
>   VK_RIGHT:  ButtonRIGHT.Click;
> end;
rein???

Wie besagt FÜR DUMMIES!!!

thx
jan

von Drücker (Gast)


Lesenswert?

für deine Zwecke gibt es folgende Ereignisbehandlungsroutinen

 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: 
TShiftState) ;
 ...
 procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: 
TShiftState) ;
 ...
 procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char) ;

du findet sie im Objektinspektor und gelangst mit Doppelclick an den 
sourcecode. In die letzte packst du

case key of
  VK_UP : Button1.Click;
  VK_DOWN: Button2.Click;
  VK_LEFT:  Button3.Click;
  VK_RIGHT:  Button4.Click;
end;

wobei Button1 bis 4 für die Variablen deiner TButton für die Richtung 
sind.

Wenn es noch nicht reicht, poste bitte die Unit.

von Purzel H. (hacky)


Lesenswert?

Allenfalls muss man noch ein
 keypreview:=true setzen.

von Felix N. (do6jan)


Angehängte Dateien:

Lesenswert?

ok gut,
aber mit dem keyPress gehts nicht...
(im anhabg meine Daten .. heisst CHat ist es aber nicht;)
----------------------
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: 
TShiftState);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: 
TShiftState);

-------
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case key of
  VK_UP : Button1.Click;
  VK_DOWN: Button2.Click;
  VK_LEFT:  Button3.Click;
  VK_RIGHT:  Button4.Click;
end;

end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: 
TShiftState);
begin
case key of
  VK_UP : Button1.Click;
  VK_DOWN: Button2.Click;
  VK_LEFT:  Button3.Click;
  VK_RIGHT:  Button4.Click;
end;

end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case key of
  VK_UP : Button1.Click; // an dieser stelle der fehler unten
  VK_DOWN: Button2.Click;
  VK_LEFT:  Button3.Click;
  VK_RIGHT:  Button4.Click;
end;

end;

end.
-------------
[Fehler] Chat.pas(348): E2010 Inkompatible Typen: 'Char' und 'Integer'


Die Buttons 1-4 exestieren alle ... es ist nur der Fehler an der stelle 
hast du auch Delphi 2005?

von AchJe (Gast)


Lesenswert?

>procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift:
>TShiftState);

>procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

Fällt dir da nichts auf? Vergleiche mal bei beiden Prozeduren, wie "Key" 
definiert ist. Hinweis: Word und Char ist NICHT der gleiche Datentyp!

Ich würde dir dringend empfehlen, ein Anfängerbuch über die 
Delphi-Programmierung zu kaufen. Nur mit Herumprobieren ohne zu wissen, 
was du da eigentlich tust, kannst du keine Programmiersprache lernen.

BTW, es gibt in Delphi eine sehr gute Online-Hilfe. Da steht eigentlich 
alles drin, was du wissen musst. Zum Verstehen dieser Hilfe brauchst du 
aber zumindest elementarste Grundkenntnisse über Delphi bzw. Object 
Pascal.

Wenn du nicht mal verstehst, dass es verschiedene Datentypen gibt, wirst 
du nicht sehr weit kommen.

von Drücker (Gast)


Lesenswert?

nein, habe leider kein Delphi5 verfügbar, aber vielleicht geht es auch 
so
1
type
2
  TForm1 = class(TForm)
3
...
4
    // procedure FormKeyPress(Sender: TObject; var Key: Char);
5
    // procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
6
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
7
...
8
9
10
      procedure TForm1.FormKeyUp(Sender...
11
      procedure TForm1.FormKeyPressed(Sender...
12
beide löschen
13
14
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
15
  Shift: TShiftState);
16
begin
17
case key of
18
  VK_UP : Button1Click (Sender);      
19
  VK_DOWN: Button2Click (Sender);
20
  VK_LEFT:  Button3Click (Sender);
21
  VK_RIGHT:  Button4Click (Sender);
22
end;
23
24
end;

aber die Pfeiltasten nur kurz drücken und nicht festhalten.

von Felix N. (do6jan)


Lesenswert?

ok, nun startet das Porg.
aber leider tut sich nix wenn ich die Pfeiltastendrücke ...
Woran kann das liegen
Aber langsam versteh ich wie das Funktioniert

--
Html kann ich perfekt nur durch rumprobieren.
aber das ist ja auch wirklich einfach ...

Was ist denn ein gutes Delphibuch???

von Drücker (Gast)


Lesenswert?

Das wird am Focus liegen. Click erst einen Button mit der Maus, so daß 
er noch markiert ist. Funktionieren die Pfeiltasten dann?

von Felix N. (do6jan)


Lesenswert?

nee leider nicht dan werden nur andere Markiert ...
soll ich mal das aktuelle projekt zippen und hochladen??

von Drücker (Gast)


Lesenswert?

ich glaube das wird so nichts. Habe Montag wieder Zugang zum Delphi-PC. 
Schau am Montag abend nochmal rein, dann versuche ich dir ein Muster zu 
posten.

von Felix N. (do6jan)


Lesenswert?

ok THX Leute und vielen Dank!!

villeich schaff ich es noch meinen Alten Lehrer mal zu fragen, der kennt 
sich super mit delphi aus ... aber er hat wenig zeit, seit dem ich ihn 
nicht mehr im Unterricht habe ;( Jetzt muss ich schon ein ganzes jahr 
ohne "DelphiGuru" auskommen ;)

Bis Montag!

Falls jemand ein gute Delphibuch kennt darf er es gerne mal Posten 
(Tietel und ISBN)

mfg
Jan

von Purzel H. (hacky)


Lesenswert?

Einen Breakpoint in die Prozedur ?

Wie schon gesagt muss man moeglicherweise in den form properties
KeyPreview:=true setzen. Dann gehen alle keys erst an das Form, bevor es 
an einen Control geht.

Ein gutes Buch : Delphi for Kids, enthaelt eine Delphi 3 Lizenz.
Dann gibt es noch die Codegear Foren bei Embarcadero.

von Drücker (Gast)


Lesenswert?

Gnadenloser Labberer schrieb:
> Wie schon gesagt muss man moeglicherweise in den form properties
> KeyPreview:=true setzen.

hab folgendes im Netz gefunden:
Siehe Delphi-Doc fuer KeyPreview:
Hat KeyPreview den Wert true, erhält das Formular Tastaturereignisse vor 
dem aktiven Steuerelement (das in der Eigenschaft ActiveControl 
angegeben ist).
Ist KeyPreview auf false gesetzt, gehen Tastaturereignisse an das aktive 
Steuerelement.
Die Einstellung bezieht sich nicht auf Navigationstasten (TAB, 
Pfeiltasten usw.), da diese keine Tastaturereignisse auslösen. Ähnliches 
gilt, wenn eine Schaltfläche den Fokus hat oder wenn dessen Eigenschaft 
Default den Wert true hat. Die Eingabetaste wird von KeyPreview nicht 
berücksichtigt, da diese kein Tastaturereignis auslöst.

Ich möchte jetzt erst selber mal probieren, also bis Montag um die 
gleiche Zeit.

von Felix N. (do6jan)


Angehängte Dateien:

Lesenswert?

ICH HAB ES!!! ES GEHT!!!!
diese Webseite und eure Tips haben mir geholfen
http://www.delphi-treff.de/tipps/system/tastatur-und-maus/shortcuts-mit-strgshift-und-alt/
Nach 3h rumprobieren hats doch geklappt!

Robert hatte ja eigenlich schon sowas geposted aber ich hatte kein plan 
wo das rein soll und die klammern haben mich total verwirrt.

>if key = VK_UP then
>    GeheNachOben();
                 da Klammern

danach musste ich  nur ein button machen um alles Buttons und Edit 
felder zu deaktivieren worauf die Pfeiltasten lenken könnten und es geht
und mit ein MAUSKLICK (jetzt hab ich es geckekt) wird wieder alles 
Aktiviert

Vielen DANK

mfg

Jan

von Johnny B. (johnnyb)


Lesenswert?

Sorry, ziemlich offtopic, aber dennoch. ;-)
Vielleicht ist es eine Option für Dich, mittel- bis langfristig auf 
etwas umzusteigen das weiter verbreitet ist als Delphi. Nichts gegen 
Delphi, habe das früher auch verwendet und war begeistert.
Aber in der Zwischenzeit hat sich Microsoft mit C# .NET gemausert und 
dem Delphi den Rang abgelaufen und seit einigen Jahren ist es genauso 
einfach zu bedienen wie Delphi und Du hast in derselben Zeit eine 
grafische Oberfläche zusammengeklickt. Die Express-Version ist kostenlos 
und wegen dessen Verbreitung findest Du mehr Informationen und Hilfe im 
Netz.
Als Mikrocontrollerprogrammierer kommt einem auch zugute, dass die 
Syntax C-Mässig ist und nicht Pascal. Komponenten für die serielle 
Schnittstelle und das alles sind auch schon von Haus aus dabei.

Aber wie gesagt, das ist nur eine Idee. Delphi ist völlig ok wenn Du es 
magst.

von Felix N. (do6jan)


Lesenswert?

Moin,
ich schau mir das mal an.
ich bin immer an neuen Programmiersprachen interresiert.
delphi ist nicht schlecht aber C ist natürlich auch gut

vielen dank für den hinweis

von Drücker (Gast)


Angehängte Dateien:

Lesenswert?

So, melde mich zurück. Gratuliere erstmal zu deinem Erfolg.

Habe noch eine Turbo Delphi Installation gefunden. Bei MSN habe ich eine 
Möglichkeit gefunden, die Pfeiltasten "umzubiegen". Im Anhang das 
Projekt, die Unit und die DFM. Kannst es ja mal ausprobieren und dich 
zurück melden.

von PI314 (Gast)


Lesenswert?

Das allerbeste Delphi-"Buch" (ausser Hilfe) ist der Quellcode von VCL 
(also, quasi Delphi selbst)... ein Paradebeispiel für "Klasse statt 
Masse". Aber wie gesagt, setzt elementare Kentnisse in Programmierung 
bzw. OOP voraus, also nix mit zusammenklicken-und-fertig, da OOP vom 
feinsten :)

von Felix N. (do6jan)


Lesenswert?

so aber da ist das gleiche problem,
sobald ich up drücke (mit der maus) und dann die tasten w a s d ... 
werden nur dei buttons markiert
desshalb habe ich ein button zum buttons deaktivieren und mit esc oder 
maus zu aktivieren - keine perfekte lösung aber es geht

mfg
jan
----------------
PS:
Vielen Dank Leute ih hab mir echt geholfen!

morgen ist ne lateinarbei und dafür muss ich noch pauken ... desshalb 
muss ich jetzt ofline gehen.
Das Problem ist aber gelöst.

Nochmals Vielen Dank!

mfg Jan

von Drücker (Gast)


Lesenswert?

Jan Koppatscheck schrieb:
> sobald ich up drücke (mit der maus) und dann die tasten w a s d ...
> werden nur dei buttons markiert
> desshalb habe ich ein button zum buttons deaktivieren und mit esc oder
> maus zu aktivieren - keine perfekte lösung aber es geht

Du hast sicherlich das "OnExit" Ereignis der Buttons im Objektinspektor 
nicht verknüpft. Vergleiche das DFM file.

Zur Funktion:
Beim Druck auf die Pfeiltaste verliert der aktuell markierte Button den 
Focus. Dadurch wird die Button?Exit Methode aufgerufen, der Button-Click 
erzeugt und dann der Focus wieder restauriert.

Das Ganze funktioniert 100%ig und erhöht den Bedienkomfort. Perfekt? 
Keine Ahnung ,aber eine wesentliche Verbesserung zur manuellen 
Umschaltung.

von Felix N. (do6jan)


Lesenswert?

Nochmal Danke ;)

da übernehm ich gleich mal ;)

hab ich nicht drauf geachtet

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.