Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Eigenschaften eines Dynamisch erzeugten Panels


Grafix - Sa 24.04.10 18:04
Titel: Eigenschaften eines Dynamisch erzeugten Panels
Hallo nochmal,

ich habe X zur Laufzeit erzeugte Panel, und das folgendermaßen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TFStart.FormShow(Sender: TObject);
var
  MyPanel: TPanel;
begin

    for I := 1 to X do
    begin
      MyPanel := TPanel.Create(Self);
      MyPanel.Parent := GBPlayer1;
      MyPanel.Name := 'PanelX' + IntToStr(I+(K*X)-X) + 'Player1';
      MyPanel.Caption := IntToStr(I+(K*X)-X);
      MyPanel.Tag := I+(K*X)-X;
      MyPanel.OnMouseEnter := PanelXOnMouseEnter;
    end;
end;


dieses PanelXOnMouseEnter Event möchte ich nun definieren:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TFStart.PanelXOnMouseEnter(Sender: TObject);
  var MyPanel: TPanel;
  Pfad : String;
begin
  //MyPanel.Color := clBtnHighlight; --> funktioniert so nicht, alle Panels inklusive des Hintergrunds färben sich//
  Pfad := 'PanelX' + IntToStr(TPanel(Sender).Tag) + 'Player1';
  Pfad.Color := clBtnHighlight; // funktioniert auch nicht, da Pfad ja kein Objekt ist
end;


Wo ist der Fehler? Mir ist schon klar dass das mit dem Pfad so nicht geht, ich komme nur nicht drauf...
Danke für die Hilfe
Lg Grafix


elundril - Sa 24.04.10 18:12

das kannst du es ja genauso machen wie mit dem Tag, also:


Delphi-Quelltext
1:
TPanel(Sender).Color := clBtnHighlight;                    


generell würd ich aber die Procedure in folgendes einfassen:


Delphi-Quelltext
1:
2:
3:
if (Sender is TPanel) then begin
  //deine procedure
end;


Und ich würde dir raten nicht clBtnHighlight zu nehmen da diese Farbe vom Betriebssystem abhängig ist und bei anderen PC einen anderen Wert haben könnte. Dadurch sieht dann das Programm nicht mehr so aus wie du es gern hättest.

lg elundril


Grafix - Sa 24.04.10 19:14

erstmal danke fürs freundliche und schnelle beantworten meiner vielen Fragen =)

Leider klappt's aber noch nicht so ganz:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TFStart.PanelXMouseEnter(Sender: TObject);
begin
  if (Sender is TPanel) then
  begin
    TPanel(Sender).Color := clRed;
    ShowMessage(IntToStr(TPanel(Sender).Tag));
  end;
end;


er Zeigt mir nun die Zahl an, die ich mit Panel.Tag zugewiesen habe, aber er ändert leider nicht die Farbe...


ALF - Sa 24.04.10 21:19

Bin ganz :?
Wo kommt beim standart TPanel das onMouseEnter her!? Ich habe es nicht drin in den Ergeignissen!

Delphi-Quelltext
1:
MyPanel.OnMouseEnter := PanelXOnMouseEnter;                    

Ich würde dafür

Delphi-Quelltext
1:
MyPanel.OnMouseDown := PanelXOnMouseEnter;                    

oder

Delphi-Quelltext
1:
MyPanel.OnClick := PanelXOnMouseEnter;                    

nehmen. Vielleicht funct es dann!?
Gruss Alf


elundril - Sa 24.04.10 22:04

Oder vielleicht OnMouseMove. Wäre vielleicht auch eine alternative.

Oder man leitet sich aus dem Panel eine eigene Komponente ab und erweitert diese um OnMouseEnter.

lg elundril


Grafix - Sa 24.04.10 22:20

Hm, keine der Varianten funktioniert...

Eine Komponente Abzuleiten traue ich mir nicht zu... Liegt der Fehler möglicherweise bei dem TPanel(Sender).Color... ?


Mitmischer 1703 - Sa 24.04.10 22:29

Du könntest (Sender as TPanel).Color verwenden, aber das dürfte auch nicht viel ändern...

Bist du schon mal mit dem Debugger durchgegangen, ob er überhaupt in die Funktion springt oder was bei der Zuweisung passiert?


Grafix - Sa 24.04.10 22:33

Funktioniert leider auch nicht - das merkwürdige ist: wenn ich in die gleiche Prozedur mit reinschreibe:

ShowMessage(IntToStr(TPanel(Sender).Tag));
zeigt er mir den Tag des Pannels an - nur führt er anscheinend nicht den Befehl zum Farben-ändern aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TFStart.PanelXMouseMove(Sender: TObject);
begin
  if (Sender is TPanel) then
  begin
    (Sender as TPanel).Color := clRed;
    ShowMessage(IntToStr(TPanel(Sender).Tag));
  end;
end;


Mitmischer 1703 - Sa 24.04.10 22:44

Du musst auch noch beim Erstellen ParentBackground auf false setzen


Grafix - Sa 24.04.10 22:50

Das war tatsächlich der Fehler *freu* - kA wieso aber anscheinend ist das nötig mit parentBackground... Ich habs bei einem manuell erstellten Panel ausprobiert - da hat alles funktioniert - offensichtlich ist parentBackground dort standartmäßig auf False gesetzt...

DANKE!!!!