| Autor |
Beitrag |
Stread
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: So 28.12.08 21:25
Hi
Ich habe einen Taschenrechner der mehrere (3 Stück) Edit Felder hat. Wenn ich mit der Maus die einzelnen Felder anklicke kann ich ganz normal die Zahlen eingeben. Nun habe ich aber (wie im Windowsrechner) die Zahlen als Button gemacht und möchte nun dass man die Edit Felder auch so füllen kann.
1.Problem: Die zuletzt eingegebene Zahl wir immer mit der neuen überschrieben.
2.Problem: Wie lege ich fest in welches Feld die Zahl reingeschrieben werden soll?
3.Problem: Kann man es einrichten dass man über einen Button oder die ENTER Taste zum nächsten Feld kommt?
Danke
Stread
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 28.12.08 21:34
Crossposts solltest du zumindest angeben...
forum.delphi-treff.d...wthread.php?p=183609
Zum Problem: Stread hat folgendes geschrieben : | | 1.Problem: Die zuletzt eingegebene Zahl wir immer mit der neuen überschrieben. |
Dann wirst du das auch so programmiert haben. Wenn du die neue Zahl an den alten Inhalt anfügen willst, dann musst du den alten Inhalt auch wieder mit reinlegen.
Stread hat folgendes geschrieben : | | 2.Problem: Wie lege ich fest in welches Feld die Zahl reingeschrieben werden soll? |
Wie meinst du das? Du schreibst ja in deinem Code wo sie landet. Meinst du wie du das Feld findest, das derzeit den Eingabefokus hat, wo also die Eingaben landen würden, wenn man die Tastatur benutzt?
Stread hat folgendes geschrieben : | | 3.Problem: Kann man es einrichten dass man über einen Button oder die ENTER Taste zum nächsten Feld kommt? |
Dafür gibt es SetFocus. Die Entertaste kannst du in OnKeyPress abfangen (#13).
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: So 28.12.08 21:56
Ja sry ist so eine Angewohnheit von mir. Ich will erstmal sehen wie die unterschiedlichen Foren so sind bevor ich mich auf eins festlege.
jaenicke hat folgendes geschrieben : |
Dann wirst du das auch so programmiert haben. Wenn du die neue Zahl an den alten Inhalt anfügen willst, dann musst du den alten Inhalt auch wieder mit reinlegen. |
Wie mache ich das?
jaenicke hat folgendes geschrieben : |
Wie meinst du das? Du schreibst ja in deinem Code wo sie landet. Meinst du wie du das Feld findest, das derzeit den Eingabefokus hat, wo also die Eingaben landen würden, wenn man die Tastatur benutzt? |
Genau. Ich habe jetzt z.B. mit der Maus das 2. Edit Feld angeklickt. Wenn ich (im Moment) den Button für eine Zahl anklicke erscheint die Zahl nur immer in dem Feld wo ich es im Quelltext definiert habe. z.B. immer im 1. Feld.
jaenicke hat folgendes geschrieben : |
Dafür gibt es SetFocus. Die Entertaste kannst du in OnKeyPress abfangen (#13). |
Geht auch beides zusammen? Kannst du es mir bitte anhand eines Beispiel zeigen?
Danke Stread
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 28.12.08 22:16
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mo 29.12.08 20:34
OnEnter ist ja so ähnlich wie OnClick oder?
Wie weiß ich denn in welchem Feld ich bin und wie kann ich dann das Edit1 mit dem Edit2 oder Edit3 austauschen?
Delphi-Quelltext 1:
| Edit1.Text := Edit1.Text + '1'; |
Brauche ich dann noch ein OnExit?
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.12.08 20:37
OnEnter wird ausgelöst, wenn das entsprechende Feld den Eingabefokus erhalten hat. Wenn du auf den Button klickst, dann hat dieser den Eingabefokus und nicht mehr das Editfeld, und deshalb musst du das Editfeld speichern. Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| TFormX = class(TForm) ... private fCurrentEdit: TEdit; public end;
...
procedure EditXEnter(Sender: TObject); begin fCurrentEdit := TEdit(Sender); end; | Dann kannst du fCurrentEdit benutzen.
// EDIT:
Und nicht vergessen, dass du das auch initialisierst ggf. 
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mo 29.12.08 22:01
Warum fCurrentEdit? Geht auch nur CurrentEdit?
Warum muss ich es da
Delphi-Quelltext 1: 2: 3: 4: 5:
| private fCurrentEdit: TEdit; public end; |
und da
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure THauptfenster.Edit1Enter(Sender: TObject); var fCurrentEdit : TEdit; begin fCurrentEdit := TEdit(Sender); end; |
Nochmals angeben?
Stimmt das überhaupt mit dem var?
Quelltext 1:
| [DCC Hinweis] Rechner.pas(440): H2077 Auf 'fCurrentEdit' zugewiesener Wert wird niemals benutzt |
Wo muss ich das denn noch reintun? Da?
Delphi-Quelltext 1: 2: 3: 4:
| procedure THauptfenster.Button15Click(Sender: TObject); begin Edit1.Text := Edit1.Text + '1'; end; |
Statt dem Edi1.Text das fCurrentEdit ?
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.12.08 22:06
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mo 29.12.08 22:27
Für den Button 1
Delphi-Quelltext 1: 2: 3: 4:
| procedure THauptfenster.Button15Click(Sender: TObject); begin fCurrentEdit.Text := fCurrentEdit.Text + '1'; end; |
und es funktioniert.
Delphi-Quelltext 1: 2: 3:
| begin fCurrentEdit := TEdit(Sender); end; |
Das fCurrentEdit was in dem private Teil deklariert wurde wird als das Edit festgelegt wo der Sender, der Cursour ist.
Stimmt das?
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.12.08 22:29
Richtig, und dadurch, dass Sender verwendet wird, musst du das nicht für jedes Edit einzeln schreiben. Denn Sender enthält das Edit, das das Event ausgelöst hat.
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mo 29.12.08 23:15
Ich schreib mein neues Problem einfach hier rein. Passt ja zum Thema.
Ich möchte nun noch einen +/- (Vorzeichenwechsel Button) einbauen. Bis jetzt habe ich
Delphi-Quelltext 1: 2:
| begin fCurrentEdit.Text := '-' + fCurrentEdit.Text; |
Wie stelle ich das nun an dass wenn ich nochmal auf den Button klicke dass nun das - wieder verschwindet?
Die Zahl also wieder positiv ist, wie sie am Anfang war.
Auf müsste das Feld auf ein Minuszeichen hin suchen und dieses dann löschen.
Wie macht man das?
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.12.08 23:24
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Di 30.12.08 00:01
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 30.12.08 00:07
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Di 30.12.08 00:35
Beim ersten Code funktioniert gar nichts aber der ist eh ziemlich schwer zu verstehen weshalb ich den zweiten nehme 
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 30.12.08 00:36
Der erste Code entfernt nur ein vorhandenes Minus, der zweite kehrt es tatsächlich um. 
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Di 30.12.08 00:48
Dann brauche ich noch beim ersten Code etwas was das minus hinschreibt. Beim zweiten ist es ja eine normale Rechnung.
Wenn ich nun einen einzelne Zahl (die lezte) löschen möchte habe ich mir das gedacht
Delphi-Quelltext 1: 2: 3:
| begin fCurrentEdit.Text := fCurrentEdit.Text - ''; end; |
Aber das funktioniert nicht.
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 30.12.08 00:51
In diesem Fall ist der zweite Code ja ganz gut.
Zum Löschen des letzten Zeichens schau dir mal den Befehl Copy an, den ich ja ebenfalls benutzt habe um im ersten Code das erste Zeichen wegzulassen und nur den Rest zu kopieren.
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mi 31.12.08 00:22
Ich habs jetzt so gemacht
Delphi-Quelltext 1: 2: 3: 4:
| begin if (Length(fCurrentEdit.Text) > 0) then fCurrentEdit.Text := Copy(fCurrentEdit.Text, 1, Length(fCurrentEdit.Text) - 1); end; |
Aber ich könnte es aich so machen
Delphi-Quelltext 1: 2: 3: 4:
| begin if (Length(fCurrentEdit.Text) > 0) then fCurrentEdit.Text := Copy(fCurrentEdit.Text, -8, Length(fCurrentEdit.Text) - 1); end; |
Dass verstehe ich gerade nicht so. Der Code heißt doch: Wenn die Länge des momentanen Edits größer als 0 ist dann ist das momentane Edit ??? ... die Länge des momentanen Edits -1)
Was hat das 1 oder -8 damit zu tun? Wirrd damit bestimmt wo das -1 abgezogen wird?
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 31.12.08 00:27
Copy kopiert von dem angegebenen String ab der angegebenen Position die angegebene Anzahl an Zeichen.
Copy('Test', 2, 1) ergibt 'e', denn es wird ab Position 2 genau 1 Zeichen kopiert.
Wenn ich jetzt von Position 1 ab "Length(fCurrentEdit.Text) - 1" Zeichen kopiere, dann sind das alle bis auf das letzte.
Denn ich nehme ja die Anzahl der Zeichen insgesamt minus eins.
Und diese aus dem String kopierten Zeichen kommen dann wieder in das Editfeld hinein.
|
|