Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Edit-Fenster durch Cursor bestimmen
muellema - Mo 07.06.10 09:18
Titel: Edit-Fenster durch Cursor bestimmen
Hallo Experten, ich bin totaler Neuling mit Delphi.
Ich bin gerade dabei einen Taschenrechner zu programmieren, und bin dabei auf folgendes Problem gestoßen.
Ich möchte meine Eingabe via Mausklick auf einer Tastatur bestimmen.
Es dabei kein Problem eine Eingabe in ein bestimmtes Edit-Feld zu tätigen. Wie aber lege ich fest, dass ich bei einem Klick die Caption des Buttons im Edit1 haben möchte und beim nächsten Klick im Edit2?!
Natürlich wäre es möglich 2 Tastaturen bzw für jedes Edit eine zu erstellen. Doch wil ich alle Edits mit einer Tastatur steuern können.
Hat jemand eine Lösung für mich?!
Ich würde mich über schnelle Antwort freuen.
Lieber Gruß
Moderiert von
Narses: Topic aus Programmierwerkzeuge verschoben am Mo 07.06.2010 um 11:25
Horschdware - Mo 07.06.10 09:43
Mit einer Hilfsvariable die beim Klicken gesetzt wird. Ist die Variable A, tue X, ist sie B, tue Y.
jaenicke - Mo 07.06.10 10:04
Oder ganz einfach so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private FCurrentEdit: TEdit; procedure TfrmMain.EditClick(Sender: ...); begin FCurrentEdit := Sender as TEdit; end; if Assigned(FCurrentEdit) then FCurrentEdit.Text := FCurrentEdit.Text + '1'; |
Dadurch, dass direkt das Editfeld gespeichert wird, ist das ganze sehr flexibel, da man beim Eintragen gar nicht wissen muss was es für Edits gibt. ;-)
martin300 - Mo 07.06.10 10:10
Hi,
du kannst das Edit-Feld öfters verwenden. Zb könnte es so funktionieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.btn1Click(Sender: TObject); begin edt1.Text := edt1.Text + TEdit(Sender).Text; end;
procedure TForm1.btn2Click(Sender: TObject); begin edt1.Text := edt1.Text + TEdit(Sender).Text; end; |
Das Edit-Feld hat den Namen edt1, zwei Buttons mit der Caption 1 + 2 (für die Ziffern - kann noch erweitert werden). Nun wird im Ereignis die Caption vom Button übertragen und immer in das gleiche Editfeld eingefügt.
muellema - Di 08.06.10 20:52
Danke für eure Zahlreichen Antworten.
Aber so, betonen will ich nochmals, dass ich echter Neueinsteiger bin.
Ich habe nun zwei Edit-Felder und eine Tastatur.
Was muss ich nun tuen?
Ich würde mich über weitere Hilfe freuen.
MaPsTaR - Di 08.06.10 23:26
Hallo, hast du den Beitrag von
jaenicke eigentlich gelesen?
-> Erstelle eine private-Variable FCurrentEdit, in der gespeichert wird, welches Edit angeklickt wurde (1-2).
-> Schreibe in deinen Code die
procedure TfrmMain.EditClick(Sender: TObjects) (4-8 ).
-> Markiere alle betroffenen Edits im Objektinspektor und weise ihnen
EditClick als OnClick-Ereignis zu.
-> Schreibe eine
procedure TfrmMain.KeyboardClick(Sender: TObject) (10-12).
(Zeile 12 änderst du so ab, dass statt '1', TButton(Sender).Caption da steht)
-> Markiere alle Buttons deiner "Tastatur" und weise ihnen
KeyBoardClick als OnClick-Ereignis zu.
Wenn noch weitere Fragen sind, dann geh bitte mehr ins Detail.
Meine Lust, zu raten, was genau du nicht verstehst, hält sich eher in Grenzen.
btw:
-> Eine fertige Lösung wird dir hier kaum jemand präsentieren, u.a. weil dir damit längerfristig nicht geholfen wäre.
-> Eventuell wäre dein bisheriger Code ganz hilfreich, um zu sehen, dass du dir schon Gedanken gemacht hast.
@martin300
Dein Code kommt zwar der üblichen Verwendung eines Taschenrechners am nächsten, beantwortet aber nicht die Frage von muellema...
muellema - Di 08.06.10 23:50
Danke, dass ihr euch meinem Problem annehmt. UNd sicher hält sich der langfristige Erfolg durch das "Vorsagen" in Grenzen.
Daher meine Versuche:
Also um die Caption eines bestimmten Button in ein bestimmtes Edit-Fenster zu bekommen
Delphi-Quelltext
1:
| Edit1.text := Edit1.Text + Button1.Caption; |
und das halt für jeden Button. Das klappt auch.
Nun verstehe ich aberJaenicke´s Ansatz nicht ganz.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private FCurrentEdit: TEdit; procedure TfrmMain.EditClick(Sender: ...); begin FCurrentEdit := Sender as TEdit; end; if Assigned(FCurrentEdit) then FCurrentEdit.Text := FCurrentEdit.Text + '1'; |
Moderiert von
Narses: Delphi-Tags hinzugefügt
MaPsTaR - Mi 09.06.10 00:26
Soll heißen, du hast das für jeden Button einzeln geschrieben?
Das kannst du in einer Prozedur zusammenfassen, da Delphi beim Aufruf eines Ereignisses (z.B. OnClick) einen Sender übergibt (afaik die aufrufende Komponente).
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.KeyboardClick(Sender: TObject); begin if Sender is TButton then Edit1.SelText := Button(Sender).Caption; end; |
Diese weist du dann einfach allen Buttons über den Objektinspektor zu.
In meinem letzten Beitrag habe ich versucht dir zu erklären, was der Code von
jaenicke macht und wie du ihn verwendest.
Verstehst du davon etwas nicht -> fragen? Die Zahlen in Klammern sind die Zeilen im Code von
jaenicke.
Setze deinen Code bitte in [delphi] -Tags (unter Bereiche), damit man ihn besser lesen kann.
muellema - Do 10.06.10 01:43
ISt mein Anliegen vielleicht falsch rübergekommen?
Also vereinfacht:
Ich ahbe einen Button und zwei Edit_Felder.
Wie kann ich entscheiden inwelches Edit-Feld die Caption des Buttons übernommen wird?
WIe gesagt.. Für ein Edit-Feld ist das für mich gar kein Problem (s.o.)
Es tut mir leid, dass ich wahrscheinlich so peinlich Frage.. aber ich bin eben noch ein total Anfänger.
Ich freue mich auf weitere Hilfe.
Lieber Gruß
jaenicke - Do 10.06.10 02:07
muellema hat folgendes geschrieben : |
| ISt mein Anliegen vielleicht falsch rübergekommen? |
Nein, aber meine Antwort offenbar. ;-)
Im Anhang der Code eingebaut in ein Testprojekt. Wirklich fast nur der schon gepostete (und der hätte so auch funktioniert), ich dachte das könntest du auch selbst ausprobieren...
MaPsTaR - Do 10.06.10 10:22
Hallo,
dein Problem habe ich schon verstanden. Da du aber offenbar den Code von jaenicke nicht verstanden hast, wollte ich ihn mit dir Schritt für Schritt durchgehen, damit du nachher auch weißt, was du eigentlich in deinem Code stehen hast.
Meinen letzten Code hätten wir im nächsten Schritt so geändert, dass in das ausgewählte Edit geschrieben wird.
muellema hat folgendes geschrieben : |
| Für ein Edit-Feld ist das für mich gar kein Problem (s.o.) |
Deswegen war meine Frage, ob du das für jeden Button einzeln geschrieben hast.
Dann müsstest du die Bedingung zur Auswahl des Edit x-mal schreiben.
Daher mein Code der von allen Buttons aufgerufen werden kann.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!