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
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?
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?!?
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
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.
Objektinspektor ist das Fenster, wo du die Eigenschaften eines Objektes einstellst (also z.B. button1.Caption = 'Knopf').
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???
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
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
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.
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?
>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.
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.
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???
Das wird am Focus liegen. Click erst einen Button mit der Maus, so daß er noch markiert ist. Funktionieren die Pfeiltasten dann?
nee leider nicht dan werden nur andere Markiert ... soll ich mal das aktuelle projekt zippen und hochladen??
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.
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
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.
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.
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
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.
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
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.
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 :)
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.