www.mikrocontroller.net

Forum: PC-Programmierung Delphi - keypress


Autor: Jan K. (do6jan)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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-pro...
Hast du überhaupt gesucht?

Autor: Jan K. (do6jan)
Datum:

Bewertung
0 lesenswert
nicht 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?!?

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
if key = VK_UP then 
    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-virtuel...

MfG

Autor: Jan K. (do6jan)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Robert (Gast)
Datum:

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

Autor: Jan K. (do6jan)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Drücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Drücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Drücker schrieb:
> case key

of

Autor: Jan K. (do6jan)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Drücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Allenfalls muss man noch ein
 keypreview:=true setzen.

Autor: Jan K. (do6jan)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: AchJe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Drücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, habe leider kein Delphi5 verfügbar, aber vielleicht geht es auch 
so
type
  TForm1 = class(TForm)
...
    // 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.FormKeyUp(Sender...
      procedure TForm1.FormKeyPressed(Sender...
beide löschen

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case key of
  VK_UP : Button1Click (Sender);      
  VK_DOWN: Button2Click (Sender);
  VK_LEFT:  Button3Click (Sender);
  VK_RIGHT:  Button4Click (Sender);
end;

end;

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

Autor: Jan K. (do6jan)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Drücker (Gast)
Datum:

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

Autor: Jan K. (do6jan)
Datum:

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

Autor: Drücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan K. (do6jan)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Drücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan K. (do6jan)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ICH HAB ES!!! ES GEHT!!!!
diese Webseite und eure Tips haben mir geholfen
http://www.delphi-treff.de/tipps/system/tastatur-u...
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

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan K. (do6jan)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Drücker (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: PI314 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Jan K. (do6jan)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Drücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan K. (do6jan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal Danke ;)

da übernehm ich gleich mal ;)

hab ich nicht drauf geachtet

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.