AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Tastenbestätigung in Delphi

Ein Thema von TucTuc · begonnen am 14. Mai 2010 · letzter Beitrag vom 24. Jun 2010
Antwort Antwort
Seite 2 von 4     12 34   
Benutzerbild von PhilmacFLy
PhilmacFLy

Registriert seit: 20. Jan 2008
Ort: Nürnberg
340 Beiträge
 
FreePascal / Lazarus
 
#11

Re: Tastenbestätigung in Delphi

  Alt 15. Mai 2010, 17:35
also das wenn du label 2 klickst das im label 1 angezeigt wird ist ganz klar das du label1.Caption zugewiesen hast nicht label2.caption und wenn du die procedure TForm1.A löscht sollte alles wie geplant gehen.
Philipp N.
"Programmiern ist wie küssen:
Mann kan darüber reden, mann kann es beschreiben,
aber man weiss erst, was es bedeutet,
wenn man es getan hat"
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#12

Re: Tastenbestätigung in Delphi

  Alt 15. Mai 2010, 17:54
Punkt 1: Die Delphi-Tags kann man auch schließen. Dann wirds lesbarer.
Punkt 2: label1.caption := 'nichts'; <-- Diese Zeile ist sinnlos. Sie wird ja direkt danach wieder überschrieben. Delphi arbeitet nicht nach der Mache: Ich drücke eine Taste und im Quellcode springt Delphi an die richtige Stelle. Nein, du musst Delphi sagen, was die richtige Stelle ist und Delphi beherrscht glücklicherweise nur eine Ausführrichtung von OBEN NACH UNTEN.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von Kurt56
Kurt56

Registriert seit: 6. Apr 2005
Ort: Wedemark
47 Beiträge
 
Delphi XE8 Professional
 
#13

Re: Tastenbestätigung in Delphi

  Alt 15. Mai 2010, 21:06
Also noch einmal:

Erstelle eine neue Anwendung mit einer FORM.
Plaziere auf diese Form ein Objekt vom Typ TEDIT <--also ein EINGABEFELD
Plaziere dann ein Feld vom Typ TLABEL <--also ein Anzeigefeld

Ändere die Eigenschaft von FORM1 -- Keypreview von false(Standard) auf true

wechsel auf die Ereignisse von Form1 und mache bei OnKeyPress einen Doppelklick.

Trage dort den folgenden Code ein:
Delphi-Quellcode:
if key = char('A') then label1.Caption:= 'Taste A gedrückt';
if key = char('B') then label1.Caption:= 'Taste B gedrückt';


------------------------------------
Der vollständige Code zu deinem Programm sieht nun so aus:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = char('A') then label1.Caption:= 'Taste A gedrückt';
if key = char('B') then label1.Caption:= 'Taste B gedrückt';

end;

end.
------------------------- Starte das Programm----------------
Der Focus(Cursor) ist im Eingabefeld (Edit1)
-wenn du ein "A" eintippst, dann steht im Anzeigefeld (TLabel1) der Satz: 'Taste A gedrückt'
-wenn du ein "B" eintippst, dann steht im Anzeigefeld (TLabel1) der Satz: 'Taste B gedrückt'
doch wenn du eine andere Taste drückst, dann passiert NICHTS.

============= Zusatz=============
Wenn du auf das Eingabefeld drückst, so erscheinen im Objektinspektor die Eigenschaften/Ereignisse des Feldes EDIT1
Mache einen Doppelklick auf die Eigenschaft OnKeyPress des OBJEKTES EDIT1 und schreibe dort den Code
Delphi-Quellcode:
if not (key in [#65..#67,#8]) then
   begin
   key := #0;
   beep();
   end;
Starte das Programm.
Du wirst jetzt dsehen, dass du nur noch die Buchstaben "A", "B" und "C", sowie die Rücktaste eingeben kannst.
Bei allen anderen Zeichen erhältst Du einen Piepton, aber es erscheint NICHTS im Eingabefeld.

So kannst Du die Zeichen begrenzen, die eingegeben werden können.

Und nun viel Spaß beim Testen
Kurt
  Mit Zitat antworten Zitat
TucTuc

Registriert seit: 20. Dez 2008
18 Beiträge
 
#14

Re: Tastenbestätigung in Delphi

  Alt 16. Mai 2010, 11:08
Also erstmal ein paar misverständnisse mit den labelanzeigen hatte ich mir schon so gedacht mit dem klicken und on key press zum testen
ich wollte das gerne ohne editfeld haben da lag mein problem wenn ich das über on key press mache geht das ohne editfeld aber ich scheine lediglicjh eine taste belegen zu können...
Ich möchte eifach das wenn ich eine taste drücke ein paar variablen werte geändert werden und dies in den labeln angezeigt wird...
ich wollte dasa mit tasten machen weil ich zu faul war eine microcontroller zu nehmen der dann die werte ausgibt...
also hab ich das funkmodul aus einer tastatur genommen und das in meine auswerte elektronik eingebaut...
jetzt bekomme ich für die gemessenen werte buchstaben...
und diese soll das delphi programm wieder in messwerte umwandeln und die gemessenen werte in labeln anzeigen

deshalb hätte ich das gerne wie das onkeypressevent also geht das gar nicht anders?
[quote]
also das wenn du label 2 klickst das im label 1 angezeigt wird ist ganz klar das du label1.Caption zugewiesen hast nicht label2.caption und wenn du die procedure TForm1.A löscht sollte alles wie geplant gehen.

das soll auch so

und die zuweisung in der key press prozedur die ja normalerweise direkt überschrieben wird sollte sein um zu testen ob die pocedure überhaupt ausgeführt wird...

hoffe ihr versteht jetzt was ich vorhabe und ja ich weiß warum nicht gleich so

grüße

tuctuc
  Mit Zitat antworten Zitat
Benutzerbild von Kurt56
Kurt56

Registriert seit: 6. Apr 2005
Ort: Wedemark
47 Beiträge
 
Delphi XE8 Professional
 
#15

Re: Tastenbestätigung in Delphi

  Alt 16. Mai 2010, 14:46
Mache ein MENÜ und belege die Menüpunkte mit dem Shortcut des Buchstabens, den Du ausgelesen bekommst.
Dann brauchst Du kein Editfeld.
Kurt
  Mit Zitat antworten Zitat
TucTuc

Registriert seit: 20. Dez 2008
18 Beiträge
 
#16

AW: Tastenbestätigung in Delphi

  Alt 23. Jun 2010, 13:03
So es funktioniert ich war nur zu doof bzw. zu schwer von kapische...
Wie auch immer nocheinmal zusammengefasst für all die aderen die was ähnliches versuchen:

-Ziel war eine "Unsichtbare Tastenabfrage"

-Man klickt auf das Formular, so das es den Fokus hat
links im Objektinspektor müssten nun die Eigenschaften von TForm1 oder wie ihr es auch immer genannt habt stehen
=> dort klickt ihr auf Ereignisse/Aktions je nach Delphiversion und scrollt ein Stück herunter:

Dort findet ihr:

OnKeyDown Taste := wurde runter gedrückt
OnKeyPress Taste := wird gedrückt gehalten
OnKeyUP Taste := wird losgelassen

OnKeyPress hat als Wertebereich lediglich ein paar Asci-codes und unterscheidet dementsprechen auch nicht das Num_Pad von den Zahlen über den Buchstaben für meine Zwecke zu wenig verschiedene Tasten...

OnKeyUp und Down haben den selben Wertebereich und können im Prinzip jede Taste der Tastatur unterscheiden

einfach neben eins der 3 Events doppelklicken und es wird automatisch eine Prozedur in der Unit erstellt und nun könnt ihr mit den Tastencodes aus der Hilfe spieln

kleiner Auszug:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
      turnscore := 0;
//Inner-Bull Ring1:
      if key = vk_end then label1.caption := 'end';
      if key = vk_delete then turnscore := 50;
//Outer-Bull Ring2:
      if key = vk_delete then turnscore := 25;
//innen-einfach Ring3:
      if key = vk_delete then turnscore := 1;
      if key = vk_delete then turnscore := 2;
      if key = vk_delete then turnscore := 3;
      if key = vk_delete then turnscore := 4;
      if key = vk_delete then turnscore := 5;
      if key = vk_delete then turnscore := 6;
      if key = vk_delete then turnscore := 7;
      if key = vk_delete then turnscore := 8;
      if key = vk_delete then turnscore := 9;
      if key = vk_delete then turnscore := 10;
      if key = vk_delete then turnscore := 11;
      if key = vk_delete then turnscore := 12;
      if key = vk_delete then turnscore := 13;
      if key = vk_delete then turnscore := 14;
      if key = vk_delete then turnscore := 15;
      if key = vk_delete then turnscore := 16;
      if key = vk_delete then turnscore := 17;
      if key = vk_delete then turnscore := 18;
      if key = vk_delete then turnscore := 19;
      if key = vk_delete then turnscore := 20;

wen wundert was das sein soll nach dem ich bei meinem letzten projekt 3 pics zerschossen habe habe ich mir überlegt das Funkmodul einer kaputten logitechtastatur zu missbrauchen meiner meinung nach einfach wie genial jeder ausgelesene wert wird zu einem buchstaben oder buchstabensalat und kann dann zurückübersetzt werden und das auch noch kabellos...

viel spaß damit hoffe ist ne anregung für andere

viele grüße

TucTuc

PS: ja ich weiss groß kleinschreibung und rechtschreibung aber das wir überbewertet

Geändert von TucTuc (23. Jun 2010 um 20:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#17

AW: Tastenbestätigung in Delphi

  Alt 23. Jun 2010, 17:45
Zitat:
wen wundert was das sein soll nach dem ich bei meinem letzten projekt 3 pics zerschossen habe habe ich mir überlegt das Funkmodul einer kaputten logitechtastatur zu missbrauchen meiner meinung nach einfach wie genial jeder ausgelesene wert wird zu einem buchstaben oder buchstabensalat und kann dann zurückübersetzt werden und das auch noch kabellos...
Irgendwie verstehe ich genau NICHTS von dem Satz der scheinbar nicht mal ein Satz ist.

Warum verwendest du in deinem Quelltext nicht
Delphi-Quellcode:
begin
  [...]
end;
?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#18

AW: Tastenbestätigung in Delphi

  Alt 23. Jun 2010, 17:51
Kompiliert dieser Code fehlerfrei?

Konstrukte wie dieses if key = vk_delete then turnscore := 50 and ring := 1; habe ich noch nie gesehen.

Oder meinst du

Delphi-Quellcode:
if key = vk_delete then
begin
  turnscore := 50;
  ring := 1;
end;
Wobei dein ganzer Code chaotisch aussieht und für mich überhaupt keinen Sinn ergibt.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#19

AW: Tastenbestätigung in Delphi

  Alt 23. Jun 2010, 17:52
if key = vk_delete then turnscore := 2 and ring := 3;
Also wenn du da keinen Syntaxfehler bekommst, glaub ich, dass deine Syntaxprüfung irgendwie defekt ist. Der Compiler müsste hier mecjern, weil er ein ":=" statt einem ";" gefunden hat. Er führt nämlich nicht bei Anweisung1 and Anweisung2 beide Anweisungen aus, sondern der Zahlenprüfer springt ein und erkennt ein turnscore := 2 and ring mit unbestimmtem Ergebnis. Dann kommt der Compiler an die stelle mit dem := 3; und wird meckern.
Wie also mein Vorredner schon gesagt hat: Um begin[...]end wirst du nicht drum rum kommen.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!

Geändert von rollstuhlfahrer (23. Jun 2010 um 17:52 Uhr) Grund: Beginn im Englischen hat nur 1 n
  Mit Zitat antworten Zitat
TucTuc

Registriert seit: 20. Dez 2008
18 Beiträge
 
#20

AW: Tastenbestätigung in Delphi

  Alt 23. Jun 2010, 20:47
man seid ihr kritisch sollte lediglich ne erklärung sein was ich mit meinem programm bezwecke
ja und ihr habt recht das mit then...and...; hab ich auch festgestellt
verzweifle gerade an der lösung möchte nocht jedes mal begin...end
hat da wer ne ahnung?
Zitat:
wen wundert was das sein soll nach dem ich bei meinem letzten projekt 3 pics zerschossen habe habe ich mir überlegt das Funkmodul einer kaputten logitechtastatur zu missbrauchen meiner meinung nach einfach wie genial jeder ausgelesene wert wird zu einem buchstaben oder buchstabensalat und kann dann zurückübersetzt werden und das auch noch kabellos...
so für unsere syntax liebhaber: ( )
also das sollte ja wie gesagt den zweck des programms erklären:
ich habe schlechte erfahrungen mit dem programieren von pics gemacht
also habe ich ein logitech funkmodul aus einer alten tastatur ausgebaut
meine auswerte einheit daran angeschlossen und bekomme jetzt die jeweiligen 1/0 werte jedes kanals als buchstaben
den buchstaben ordne ich dann den punktwert und die ringordnung zu
ich lese damit eine elektrische dartscheibe aus

=> ich hoffe ich habe alle klarheiten beseitigt
  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 23:12 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