Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Buchstaben auf Tastendruck ... (https://www.delphipraxis.net/158490-buchstaben-auf-tastendruck.html)

Dunkelbunt27 19. Feb 2011 15:07

Buchstaben auf Tastendruck ...
 
Hallo Delphi-Praxis,

ich möchte auf Tastendruck das Zeichen der gedrückten Taste dem aktuellen Ort meines zweidimensionalen Dynamsichen Arrays zuweisen, eine Spalte weiterrutschen und den Buchstaben an die gewünschte Position zeichnen...

Ich hab mir das so vorgestellt:
Delphi-Quellcode:
procedure ... .FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  buchstabe[PositionSpalte,PositionZeile].Zeichen := char(Key);
  ...
  Spalteweiterrutschen;      // funktioniert, muss also nicht gepostet werden
end;
...

procedure buchstaben_zeichnen;                                                    
begin
  Paintbox.Canvas.TextOut(PositionSpalte,PositionZeile,buchstabe[PositionSpalte,PositionZeile].zeichen);
end;
Wenn ich also eine Taste drücke, dann rutsche ich eine Zeile weiter, aber zeichne keinen Buchstaben...

Was mache ich falsch?

FG Dunkelbunt

Dunkelbunt27 19. Feb 2011 15:57

AW: Buchstaben auf Tastendruck ...
 
Ist es auch möglich das Ganze außerhalb von OnKeyDown abzufragen...

Weiß niemand einen Vorschlag?

[Edit] Sorry für Doppelpost [/Edit]

WM_CLOSE 19. Feb 2011 16:06

AW: Buchstaben auf Tastendruck ...
 
Ja die möglickeit gibt es schon ,aber warum? (GetAsyncKexState z.B.)
Was steht denn in Key drin?

Dunkelbunt27 19. Feb 2011 16:09

AW: Buchstaben auf Tastendruck ...
 
Es muss nicht unbedingt außerhalb sein, wenn es funktioniert mit OnKeyDown wär ich ja mehr als zufrieden. Was meinst du mit was steht in Key drin? Key müsste doch die gedrückte Taste sein in ASCII oder?

patti 19. Feb 2011 16:10

AW: Buchstaben auf Tastendruck ...
 
Ich kann in dem von dir gepostetem Quelltext-Ausschnitt nirgends einen Aufruf deiner Zeichen-Routine sehen...
Des Weiteren sollte man auf eine PaintBox-Canvas nur in dem TPaintBox-Event "OnPaint" zeichnen, nicht in einer x-beliebigen Funktion (wobei man natürlich einzelne Fragmente in andere Methoden auslagern kann, aber die müssen dann eben aus der OnPaint-Routine raus aufgerufen werden), da sonst der Inhalt der PaintBox-Canvas beim nächsten Paint-Aufruf verloren ist. Deshalb also entweder einmalig auf ein Bitmap-Canvas malen und im OnPaint der PaintBox dann das Bitmap auf der Canvas ausgeben, oder im OnPaint-Ereigniss jedes mal alle Buchstaben aufs neue auf der PaintBox-Canvas ausgeben.

Edit: Beim OnKeyPress bekommst du übrigens gleich einen Parameter vom Typ char übergeben. Außerdem solltest du unbedingt die Eigenschaft "KeyPreview" deines Formulars auf true setzen, da es sonst passieren kann, dass das Key-Event nicht an dein Formular "durchgereicht" wird!

Dunkelbunt27 19. Feb 2011 16:12

AW: Buchstaben auf Tastendruck ...
 
Sorry, mein Fehler, natürlich wird gezeichnet, im OnPaint wird natürlich mein buchstaben_zeichnen ausgeführt.
Ich weiß nur nicht wieso de rzu ezichnende buchstabe dort eventuell nicht ankommt.

patti 19. Feb 2011 16:19

AW: Buchstaben auf Tastendruck ...
 
Rufst du denn auch irgendwo die Routine zum Neuzeichnen der PaintBox auf (z.B. PaintBox.Repaint; )?
Übrigens ist es im Moment so, dass du nur EINEN Buchstaben ausgibst. Wenn die OnPaint-Routine aufgerufen wird, ist die Canvas - vereinfacht ausgedrückt - leer. Wenn du dann nur einen Buchstaben per TextOut ausgibst, dann wirst du auch bloß einen sehen...

Bitte Edit in meinem oberen Post beachten...

Dunkelbunt27 19. Feb 2011 16:21

AW: Buchstaben auf Tastendruck ...
 
Key Preview ist auf true, es wird neugezeichnet, alles hat ja vorher auch funktionier wie rahmen zeichnen usw.
Gibt es nicht schon einen "Algorithmus" um per Tastendruck die Buchstaben auf einer Paintbox auszugeben?

WM_CLOSE 19. Feb 2011 16:56

AW: Buchstaben auf Tastendruck ...
 
Darf ich vielleicht fragen was genau du vorhast, bzw Warum. (Nur Interressehalber)
Und könntest du vielleicht den gesamten (relevanten) Code posten?

Dunkelbunt27 19. Feb 2011 19:15

AW: Buchstaben auf Tastendruck ...
 
Ich habe nur vor eine taste zu drücken, dann das Zeichen an die dafür vorgesehene Stelle zu zeichnen.
Die Stellenberechnung ist fertig. Ich möchte nur noch wissen, wie man auf Tastendruck genau das Zeichen in den Speciher bekommt, bzw auf eine Variable (in meinem Fall ein Array) legt. Das ausgeben, ist ebenfalls kein Problem.

EDIT:
Hab das Problem gelöst. Man muss nachdem man Key dem richtigen Platz im Array zugewisen hat sofort danach den buchstaben zeichnen. Dann kann man erst weiterrutschen.

Danke für eure Anregungen und Hilfen =)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz