![]() |
[GELÖST] Key (z.B 'A' ) per Button an ein Editfeld senden
Liste der Anhänge anzeigen (Anzahl: 1)
!GELÖST!
Hey, ich habe gerade ein Problem :-D Und zwar programmiere ich momentan einen Taschenrechner und möchte gerne, dass er, wenn ich auf den Button drücke, dass er dann eine Zahl (z.B 7) in das Editfeld schreibt, wo gerade der Focus ist. Allerdings soll er das auch in ein anderes Editfeldschreiben, wenn ich den Focus ändere... :?: Da ich keine Ahnung habe wie ich das machen soll und ich im Internet bzw. hier noch nichts darüber herausbekommen habe, würde ich mich über eine schnelle Antwort sehr freuen :-D (Bin mit Delphi/Lazarus noch nicht so der Pro ) Anhang 42458 |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Hallo,
wenn Du den Button (7) drückst - wird der den Focus haben. Grüße Klaus |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Zitat:
Wenn ich den Button drücke, soll er eine Zahl, also eine Taste von dem Keyboard, an das Editfeld senden (falls das überhaupt geht :D )... daran scheitere ich momentan Trotzdem danke für deine Antwort :thumb: |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
..meinst Du das in etwa so?
Delphi-Quellcode:
Grüße
procedure TForm1.Button7Click(sender:TObject);
var tempStr: String: begin tempStr := display.text; tempStr := concat(tempStr,'7'); display.text := tempStr; end; Klaus |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Du kannst das Zeichen ja einfach in das Feld schreiben:
Delphi-Quellcode:
Edit1.Text := '1';
|
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Hallo und willkommen hier...:dp:
Wie würdest du deinen bisherigen Kenntnisstand einschätzen? Weißt du was Events sind und wie man sie benutzt? Ich gebe dir mal die Lösung. Wenn du das nicht verstehst, frage einfach nach. Lösung: 1. In der Entwurfsansicht Doppelklick auf den Button -> Der Editor öffnet sich mit einem vorgefertigtem Prozedurrumpf. In etwa so:
Delphi-Quellcode:
2. Dort trägst du dann den Code ein der beim drücken des Buttons ausgeführt werden soll.
procedure TForm1.Button1Click(Sender: TObject);
end;
Delphi-Quellcode:
3. fertig.
procedure TForm1.Button1Click(Sender: TObject);
Edit1.Text:= '7'; end; HINWEIS: Der Code ist, obwohl er funktioniert, nicht wirklich gut. Darstellung und Daten sind immer zu trennen. In Anbetracht deiner Signatur das nur als Hinweis. :zwinker: |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Zitat:
"Error: Identifier not found 'ConcatStr' " |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Zitat:
Grüße Klaus |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Zitat:
Also ich habe schon so ein paar Grundkentnisse und habe auch schon einmal einen einfachen Taschenrechner geschrieben, der 2Edits für Wert1 und Wert2 hatte, ein Edit für die Ausgabe des Ergebnisses und 4 Button (+ - * /)...
Delphi-Quellcode:
Möchte es so haben, dass der Button die Zahl da reinschriebt, wo der Focus, den man ebenfalls durch Buttons setzen kann, gerade ist.
procedure TRechnerMainForm.ButtonPlusClick(Sender: TObject);
begin wert1:=strtofloat(Wert1Edit.text); wert2:=strtofloat(Wert2Edit.text); ergebnis:= wert1+wert2; ErgebnisEdit.text:= floattostr(ergebnis); end; Also geht das mit Edit1.Text:= Edit1.Text + '7'; Leider nicht, da er dann ja nur in das Editfeld schriebt :( ..... Bin langsam echt am verzweifeln... |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Wieso denn nicht einfach
Delphi-Quellcode:
?
display.Text := display.Text + '7';
|
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Zitat:
Trotzdem Danke :thumb: |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Das kann aber gefährlich werden, außerdem wurde ja schon angedeutet, dass bei Click der Button den Fokus bekommt, das hilft Dir ja auch nicht weiter. Skizzier doch mal Deine Anwendung etwas genauer, vielleicht gibt es ja andere Wege.
|
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
SpeedButtons verwenden, das gibt keinen Fokus.
Delphi-Quellcode:
Edit1.SelText := '7';
|
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Anhang 42459 |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
.. also Du drückst den ZahlenButton, merkst Dir den Wert
dann drückst Du den FocusButton und fügst den Wert in das Editx.Text an. Grüße Klaus |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Delphi-Quellcode:
If ActiveControl.InheritsFrom(TEdit) then
begin TEdit(ActiveControl).SelText := '7'; end; |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Oder man merkt sich einfach, welches Edit zuletzt den Fokus hatte.
Delphi-Quellcode:
Im OnCreate des Forms kann man FLastFocusedEdit mit einem der beiden Edits vorbelegen, die Buttons greifen dann auf das private Feld zu:
type
TDeinForm = class(TForm) private FLastFocusedEdit: TCustomEdit; procedure RememberLastFocusedEdit(Sender: TObject); ... end; ... (* Diese Methode beiden Edits zum OnEnter-Ereignis zuweisen *) procedure TDeinForm.RememberLastFocusedEdit(Sender: TObject); begin if Sender is TCustomEdit then FLastFocusedEdit := TCustomEdit(Sender); end;
Delphi-Quellcode:
@baumina: ActiveControl dürfte mit ziemlicher Sicherheit der auslösende Button sein, zumindest wenn es sich um einen Standard-Button (TWinControl) handelt.
procedure TDeinForm.btn7Click(Sender: TObject);
begin FLastFocusedEdit.Text := FLastFocusedEdit.Text + '7'; end; |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Danke!
|
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Zitat:
|
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Zitat:
-Daniel |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Zitat:
|
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Solange Du nicht vor dem Click in ein anderes Control wechselst, ja, denn SpeedButtons können keinen Fokus erhalten. Allerdings muss man sich darüber im Klaren sein, dass es ggf. nicht mehr funktioniert, wenn man doch mal andere Controls verwenden möchte, weil die z.B. cooler aussehen.
|
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
@Baumina & DeddyH
Vielen Dank !!!:-D Funktioniert endlich!! Grüße, Daniel |
AW: Key (z.B 'A' ) per Button an ein Editfeld senden
Warum kommt eigentlich niemand auf die Idee einfach eine Methode zu schreiben, die diesen String annimmt und an das Control sendet, was man meint?
Delphi-Quellcode:
So würde ich es als Minimal-Umsetzung machen ;)
procedure TForm1.Focus1ButtonClick( Sender : TObject );
begin FSelectedEdit := Edit1; end; // analog für Focus2Button und Edit2 // und jetzt die Magie procedure TForm1.ProcessInput( const InputStr : string ); begin if not Assigned( FSelectedEdit ) then Exit; // wir verwerfen die Eingabe, denn wir wissen nicht wohin :o) FSelectedEdit.Text := FSelectedEdit.Text + InputStr; end; // was machen die Buttons? procedure TForm1.BottonFooClick( Sender: TObject ); begin ProcessInput( '7' ); end; Noch witziger wird das mit einem Dictionary, wo man den Sender und den zu sendenden String einträgt. Dann gibt es nur noch eine Methode für alle Buttons
Delphi-Quellcode:
Schon hat man keine Tipporgie mehr sondern einen flexiblen Code
procedure TForm1.AllButtonsClick( Sender : TObject );
var LInputStr : string; begin if FInputLookup.TryGetValue( Sender, LInputStr ) then ProcessInput( LInputStr ); end; procedure TForm1.ConfigureInputLookup; begin FInputLookup.Clear; FInputLookup.Add( Button1, '42' ); ... // usw. end; |
AW: [GELÖST] Key (z.B 'A' ) per Button an ein Editfeld senden
Naja, schöner Code ist nicht immer der für "Nicht-Pros" verständliche, daher halte ich mich da gern etwas zurück.
|
AW: [GELÖST] Key (z.B 'A' ) per Button an ein Editfeld senden
Dass SpeedButtons keinen Fokus erhalten war mir jetzt neu. Cool.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 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