Autor Beitrag
SnowballTwo
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 27.09.08 20:45 
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:

ausblenden Delphi-Quelltext
1:
Edit[i,k].OnChange:=TChange;					

TChange sieht syntaxmäßig folgendermaßen aus
ausblenden Delphi-Quelltext
1:
2:
3:
procedure TForm1.TChange(Sender: Tobject);
begin
end;

und wurde so deklariert:
ausblenden 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

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 27.09.08 20:57 
Mit Der Eigenschaft Sender kannst Du Deine Edits identifizieren.
Ein simples Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure GetKoordinaten(X,Y:Integer);
begin
   // Berechnungen mit den Koordinaten
end;

procedure TForm1.MyOnChange(Sender: TObject);
begin
 if (Sender is TEdit) then
  GetKoordinaten(TEdit(Sender).Left,
                 TEdit(Sender).Top);
end;

user profile iconSnowballTwo 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: 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-1div 9 die Zeilennummer.
Tag beginnend bei 1.


Wenn ich mich jetzt nicht ganz verstan habe, müsste es das bereits sein. cu


Zuletzt bearbeitet von Marc. am So 28.09.08 13:41, insgesamt 1-mal bearbeitet
SnowballTwo Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 27.09.08 21:24 
Was es nich alles gibt :D

vielen dank, habs über die vorher benannte methode gemacht, funzt prima!