Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit zur Laufzeit erzeugten Edits
SnowballTwo - Sa 27.09.08 20:45
Titel: Problem mit zur Laufzeit erzeugten Edits
habe mich nun extra hier angemeldet da ich mich seit Stunden im Kreis drehe
mein Problem ist Folgendes: ich habe ein Array von TEdit objekten, diese werden alle zur Laufzeit beim Erstellen von Form1 in einer for-Schleife erzeugt, und mit ihren Eigenschaften abgesegnet.
Nun brauchte ich für jedes Editfenster ein OnChange event.
ich versuchte dies über:
Delphi-Quelltext
1:
| Edit[i,k].OnChange:=TChange; |
TChange sieht syntaxmäßig folgendermaßen aus
Delphi-Quelltext
1: 2: 3:
| procedure TForm1.TChange(Sender: Tobject); begin end; |
und wurde so deklariert:
Delphi-Quelltext
1: 2:
| type procedure TChange(Sender: Tobject); |
funktioniert auch alles wunderbar soweit!
und jetzt das malheur:
ich brauche in der funktion TChange die Koordinaten des Editfensters das gerade geändert wurde, also z.b. Edit[5,5], um damit zu arbeiten. Ich habe nun verzweifelt versucht die Variablen
A: irgendwie über Globale Variablen zu übergeben
B: Als Parameter zu übergeben --> hab mir dazu auch einige tutorials angesehn, aber schon wenn ich TChange = procedure(...) of object; schreibe meckert er über das '=' Zeichen hinter TChange...fehlt mir irgendeine bestimmte unit?
C: habe ich mich gefragt ob ich eventuell herausfinden könnte welches Feld gerade den Focus hat, und darüber die koordinaten bekommen
ich hoffe mein problem kommt klar rüber, helft einem ahnungslosen Anfänger! ;(
habe mein bisheriges wissen von
hier [
http://www.delphipraxis.net/topic45205.htmlurl]
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
Marc. - Sa 27.09.08 20:57
Mit Der Eigenschaft Sender kannst Du Deine Edits identifizieren.
Ein simples Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure GetKoordinaten(X,Y:Integer); begin end;
procedure TForm1.MyOnChange(Sender: TObject); begin if (Sender is TEdit) then GetKoordinaten(TEdit(Sender).Left, TEdit(Sender).Top); end; |
SnowballTwo hat folgendes geschrieben: |
C: habe ich mich gefragt ob ich eventuell herausfinden könnte welches Feld gerade den Focus hat, und darüber die koordinaten bekommen |
Stichwort
OnEnter.
Aber ich frage mich gerade, wofür der ganze Aufwand? Berechnest Du nicht zu beginn die Positionen der einzelnen Edits aus? Nun könntest Du doch verbunden mit dem Tag die Koordinaten in einer Liste speichern. ;)
Grüße,
Marc
SnowballTwo - Sa 27.09.08 21:07
Das sieht schon sehr gut aus, allerdings gibt es ein kleines Missverständnis im Bezug auf "koordinaten"
natürlich ist deine interpretation generell richtig, allerdings meinte ich damit nicht die position auf dem Bildschirm, sondern die Position im Array
sicherlich könnte ich aus der koordinatenposition die du mir hier veranschaulicht hast auch die position im array bestimmen, aber ich glaube das wäre nicht ideal.
ich erklärs so: ich habe 9*9 editfenster auf dem screen (ja, ich versuch mich an nem sudoku)
somit wäre z.b. Edit[5,5] das Edit welches exakt in der mitte liegt.
gibt es eine möglichkeit die beiden '5' en aus Sender auszulesen? sie sind ja keine eigenschaften wie top oder left...
edit: in einem array speichern...mh, ja...aber was nutzt mir das, inwiefern soll ich das array dann verwenden, bzw was soll ich da reinschreiben, für jedes Feld gleich die koordinaten? Das is doch im prinzip auch nix anderes als sie nochmal auszurechnen, halt weniger rechenleisungsintensiv...
Marc. - Sa 27.09.08 21:14
Weise jedem Edit beim Erzeugen eine Nummer über den Tag zu (Edit.Tag).
Via abs( Tag-Nummer - (Tag-Nummer div 9) * 9) bekommst Du die Spaltenummer. (Abs gibt den Betrag zurück.)
Mit (Tag-Nummer-1) div 9 die Zeilennummer.
Tag beginnend bei 1.
Wenn ich mich jetzt nicht ganz verstan habe, müsste es das bereits sein. cu
SnowballTwo - Sa 27.09.08 21:24
Was es nich alles gibt :D
vielen dank, habs über die vorher benannte methode gemacht, funzt prima!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!