Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [GELÖST] Key (z.B 'A' ) per Button an ein Editfeld senden (https://www.delphipraxis.net/183589-%5Bgeloest%5D-key-z-b-per-button-ein-editfeld-senden.html)

Dexo 21. Jan 2015 13:41


[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

Klaus01 21. Jan 2015 13:45

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

Dexo 21. Jan 2015 13:48

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Zitat:

Zitat von Klaus01 (Beitrag 1287280)
Hallo,

wenn Du den Button (7) drückst - wird der den Focus haben.

Grüße
Klaus

Mir geht es auch eigentlich eher um den Code :-D

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:

Klaus01 21. Jan 2015 13:52

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
..meinst Du das in etwa so?

Delphi-Quellcode:
procedure TForm1.Button7Click(sender:TObject);
var
  tempStr: String:
begin
  tempStr := display.text;
  tempStr := concat(tempStr,'7');
  display.text := tempStr;
end;
Grüße
Klaus

Nersgatt 21. Jan 2015 13:52

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';

haentschman 21. Jan 2015 13:57

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:
procedure TForm1.Button1Click(Sender: TObject);

end;
2. Dort trägst du dann den Code ein der beim drücken des Buttons ausgeführt werden soll.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  Edit1.Text:= '7';
end;
3. fertig.

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:

Dexo 21. Jan 2015 13:59

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Zitat:

Zitat von Klaus01 (Beitrag 1287283)
..meinst Du das in etwa so?

Delphi-Quellcode:
procedure Button7.click(sender:TObject);
var
  tempStr: String:
begin
  tempStr := display.text;
  tempStr := concat(tempStr,'7');
  display.text := tempStr;
end;
Grüße
Klaus

Ja sowas meine ich, allerdings erscheint dann die Nachricht
"Error: Identifier not found 'ConcatStr' "

Klaus01 21. Jan 2015 14:07

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Zitat:

Zitat von Dexo (Beitrag 1287288)
Ja sowas meine ich, allerdings erscheint dann die Nachricht
"Error: Identifier not found 'ConcatStr' "

Ich hatte den code zwischenzeitlich ausgebessert.
Grüße
Klaus

Dexo 21. Jan 2015 14:12

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Zitat:

Zitat von haentschman (Beitrag 1287287)
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:
procedure TForm1.Button1Click(Sender: TObject);

end;
2. Dort trägst du dann den Code ein der beim drücken des Buttons ausgeführt werden soll.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  Edit1.Text:= '7';
end;
3. fertig.

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:

Danke :-D

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:
procedure TRechnerMainForm.ButtonPlusClick(Sender: TObject);
begin
  wert1:=strtofloat(Wert1Edit.text);
  wert2:=strtofloat(Wert2Edit.text);

  ergebnis:= wert1+wert2;

  ErgebnisEdit.text:= floattostr(ergebnis);

end;
Möchte es so haben, dass der Button die Zahl da reinschriebt, wo der Focus, den man ebenfalls durch Buttons setzen kann, gerade ist.

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...

DeddyH 21. Jan 2015 14:13

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Wieso denn nicht einfach
Delphi-Quellcode:
display.Text := display.Text + '7';
?

Dexo 21. Jan 2015 14:16

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Zitat:

Zitat von DeddyH (Beitrag 1287295)
Wieso denn nicht einfach
Delphi-Quellcode:
display.Text := display.Text + '7';
?

Das habe ich auch schon gemacht, aber er soll ja die Zahl da hinschreiben, wo der Focus ist :D

Trotzdem Danke :thumb:

DeddyH 21. Jan 2015 14:18

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.

baumina 21. Jan 2015 14:18

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
SpeedButtons verwenden, das gibt keinen Fokus.

Delphi-Quellcode:
Edit1.SelText := '7';

Dexo 21. Jan 2015 14:23

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DeddyH (Beitrag 1287297)
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.

Danke für deine Hilfe :thumb:!

Anhang 42459

Klaus01 21. Jan 2015 14:26

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

baumina 21. Jan 2015 14:27

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Delphi-Quellcode:
If ActiveControl.InheritsFrom(TEdit) then
begin
  TEdit(ActiveControl).SelText := '7';
end;

DeddyH 21. Jan 2015 14:32

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Oder man merkt sich einfach, welches Edit zuletzt den Fokus hatte.
Delphi-Quellcode:
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;
Im OnCreate des Forms kann man FLastFocusedEdit mit einem der beiden Edits vorbelegen, die Buttons greifen dann auf das private Feld zu:
Delphi-Quellcode:
procedure TDeinForm.btn7Click(Sender: TObject);
begin
  FLastFocusedEdit.Text := FLastFocusedEdit.Text + '7';
end;
@baumina: ActiveControl dürfte mit ziemlicher Sicherheit der auslösende Button sein, zumindest wenn es sich um einen Standard-Button (TWinControl) handelt.

Dexo 21. Jan 2015 14:33

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Danke!

baumina 21. Jan 2015 14:36

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Zitat:

Zitat von DeddyH (Beitrag 1287310)
@baumina: ActiveControl dürfte mit ziemlicher Sicherheit der auslösende Button sein, zumindest wenn es sich um einen Standard-Button (TWinControl) handelt.

Deswegen mein Hinweis oben besser SpeedButtons zu verwenden.

Dexo 21. Jan 2015 14:38

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Zitat:

Zitat von baumina (Beitrag 1287313)
Zitat:

Zitat von DeddyH (Beitrag 1287310)
@baumina: ActiveControl dürfte mit ziemlicher Sicherheit der auslösende Button sein, zumindest wenn es sich um einen Standard-Button (TWinControl) handelt.

Deswegen mein Hinweis oben besser SpeedButtons zu verwenden.

Also wenn ich SpeedButtons verwende bleibt ActiveControl bei den Edits?

-Daniel

baumina 21. Jan 2015 14:41

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
Zitat:

Zitat von Dexo (Beitrag 1287314)
Zitat:

Zitat von baumina (Beitrag 1287313)
Zitat:

Zitat von DeddyH (Beitrag 1287310)
@baumina: ActiveControl dürfte mit ziemlicher Sicherheit der auslösende Button sein, zumindest wenn es sich um einen Standard-Button (TWinControl) handelt.

Deswegen mein Hinweis oben besser SpeedButtons zu verwenden.

Also wenn ich SpeedButtons verwende bleibt ActiveControl bei den Edits?

-Daniel

Ja genau, SpeedButtons erhalten keinen Fokus.

DeddyH 21. Jan 2015 14:42

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.

Dexo 21. Jan 2015 14:50

AW: Key (z.B 'A' ) per Button an ein Editfeld senden
 
@Baumina & DeddyH

Vielen Dank !!!:-D
Funktioniert endlich!!

Grüße,
Daniel

Sir Rufo 21. Jan 2015 16:23

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:
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;
So würde ich es als Minimal-Umsetzung machen ;)

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:
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;
Schon hat man keine Tipporgie mehr sondern einen flexiblen Code

DeddyH 21. Jan 2015 17:27

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.

Der schöne Günther 21. Jan 2015 17:54

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:41 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