Autor Beitrag
liquid air
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 76



BeitragVerfasst: Sa 18.02.06 21:10 
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:

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

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 18.02.06 21:12 
liquid air Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 76



BeitragVerfasst: Sa 18.02.06 21:35 
**** ** ******** ****** ***** ****geil!! xD

alles in eine zeile und echt so einfach dass sogar ichs versteh ^^ vielen dank!!!
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 18.02.06 21:40 
gott, man könnt meinen du hättest im lotto gewonnen :lol:
liquid air Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 76



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: Sa 18.02.06 23:35 
das ist auch recht einfach
ausblenden 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:
ausblenden Delphi-Quelltext
1:
TPanel(Sender).Left:= 20;					


EDIT:
hatte nen klein dreher drin...
liquid air Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 76



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: So 19.02.06 01:05 
Hallo,
user profile iconliquid air hat folgendes geschrieben:
ausblenden 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:
ausblenden 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:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
liquid air Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 76



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Ironwulf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: So 19.02.06 01:58 
mmh naja ich hat die frage faksch verstanden, sry