Autor Beitrag
crystelane
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mo 05.06.06 18:19 
Keine ahnung ob das hier die richtige abteilung ist :shock: :Ich bin grad dabei bzw. fast fertig Monolpoly zu programmieren, nun will ich es natürlich noch verbessern und deswegen wollte ich fragen ob jemand mir sagen kann ob es möglkich ist wenn ich einzelne Panels mit tag durchnummeriere ob ich dann über diese tagzahlen auf den panel zugreifen kann und wenn ja wie? kurz meine Spielfigur soll sich fortbewegen :if ap:=i then spielfigur(ist ein image).parent:=p_.tag[i]? ist das irgendwie zu realisieren, falls es nciht sogar schon richtig ist??? Wäre nett wenn jemand helfen könnte..^^


Moderiert von user profile iconChristian S.: Topic aus Dateizugriff verschoben am Mo 05.06.2006 um 19:21
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mo 05.06.06 21:34 
Ja, kann man so machen. Wieso malst Du nicht einfach ein Bitmap, mit einem hübschen Spielbrett und zeichnest da einfach die aktuellen Spielfiguren, Hotels etc. rein. Zum Schluss kopierst Du das auf die Form und fertig.

_________________
Na denn, dann. Bis dann, denn.
Böser Borstel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154



BeitragVerfasst: Mi 07.06.06 12:00 
Ich würde den Tag einer Komponente nie mißbrauchen, den ein weiterer Programmierer, kann meistens nichts mit dieser Eigenschaft anfangen.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 07.06.06 12:10 
Was heißt denn da mißbrauchen? Die Eigenschaft Tag ist dafür da, dass man einen Integer-Wert darin speichert. Diesen kann man dann für irgendwas verwenden. Wenn z.B. mehrere Buttons/MenuItems/etc. (fast) dasselbe machen sollen, dann nutze ich dafür regelmäßig den Tag. Dann muss man nicht mit if Sender = ..else if Sender = ... else if Sender = arbeiten, sondern kann das übersichtlicher mit Case Sender.Tag of machen (Kommentare sollten dann aber schon hin).

In diesem Fall hier fände ich es aber auch sinniger, wenn man im Create der Form die Panels in ein Array packen würde, und dann die Panels nur über den Array-Index anzusprechen.

_________________
We are, we were and will not be.
Böser Borstel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154



BeitragVerfasst: Mi 07.06.06 12:17 
wenn sie die selben events haben, verwendet man eine actionlist.
klar kann man dort einen integerwert hinterlegen, aber bei mehreren programmierern, darf nur einer so denken. sonst zerhaut man sich den tag immer wieder gegenseitig. wie wars mit komponente ableiten und eigenschaft hinzufügen.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 07.06.06 12:26 
Mal ein Beispiel, wo ich den Tag benutze: Ich habe 10 Trackbars für einen Equalizer in einem mp3-Player. Jede davon steuert einen Frequenzbereich. Diese Werte sind in einem Array gespeichert, die ich im bei Onchange so verändere:
ausblenden Delphi-Quelltext
1:
EQWert[(Sender as TTrackbar).Tag] := (Sender as TTrackbar).Position;					

Dafür eine eigene Komponente abzuleiten, halte ich für albern.

_________________
We are, we were and will not be.
leoschabel
Hält's aus hier
Beiträge: 10

WIN 2000
Delphi 2007 Prof.
BeitragVerfasst: Mi 07.06.06 12:53 
Titel: Komponenten in der Tag-Eigenschaft speichern
Vielleicht hilft dieser Artikel aus dem EasyDelphiHelper:

Zitat:
Viele haben sich wahrscheinlich schon oft die Frage gestellt, welchen Sinn die Tag-Eigenschaft hat. Die Tag-Eigenschaft wurde im Typ TComponent implementiert, folglich besitzt jede Komponente diese Eigenschaft.

In ihr kann man nur Integer-Werte angeben. Auf den ersten Blick scheint dies nicht so sinnvoll zu sein. Besser wäre es, wenn man dort Zeichenketten, also Strings speichern könnte. Aber weit gefehlt. Dieser Artikel soll erklären, wie man mit der Tag-Eigenschaft richtig umgehen kann.

Wie schon erwähnt, lassen sich in der Eigenschaft nur Integer-Werte speichern. Wenn man bedenkt, dass Speicheradressen im Prinzip Integer-Werte sind, eröffnen sich ganz neue Möglichkeiten. Man kann nämlich nicht nur die Speicheradressen von Strings dort angeben, sondern von kompletten Objekten.

Folgendermaßen kann man Strings in der Tag-Eigenschaft speichern. Es wird ein Zeiger auf einen dynamisch erzeugten String dort abgelegt.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Tag:=Integer(NewStr('Hallo'));
end;

NewStr weist Speicherplatz für einen String zu. Als Result gibt die Funktion die Adresse zurück, die wir in der Tag-Eigenschaft speichern.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text:=PString(Button1.Tag)^;
end;

In Edit1.Text steht dann der String drin.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  DisposeStr(PString(Button1.Tag));
end;

Da wir Speicher reserviert haben, müssen wir diesen auch wieder freigeben. Dies geschieht Beispielsweise im Ereignis OnDestroy.

Moderiert von user profile iconjasocul: Beitragsformatierung überarbeitet.