| Autor |
Beitrag |
Evil-Zwergie
Hält's aus hier
Beiträge: 15
win xp
Delphi
|
Verfasst: Mo 23.03.09 09:25
hallo liebe community
ich hab folgendes problem:
hab ein Editfeld und buttons von 0-9(geben diese zahlen im edit wieder)
nun möchte ich eine zahlenkette schreiben können(bei mir wird der wert gelöscht und neuer geschrieben)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin
end;
procedure TForm1.Button1Click(Sender: TObject); begin With form1.edit1 do text := Chr(49) end; |
nur ein kleiner ausschnitt!
- mein edit (zur zeit ausgestellt)
- button für die zahl 1
vielen dank für die bearbeitung im voraus
Moderiert von Narses: Titel geändert.Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 23.03.2009 um 11:16
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 23.03.09 09:31
Also mir fällt grad nur folgendes ein:
Delphi-Quelltext 1:
| Form1.Edit1.Text := Form1.Edit1.Text + inttostr(Beliebiger Wert); |
oder was noch funktioniert, allerdings Denke ich sprengt das den Rahmen:
Delphi-Quelltext 1:
| PostMessage(Form1.Edit1.Handle, WM_KEYDOWN, VK_NUMPAD1, 0); |
damit würdest du dann einen Tastendruck im Editfeld simulieren.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 23.03.09 11:21
Moin!
Lösche mal alle deine Ereignismethoden für die Buttons. Dann machst du einen Doppelklick auf dem ersten Button und fügst diesen Code ein:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text := Edit1.Text +(Sender as TButton).Caption; end; | Dann wählst du den zweiten Button aus, drückst Shift (festhalten) und markierst alle weiteren Buttons dazu. Jetzt im ObjektInspektor beim Ereignis OnClick aus dem Dropdownmenü die Methode des ersten Buttons (für alle anderen) einstellen. Damit wird bei einem Klick auf einen der Buttons immer diese eine Methode aufgerufen.
In der Methode bekommst du im Parameter Sender das Control übergeben, welches das Ereignis ausgelöst hat. Wir gehen mal davon aus, dass das hier nur ein Button tut und lesen dann dessen Beschriftung aus, um diese zum Editfeld hinzuzufügen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Di 24.03.09 09:52
Hi,
folgendes wäre noch möglich dann müsstest du dich auch nicht um die Onclick Ereignisse kümmern:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| private procedure Btn_Zahl_Add(var MyHandle: HWND); Procedure AppMessage(var Msg: TMsg; var Handled: Boolean); public procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean); begin if (msg.message = WM_KEYDOWN) then if (Msg.wParam = vk_Return) or (Msg.wParam = VK_SPACE) then Btn_Zahl_Add(msg.Hwnd); if (msg.message = WM_LBUTTONDOWN) or (msg.message = WM_LBUTTONDBLCLK) then Btn_Zahl_Add(msg.HWND); end;
procedure TForm1.Btn_Zahl_Add(var MyHandle: HWND); var mysender: TObject; var SNDCPT: String; begin fügt den Text hinzu mysender := FindControl(MyHandle); try SNDCPT := (mysender as TButton).Caption; if (StrToInt(SNDCPT) >= 0) and (StrToInt(SNDCPT) <= 9) then Edit1.Text := Edit1.Text + SNDCPT; except end; end;
procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage := AppMessage; end; |
Das ganze hat den Vorteil das du dich danach um nichts mehr Kümmern musst fals du einen Button rausnimmst hinzufügst oder ähnliches. Soll auch ein Koma oder ähnliches hinzugefügt werden musst du das bei der if Frage beachten z.b.
Delphi-Quelltext 1:
| SNDCPT = ',' then .... |
mfg nic
|
|
Evil-Zwergie 
Hält's aus hier
Beiträge: 15
win xp
Delphi
|
Verfasst: Mo 30.03.09 08:31
das wird wohl etwas zu aufwendig für meinen unterricht sein^^
hab die version narses genommen
thx an alle die geantwortet ham
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 30.03.09 08:58
Dachte ich mir dann auch, für den Unterricht? Dann ist sie zu komplex stimmt. Bitteschön =)
mfg nic
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 30.03.09 09:41
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 30.03.09 11:10
Nope du hast da was falsch verstanden.
Das Try except ist mit absicht gewählt.
Wenn du deine Jetzt testen würdest hättest du ruck zuck ein Error. =)
( außer das Try except soll da noch ausenrum stehen )
Muss dazu sagen das ich das kurz abgetippt habe und da passieren flüchtigkeits Denkfehler danke für deinen Hinweis.
In dem moment dachte ich sicher wenn ich schon ein Try except habe kann ich das auch so lösen. ^^
Wenn du es so meinst klar:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| try SNDCPT := (mysender as TButton).Caption; if (StrToIntDef(SNDCPT, -1) >= 0) and (StrToIntDef(SNDCPT, 10) <= 9) then Edit1.Text := Edit1.Text + SNDCPT; except end; |
Frage am Rande programmiere erst seit 6 Monaten, vorher nie was damit zu tun gehabt und was empfiehlt sich?
Try except oder deine Variante was ist verträglicher ? bzw. schneller?
mfg Nic
ps: Man lernt immer wieder was neues 
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 30.03.09 11:22
thepaine91 hat folgendes geschrieben : | | Das Try except ist mit absicht gewählt. |
Das hätte ich mir fast gedacht
thepaine91 hat folgendes geschrieben : | | Wenn du deine Jetzt testen würdest hättest du ruck zuck ein Error. =) ( außer das Try except soll da noch ausenrum stehen ) |
Nur, um das nochmal klar zu stellen: Jede Exception ist ein Fehler. Ein try ... except end; versteckt ihn nur, aber er tritt trotzdem auf, und solch ein Konstrukt ist ehr unsauber (mir hat das auch erstmal einer erklären müssen, vorher hab ich genau das gleiche auch gemacht  )
thepaine91 hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| try SNDCPT := (mysender as TButton).Caption; if (StrToIntDef(SNDCPT, -1) >= 0) and (StrToIntDef(SNDCPT, 10) <= 9) then Edit1.Text := Edit1.Text + SNDCPT; except end; | |
Nein, lass das try ... except end; weg. Ich hab mir nicht genau angeschaut, wo noch ein Fehler auftreten kann, aber jetzt fällt es mir auch auf: Du prüfst nicht, ob mysender auch ein Button ist. Stattdessen quetschst du es in die Vorlage eines Buttons, und erst wenn es von selber wieder herausspringt, lässt du es sein. Stattdessen könntest du einfach mal beide - mysender und TButton anschauen, und herausfinden, ob die ineinanderpassen. Das geht so:
Delphi-Quelltext 1:
| if mysender is TButton then ... |
Jetzt brauchst du auch gar keine Fehlerbehandlung mehr, denn es sollten keine mehr auftreten (außer natürlich echter Ausnahmen  ).
thepaine91 hat folgendes geschrieben : | Frage am Rande programmiere erst seit 6 Monaten, vorher nie was damit zu tun gehabt und was empfiehlt sich?
Try except oder deine Variante was ist verträglicher ? bzw. schneller? |
try RaiseAnException except end; ist nicht nur unsauber, sondern auch etwas langsamer, da ein Ausnahmefall auftritt und Delphi das nötige einleitet. Obwohl es gar nicht nötig wäre. Also, zum merken: In die except-Klausel gehört immer etwas rein. Sonst macht das ganze keinen Sinn.
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 30.03.09 12:49
Super, Vielen dank für die Erklärung dann werde ich in zukunft darauf achten.
Klingt auch sehr einleuchtend.
(Mysender is Tbutton) danach hab ich verzweifelt gesucht... hatte von dem ganzen vorher keine Ahnung  hab mir das über die Delphi Hilfe zusammen gebastelt und nichts gefunden um das ganze zu prüfen.
Aber ich bin ja froh wenn ich was lernen kann.
Funktioniert auch einwandfrei mit deiner Methode.
Eine Frage zwingt sich mir schon länger auf und zwar:
Kann man herausfinden welche Klasse mysender ist? (Also Tbutton oder Trichedit usw... )
Vielleicht hat darauf ja noch jemand eine Antwort.
mfg nic
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 30.03.09 13:13
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 30.03.09 13:17
Moin!
@ thepaine91: bitte erstelle für eine neue Frage auch ein neues Topic, da die Diskussion mehrerer Fragen in einem Topic für gewöhnlich für Verwirrung und Durcheinander sorgt. Daher:
*geschlossen* cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.
Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.
|
|