Autor Beitrag
muetzenjoe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win XP / Win Vista
# Delphi 6 Enterprise; # HTML Editor Phase 5; # Ulead Gif Animator 5;
BeitragVerfasst: Sa 01.05.10 02:41 
Hi@all...

Ich habe in einer Groupbox eine anhäufung von genau 120 Panels. (12x10 Panels à 30x30pix)
Jetzt soll man jedes Panel anklicken können und die caption des Panels soll endweder leer oder X sein.(also '' oder 'X').

Jetzt stehe ich gerade auf dem Schlauch und möchte nicht 120 einzelne onclick ereignisse ala
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
...
procedure TForm6.Panel1Click(Sender: TObject);
begin
  if panel1.caption='' then panel1.caption:='X' else panel1.caption:='';
end;

procedure TForm6.Panel2Click(Sender: TObject);
begin
  if panel2.caption='' then panel2.caption:='X' else panel2.caption:='';
end;
...

in den Code schreiben müssen. Könnte mir jemand kurz erklären wie ich das eventuell mit
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
...
findcomponent('Panel'+sender) as TPanel 
...
oder
...
TPanel(Sender)
...

oder vielleicht noch etwas besserem machen könnte? Ich wäre wirklich dankbar!

MfG
muetzenjoe

_________________
Sind wir nicht alle ein wenig Newbee???
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 01.05.10 02:52 
Klick mal im Objektinspektor in das Feld neben dem OnClick steht und dann auf den Pfeil. Wenn du einmal nen OnClick-Eventhandler geschrieben hast, kannst du den dann da auswählen. Das heißt du schreibst für Panel1 etwas ins OnClick und die restlichen 119 bekommen mit der methode den gleichen Code.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
muetzenjoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win XP / Win Vista
# Delphi 6 Enterprise; # HTML Editor Phase 5; # Ulead Gif Animator 5;
BeitragVerfasst: Sa 01.05.10 02:57 
Jo die Idee war schon recht gut aber(!) dann wird immer nur das erste Panel geändert und nicht das jeweils gedrückte!

_________________
Sind wir nicht alle ein wenig Newbee???
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 01.05.10 03:17 
Dann darfst du natürlich nicht Panel1.Caption := 'X'; schreiben sondern musst folgendes reinschreiben:

ausblenden Delphi-Quelltext
1:
2:
if (Sender is TPanel) then
  (Sender as TPanel).Caption := 'X';


so sollte es dann funktionieren. ;) Eigentlich hatte ich ja gehofft keine CopyPasta servieren zu müssen.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
muetzenjoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win XP / Win Vista
# Delphi 6 Enterprise; # HTML Editor Phase 5; # Ulead Gif Animator 5;
BeitragVerfasst: Sa 01.05.10 03:33 
Das funktioniert wirklich schon fast aber es kommt wieder ein aber(!) *g

Ich hatte es ja so, dass erst geprüft wird ob das caption leer oder X ist:
ausblenden Quelltext
1:
if panel1.caption='' then panel1.caption:='X' else panel1.caption:='';					

Nun habe ich, unwissend wie ich ja nun einmal bin, versucht folgendes aus deinem Vorschlag zu machen:
ausblenden Quelltext
1:
2:
if (Sender is TPanel).caption='' then (Sender as TPanel).Caption := 'X' else
if (Sender is TPanel).caption='X' then (Sender as TPanel).Caption := '';


Kann auch an mir liegen aber ich schiebe es einfach mal auf die Uhrzeit *schäm

_________________
Sind wir nicht alle ein wenig Newbee???
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 01.05.10 03:41 
Uiuiui, das (Sender is TPanel) bedeutet ja nix anderes als das du überprüfst ob der Sender eine Instanz vom der Klasse TPanel ist. Wenn du dann auf die Eigenschaften und Methoden des Panels zugreifen willst musst du den Sender auf ein TPanel casten, was du mit dem (Sender as TPanel) machst. ;)

ich würd das ganze ja so aufbauen: da du nur 2 zustände hast brauchst du die zweite if-abfrage ja eigentlich nicht. Deswegen kommt dann gekürzt folgendes raus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  if (Sender is TPanel) then begin
    if (Sender as TPanel).Caption = '' then
      (Sender as TPanel).Caption := 'X'
    else (Sender as TPanel).Caption := '';
  end;


Einwandfreie Ausführung des Codes wurden durch Tierversuche bestätigt. Bei diesen Versuchen kamen keine Tiere zu schaden. ;)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
muetzenjoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win XP / Win Vista
# Delphi 6 Enterprise; # HTML Editor Phase 5; # Ulead Gif Animator 5;
BeitragVerfasst: Sa 01.05.10 03:57 
Super!

Vielen Dank für deine Mühe und Gedult zu solch später Stunde!

Jetzt klappt es einwandfrei!

Thx

_________________
Sind wir nicht alle ein wenig Newbee???
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Sa 01.05.10 15:04 
120 fest erstellte Panells sind aber ein dicker Konzeptfehler.
Erstelle die Panels doch einfach dynamisch, dann hast du auch viel weniger Arbeit.