AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Bei dyn. erzeugten Labels die Text Farbe ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Bei dyn. erzeugten Labels die Text Farbe ändern

Ein Thema von Christian18 · begonnen am 21. Nov 2005 · letzter Beitrag vom 23. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

Bei dyn. erzeugten Labels die Text Farbe ändern

  Alt 21. Nov 2005, 16:45
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
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

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

  Alt 21. Nov 2005, 17:12
Hallo ,
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
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#3

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

  Alt 23. Nov 2005, 17:03
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

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

  Alt 23. Nov 2005, 17:07
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 von freak4fun:
Hallo ,
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


Das war genau die Lösung deines Problems.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#5

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

  Alt 23. Nov 2005, 17:08
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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#6

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

  Alt 23. Nov 2005, 17:09
Hallo Luckie

gibt es da keine bessere oder andere lösung???
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#7

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

  Alt 23. Nov 2005, 17:17
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;
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#8

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

  Alt 23. Nov 2005, 17:19
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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#9

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

  Alt 23. Nov 2005, 17:22
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
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#10

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

  Alt 23. Nov 2005, 17:22
[delphi]
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:59 Uhr.
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