Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - mehrere panel-captions ändern...?


liquid air - Sa 18.02.06 21:10
Titel: mehrere panel-captions ändern...?
also, ich als jemand der sich mit der delphi sprache net so auskennt möchte gerne wissen: wenn ich z.b. 30 panel oder so hab, die heissen jetzt mal panel1, panel2, panel3 usw., und will, dass panel5 - panel10 die caption ändern, würde ja naheliegen, dass ich sowas mache:


Delphi-Quelltext
1:
2:
for i:=5 to 10 do begin
 panel[i].caption:='X';


is ja aber klar dass das net geht. jetzt wollt ich mal ne alternative wissen, weil das ja bei 30 paneln oder so die ich ändern will ne ganz schöne schreibarbeit wäre...



und vllt noch kurz was zum hintergrund dass ihr wisst wozu ich das brauch:
es geht um ne simulation, nen teil aus nem rätselspiel. wir haben ein feld das besteht aus 11*12 feldern. alle sind weiss. wenn ich auf eins klick; dann wird dieses feld, eins darüber, eins darunter, eins links und eins rechts von dem feld (also insgesamt 5, also eine art kreuz, mit dem das man angeklickt hat in der mitte) schwarz. und wenn ich eins daneben klick dann werden die um das feld rum auch schwarz so wie ichs beschrieben hab, es sei denn sie sind es schon, dann werden sie weiss

das ziel is eben alle schwarz zu bekommen.

nun will ich aber net wissen wie ich das machen soll, das weiss ich schon bzw überleg ich mir noch, also à la ich klicke feld Z an und Z-1, Z+1 etc. werden schwarz...
ich würd nur gern wissen wie ich dass dann auf die panels übertragen kann direkt


danke schonmal für die hilfe :>


Marc. - Sa 18.02.06 21:12

such nach Suche in der Entwickler-Ecke FINDCOMPONENT


liquid air - Sa 18.02.06 21:35

**** ** ******** ****** ***** ****geil!! xD

alles in eine zeile und echt so einfach dass sogar ichs versteh ^^ vielen dank!!!


Marc. - Sa 18.02.06 21:40

gott, man könnt meinen du hättest im lotto gewonnen :lol:


liquid air - Sa 18.02.06 23:01

shit hab doch noch n prob ^^'

wie kann ich jetzt wissen welches panel ich angeklickt hab?? also ich will ja dem panel dass ich angeklickt hab n var zuweisen, sodass ich dann eben var-1, var+1 etc. ändern kann...

hab das so gemacht dass ich bei allen 132 panels bei onklick die procedure "Anklicken" gewählt hab; das is die hier:


Delphi-Quelltext
1:
2:
3:
4:
 for e:= 1 to 132 do begin
  if Sender=TPanel(findComponent('Panel'+IntToStr(e))) then P:=e;
 end;
 edit1.Text:=inttostr(e);


nun kommmt da seltsamerweise aber bei dem kontroll-editfeld immer 133 raus oO


Ironwulf - Sa 18.02.06 23:35

das ist auch recht einfach

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Panel1Click(Sender: TObject);
begin

end;

das ist die onklick prozedure eines panels, und Sender ist das panel auf das du geklickt hast
nochn kleines beispiel, wie du dann eine variable des panels veränderst:

Delphi-Quelltext
1:
TPanel(Sender).Left:= 20;                    


EDIT:
hatte nen klein dreher drin...


liquid air - So 19.02.06 00:27

sry ich steh grad aufm schlauch...ich glaub du hast da was verwechselt...? also, ich hab die eine procedure extern selbstgeschrieben, und über den objectinspektor hab ich den allen panels auf einmal bei ONKLICK diese procedure zugewiesen...nun will ich, je nachdem, über welches panel ich auf die procedure zugreife, die var P nach der Zahl dieses panels definieren, also wenn ich z.b. über panel 5 zugreife, soll P:=5 sein...

weiss net ob ich mich grad dümmer dranstell als die polizei erlaubt, aber ich verstehs grad net was du geschrieben hast ^^'

falls es doch richtig is, kannst du mir bitte genau in die procedur das einsetzen was du meinst? wie gesagt hab da net so den plan von sendern...


Lannes - So 19.02.06 01:05

Hallo,
user profile iconliquid air hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
 for e:= 1 to 132 do begin
  if Sender=TPanel(findComponent('Panel'+IntToStr(e))) then P:=e;
 end;
 edit1.Text:=inttostr(e);


nun kommmt da seltsamerweise aber bei dem kontroll-editfeld immer 133 raus oO
Du merkst Dir in der Variable P die Nummer des Panels, gibst aber im Test-Edit die Variable e aus.
Weil deine Schleife bis zum Ende läuft und der Schleifenzähler die Variable e ist, erhältst Du eben 133 als Ergebnis.

Ich nehme an das user profile iconIronwulf so etwas ähnliches gemeint hat:

Delphi-Quelltext
1:
2:
3:
4:
5:
var P          : Integer;
    sPanelName : String;
begin
  sPanelName := TPanel(Sender).Name;
  P := StrToInt(Copy(sPanelName,6,MAXINT));

Damit kann man, indem die ersten Zeichen des Panelnamen abgetrennt werden,
an die Nummer kommen, und das ohne Schleife :wink:


liquid air - So 19.02.06 01:11

omg ich bin echt so dumm xDD ja klar natürlich...jetzt gehts lol was fürn kackfehler ^^

(aber trotzdem: ich lass doch nur bis 132 zählen...warum kommt dann 133 raus? >.<)

DANKE!!


Lannes - So 19.02.06 01:25

Hallo,
Nach Ende jeden Schleifendurchgangs wird der Zähler um 1 erhöht.
Anhand dieses Zählers wird dann überprüft ob die Bedingung(in deinem Fall 132) überschritten ist, wenn ja, wird die Schleife beendet. Lass mal eine Schleife im Einzelschritt-Modus durchlaufen und schau dir dabei die Zählvariable an.


Ironwulf - So 19.02.06 01:58

mmh naja ich hat die frage faksch verstanden, sry