Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bei dyn. erzeugten Labels die Text Farbe ändern (https://www.delphipraxis.net/57450-bei-dyn-erzeugten-labels-die-text-farbe-aendern.html)

Christian18 21. Nov 2005 15:45


Bei dyn. erzeugten Labels die Text Farbe ändern
 
Hallo,

ich habe mir eine kleine procedure geschriebn, womit ich ein Menü erzeugen lassen kann. Jetzt wollte ich das um eine Funktionalität erweitern. Wenn man auch das Label klickt, soll das entsprechende Label Rot gekennzeichnet werden und wenn man auch ein anderes Label klickt, dann sollen alle anderen auch wieder schwarz werden. Wie kann ich das machen??? Da das Menü dynamisch erzeugt wird, kann ich die Labels nicht direkt ansprechen. hat jemand eine andere idee???

Mit freundlichen Grüßen

Christian18

freak4fun 21. Nov 2005 16:12

Re: Bei dyn. erzeugten Labels die Text Farbe ändern
 
Hallo :hi:,
du kannst deine Label in einen Array verwalten und ihnen ein OnClick Ereignis zuweisen in dem du sie rot färbst. Beim Click auf ein Label machst du dann alle anderen Label im Array schwarz. ;)

MfG
freak

Christian18 23. Nov 2005 16:03

Re: Bei dyn. erzeugten Labels die Text Farbe ändern
 
Hallo,

da auf meine Frage noch nicht direkt geantwortet wurde, wollte ich nochmal alles Detailiert erklären. Also:

Ich habe eine Unit "UMain" und eine Unit "UProceduren". In der Unit UProceduren sind alle Proceduren drinn die ich öffters brauche als einmal. Ich habe zum Beispiel in der Unit "UProceduren" auch eine kleine Procedure drinn, die ein Menü erzeugen soll. Die erzeugung des Menüs funktioniert auch schon sehr gut. (die Procedure um das Menü zu erzeugen, hänge ich unten mit an). Jetzt wollte ich noch, das wenn man auch das Label klickt, das dann das entsprechende Label Rot wird. das wollte ich so machen. TLabel(Sender).Font.Color:=clRed; (Achso das habe ich bei dem OnClick ereignis zugewiesen. das funktioniert also auch schon) Wenn ich jetzt aber auf ein anderes Label klicke, dann wird das zwar rot, aber das andere nicht schwarz. Jetzt weiß ich das ich das andere auch erst schwarz machen muß. Da ich die Labels aber nicht direkt ansprechen kann weil sie dynamisch erstellt worden sind, habe ich ein kleines problem. ich habe hier im forum auch schon den tipp bekommen das über ein array zu machen. da finde ich aber das es nicht gerade die eleganteste lösung ist. gibt es auch noch eine andere??? Ich denke mal Ihr habt mein Problem was ich habe jetzt verstanden. Wenn nicht dann schreibt eure fragen und ich versuche dann zu antworten.

Und hier jetzt der Code:

Delphi-Quellcode:
procedure navi(a : Array of String; f : TForm; p : Array of Pointer);
  var i : Integer; // Schleifenvariable
      l : TLabel;  // TLabel
      m : TMethod;
begin
  for i:=1 to Length(a) do
    begin
      l:=TLabel.Create(f);
      l.Caption:=a[i - 1];
      l.Left:=15;
      l.Top:=100 + 25 * i;
      l.Cursor:=crHandPoint;
      l.Transparent:=True;
      m.Code:=p[i - 1];
      m.Data:=l;
      l.OnClick:=TNotifyEvent(m);
      l.Parent:=f;
    end;
end;
Und so mache ich den aufruf mit dem menü (navi)
Delphi-Quellcode:
procedure TFMain.FormCreate(Sender: TObject);
  var a : Array[0..4] of String;
      p : Array[0..4] of Pointer;
begin
  a[0]:='Menu1';
  a[1]:='Menu2';
  a[2]:='Menu3';
  a[3]:='Menu4';
  a[4]:='Menu5';

  p[0]:=@TFMain.Menu1;
  p[1]:=@TFMain.Menu2;
  p[2]:=@TFMain.Menu3;
  p[3]:=@TFMain.Menu4;
  p[4]:=@TFMain.Menu5;

  navi(a, FMain, p);
end;
Mit freundlichen Grüßen

Christian18

Luckie 23. Nov 2005 16:07

Re: Bei dyn. erzeugten Labels die Text Farbe ändern
 
Zitat:

Zitat von Christian18
Hallo,

da auf meine Frage noch nicht direkt geantwortet wurde, wollte ich nochmal alles Detailiert erklären. Also:

Und was war das:

Zitat:

Zitat von freak4fun
Hallo :hi:,
du kannst deine Label in einen Array verwalten und ihnen ein OnClick Ereignis zuweisen in dem du sie rot färbst. Beim Click auf ein Label machst du dann alle anderen Label im Array schwarz. ;)

MfG
freak

:shock:

Das war genau die Lösung deines Problems.

faux 23. Nov 2005 16:08

Re: Bei dyn. erzeugten Labels die Text Farbe ändern
 
Hallo!

Die Eigenschaft Delphi-Referenz durchsuchenControls des Parent-Objekts und die Eigenschaft Delphi-Referenz durchsuchenTag der Labeles können dir behilflich sein.

Beispiel um alle Labels mit Tag=1 scharz zu färben (musst du halt anpassen):
Delphi-Quellcode:
for i := 0 to Panel1.ControlCount - 1 do
  if Panel1.Controls[i] is TLabel then
    if (Panel1.Controls[i] as TLabel).Tag = 1 then
      (Panel1.Controls[i] as TLabel).Font.Color := clBlack;
Grüße
Faux

Christian18 23. Nov 2005 16:09

Re: Bei dyn. erzeugten Labels die Text Farbe ändern
 
Hallo Luckie

gibt es da keine bessere oder andere lösung???

Christian18 23. Nov 2005 16:17

Re: Bei dyn. erzeugten Labels die Text Farbe ändern
 
Hallo faux,

ich habe deinen lösungsvorschlag gerade mal getestet. ich finde ihn sehr gut. aber leider funktioniert er bei mir nicht. habe ich was falsch gemacht???

hier mein geänderter code:

Delphi-Quellcode:
procedure TFMain.Menu1(Sender: TObject);
  var i : Integer; // Schleifenvariable
begin
  // Menu1
  for i:=0 to FMain.ControlCount - 1 do
    begin
      if FMain.Controls[i] is TLabel then
        begin
          if (FMain.Controls[i] as TLabel).Tag = 1 then
            begin
              (FMain.Controls[i] as TLabel).Font.Color:=clWindowText;
            end;
        end;
    end;

  TLabel(Sender).Font.Color:=clRed;
end;

faux 23. Nov 2005 16:19

Re: Bei dyn. erzeugten Labels die Text Farbe ändern
 
Also grundsätzlich wäre es richtig. Eventuell können zwei Fehler sein:
1. Ist das Parent der Labels überhaupt FMain?
2. Ist das Tag der Labels überhaupt 1?

Grüße
Faux

Der_Unwissende 23. Nov 2005 16:22

Re: Bei dyn. erzeugten Labels die Text Farbe ändern
 
Hi,
wenn du nur zwischen zwei Labels hin und her wechselst (also es immer nur ein rotes gibt und das letzte rote schwarz wird), dann brauchst du nur eine globale Variable (also Klassenvariable geht bei klassen-methoden natürlich auch).
Dort speicherst du dein aktuell gewähltes Label (das, dass rot ist).
Wenn du nun auf ein Label klickst, machst du etwas wie
Delphi-Quellcode:
var redLabel : TLabel; // Kein Jonny W., sondern die globale Var
...
...
begin
  if assigned(redLabel) then
    begin
      redLabel.Font.Color := clBlack;
    end;
  if assigned(Sender) and (Sender is TLabel) then
    begin
      redLabel := Sender as TLabel;
      redLabel.Font.Color := clRed;
    end;
end;
Ansonsten ist es ein schönerer Weg ein TControlList statt einem Array zu benutzen

Gruß Der Unwissende

Christian18 23. Nov 2005 16:22

Re: Bei dyn. erzeugten Labels die Text Farbe ändern
 
[delphi]
Zitat:

Zitat von faux
Also grundsätzlich wäre es richtig. Eventuell können zwei Fehler sein:
1. Ist das Parent der Labels überhaupt FMain?
2. Ist das Tag der Labels überhaupt 1?

Grüße
Faux

Ich habe gerade mal geschaut.

habs so gemacht.
[pre]
ShowMessage(IntToStr(TLabel(Sender).Tag));
[/pre]

Und dann habe ich eine ausgabe bekommen. Ausgabe war 0


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz