Autor Beitrag
Stread
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 28.12.08 21:34 
Crossposts solltest du zumindest angeben... :roll:
forum.delphi-treff.d...wthread.php?p=183609

Zum Problem:
user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
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?

user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: 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.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:


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?

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

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.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 28.12.08 22:16 
user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
Ja sry ist so eine Angewohnheit von mir. Ich will erstmal sehen wie die unterschiedlichen Foren so sind bevor ich mich auf eins festlege.
Das an sich ist nicht so sehr das Problem, aber du solltest einen entsprechenden Link angeben. Damit man im anderen Forum nachschauen kann, ob schon eine Lösung gepostet wurde, bevor man selbst etwas schreibt.

Hier wird ein Beitrag deshalb nicht sofort geschlossen, wenn jemand einen Crosspost nicht angibt (anders als im Delphi-Treff wie du sicherlich bemerkt hast...), aber gerne wird es natürlich auch hier nicht gesehen...

user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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?
ausblenden Delphi-Quelltext
1:
xy.Text := xy.Text + 'Neuer Inhalt';					


user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
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.
Du könntest in OnEnter der Eingabefelder das aktuelle in einer globalen Variable speichern und dann dieses benutzen.

user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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?
Vielleicht hilft dir das:
www.delphi-forum.de/viewtopic.php?t=10555

Und noch ein Hinweis: Mehrere Fragen in einem Thema sind nicht besonders übersichtlich. Du solltest wenn möglich jeweils die Fragen einzeln stellen. Die dritte Frage passt thematisch nicht mehr zur ersten und auch nicht zum Titel. ;-)
Dass das sonst etwas unübersichtlich wird siehst du ja. ;-)
Stread Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: 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?

ausblenden Delphi-Quelltext
1:
Edit1.Text := Edit1.Text + '1';					


Brauche ich dann noch ein OnExit?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
TFormX = class(TForm)
...
private
  fCurrentEdit: TEdit;
public
end;

...

// Dies muss als OnEnter Ereignisbehandlung in alle drei Edits
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: Mo 29.12.08 22:01 
Warum fCurrentEdit? Geht auch nur CurrentEdit?

Warum muss ich es da
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
private
    fCurrentEdit: TEdit;
  public
    { Public-Deklarationen }
  end;


und da
ausblenden 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?

ausblenden Quelltext
1:
[DCC Hinweis] Rechner.pas(440): H2077 Auf 'fCurrentEdit' zugewiesener Wert wird niemals benutzt					


Wo muss ich das denn noch reintun? Da?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 29.12.08 22:06 
user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
Warum fCurrentEdit? Geht auch nur CurrentEdit?
Ja, natürlich, aber normalerweise stellt man bei privaten Feldern ein f vor um das zu kennzeichnen. So kann man auch nur ein f eingeben und hat dann (ggf. mit Strg + Leertaste) eine Liste aller privaten Felder.

user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
Warum muss ich es da [...] und da
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure THauptfenster.Edit1Enter(Sender: TObject);
var
fCurrentEdit : TEdit;

begin
fCurrentEdit := TEdit(Sender);
end;

Nochmals angeben?
Letzteres (das hervorgehobene) habe ich nie geschrieben. :roll:
So geht der Wert natürlich nach dem Ende von OnEnter verloren, da die lokale Variable benutzt wird statt dem gleichnamigen Feld unter private, deshalb auch der Hinweis des Compilers...

user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
Statt dem Edi1.Text das fCurrentEdit ?
Ja, stattdessen fCurrentEdit.Text.

Das Edit1Enter musst du unter Ereignisse bei OnEnter allen drei Edits zuweisen.
Stread Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: Mo 29.12.08 22:27 
Für den Button 1
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure THauptfenster.Button15Click(Sender: TObject);
begin
fCurrentEdit.Text := fCurrentEdit.Text + '1';
end;


und es funktioniert.


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 29.12.08 23:24 
ausblenden Delphi-Quelltext
1:
2:
if (Length(fCurrentEdit.Text) > 0and (fCurrentEdit.Text[1] = '-'then
  Delete(fCurrentEdit.Text, 11);
Oder du kannst es gleich als Zahl behandeln und beide Richtungen direkt machen, wenn eine Zahl drin steht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
  zahl: Double;
begin
  if TryStrToFloat(fCurrentEdit.Text, zahl) then
    fCurrentEdit.Text := -1 * FloatToStr(zahl);
Stread Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: Di 30.12.08 00:01 
Bei deinem ersten Code kommt der Fehler
ausblenden Quelltext
1:
[DCC Fehler] Rechner.pas(159): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden					


Bei deinem zweiten Code kommt der Fehler.
ausblenden Quelltext
1:
[DCC Fehler] Rechner.pas(161): E2010 Inkompatible Typen: 'string' und 'Integer'					
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 30.12.08 00:07 
Ja, stimmt. fCurrentEdit.Text kann ja nicht direkt editiert werden.
ausblenden Delphi-Quelltext
1:
2:
  if (Length(fCurrentEdit.Text) > 0and (fCurrentEdit.Text[1] = '-'then
    fCurrentEdit.Text := Copy(fCurrentEdit.Text, 2, Length(fCurrentEdit.Text) - 1);
Oder:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
  zahl: Double;
begin
  if TryStrToFloat(fCurrentEdit.Text, zahl) then
    fCurrentEdit.Text := FloatToStr(-1 * zahl);
Stread Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: 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 :D
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 30.12.08 00:36 
Der erste Code entfernt nur ein vorhandenes Minus, der zweite kehrt es tatsächlich um. ;-)
Stread Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: 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

ausblenden Delphi-Quelltext
1:
2:
3:
begin
fCurrentEdit.Text := fCurrentEdit.Text - '';
end;

Aber das funktioniert nicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: Mi 31.12.08 00:22 
Ich habs jetzt so gemacht

ausblenden Delphi-Quelltext
1:
2:
3:
4:
begin
if (Length(fCurrentEdit.Text) > 0then
    fCurrentEdit.Text := Copy(fCurrentEdit.Text, 1, Length(fCurrentEdit.Text) - 1);
end;


Aber ich könnte es aich so machen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
begin
if (Length(fCurrentEdit.Text) > 0then
    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.