Autor Beitrag
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Do 14.07.05 15:45 
Hallo, wie könnte man bei einem TLabel eine automatische Farbanpassung machen damit das TLabel auch auf dunklen Hintergründen zu sehen ist!

Ah jetzt fällts mir ein, also man könnte den Invers modus nehmen und irgendwie auf TImage den Text ausgeben! Stimmts?


Zuletzt bearbeitet von JRegier am Do 14.07.05 15:48, insgesamt 1-mal bearbeitet
ScorpionKing
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1150

Win XP

BeitragVerfasst: Do 14.07.05 15:46 
Setzt die Option Transparent bei dem Label auf True!

MfG, ScorpionKing!

_________________
Aus dem Urlaub zurück!
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Do 14.07.05 15:50 
user profile iconScorpionKing hat folgendes geschrieben:
Setzt die Option Transparent bei dem Label auf True!

MfG, ScorpionKing!


Das habe ich ja auch aber wenn ich einen Dunklen hintergrund wähle und das Label ist schwarz kann man das Label nicht sehen!

Also du hast meine Frage falsch verstanden! Jetzt überleg mal wie könnte man das machen wenn der Hintergrund mit stetig wechselnden
Farben ist da wäre ein Invers Modus angebracht! Aber wie?
ScorpionKing
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1150

Win XP

BeitragVerfasst: Do 14.07.05 15:54 
Nein, du setzt das Label immer auf transparent und änderst durch den Font immer die Schriftfarbe (bei schwarzem Hintergrund, weiße Farbe, etc.)

_________________
Aus dem Urlaub zurück!
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Do 14.07.05 15:55 
Das dürfte mich TLabel nicht gehen, da du immer nur eine Farbe verwenden kannst (Font.Color). Du wirst dann also ein Canvas nehmen müssen und mittels TextOut und SrcInvert (oder ähnlichem) den Text entsprechend anpassen.

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
ScorpionKing
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1150

Win XP

BeitragVerfasst: Do 14.07.05 16:01 
user profile iconmaxk hat folgendes geschrieben:
Das dürfte mich TLabel nicht gehen, da du immer nur eine Farbe verwenden kannst (Font.Color). Du wirst dann also ein Canvas nehmen müssen und mittels TextOut und SrcInvert (oder ähnlichem) den Text entsprechend anpassen.


Echt? Ich dachte, dass geht so, wie ich es geschrieben habe.
Kannst du mal einen Beispiel-Source posten?

_________________
Aus dem Urlaub zurück!
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Do 14.07.05 16:10 
Auf die Schnelle:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
const Text='Hallo Welt';
begin
 with Image1.Canvas do begin
  Font.Size:=20;
  Font.Name:='Arial';
  with TBitmap.Create do try
   Canvas.Font.Assign(Font);
   Width:=TextWidth(Text);
   Height:=TextHeight(Text);
   Canvas.TextOut(0,0,Text);
   Canvas.CopyMode:=dstInvert;
   Canvas.CopyRect(Rect(0,0,Width,Height),Canvas,Rect(0,0,0,0));

   CopyMode:=srcInvert;
   CopyRect(Rect(100,100,100+Width,100+Height),Canvas,Rect(0,0,Width,Height));
  finally
   Free;
  end;
 end;
end;
Zeichnet den Text invertiert genau auf das Image.

Gruß,
maxk

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
ScorpionKing
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1150

Win XP

BeitragVerfasst: Do 14.07.05 16:11 
Super Code, danke!
Ich habe es eben ausprobiert, funktioniert auch!

_________________
Aus dem Urlaub zurück!
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Do 14.07.05 19:18 
Habe noch immer Fehler drin Programm bleibt hängen, vieleicht kann ja einer sagen woran es liegt?

Hier Code: Ich benutze eine TempImage weil ich verschiedene Grafiken benutze um die dann in TempImage zu laden
und dann dem Bitmap der eigentlichen Image die angezeigt wird und darauf auch der XOR ed Text draufkommen soll
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
 TempImage.Visible := True;
 TempImage.Picture.LoadFromFile(OpenPictureDialog.FileName);
 ProjektAboutImage.Picture.Bitmap.Assign(TempImage.Picture.Graphic);  // wenn ich das so nicht mache kann ich keine Zeichenoperationen ausführen
 TempImage.Visible := False;

 ...
 ...
 ...

 with TempImage.Canvas do // hier bleibt der stehen
 begin
 FillRect(0,0,Width,Height);   // ob man das hier unbedingt machen muß? Ich hatte das versucht weil Fehler auftrat
 Font.Assign(ProjektInfoMemo.Font);
 H := TextHeight(ProjektInfoMemo.Lines.Strings[0]);
 for I := 0 to ProjektInfoMemo.Lines.Count-1 do
 TextOut(0,I*H,ProjektInfoMemo.Lines.Strings[I]);
 end;
 ProjektAboutImage.Canvas.CopyMode := cmSrcInvert;
 ProjektAboutImage.Canvas.CopyRect(Rect(35,50,416,241), TempImage.Canvas, Rect(0,0,TempImage.Width, TempImage.Height));


Also ich bekomme immer die Fehlermeldung "Kein Bild vorhanden" wenn ich auf Canvas zugreife? Liegt es daran das ich das vorher
mit Assign in das andere Image kopiert habe? Oder dass ich da ein Picture geladen hatte?
Was müßte ich machen Repaint würde auch nicht helfen oder?
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 14.07.05 19:37 
ich vertstehe nicht ganz warum du TemImage als Image benutz... täte es nicht ein TempImage vom Typ TBitmap? :?
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Do 14.07.05 20:43 
user profile iconTilman hat folgendes geschrieben:
ich vertstehe nicht ganz warum du TemImage als Image benutz... täte es nicht ein TempImage vom Typ TBitmap? :?


Ja wenn ich z.B. TImage.Picture.Bitmap.LoadFromFile(..) eine Graphic die nicht ein
bmp ist dann gibts Fehlermeldung! Das wird vermutlich auch der Fall sein wenn ich TBitmap
verwende!
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 14.07.05 20:48 
user profile iconJRegier hat folgendes geschrieben:

Ja wenn ich z.B. TImage.Picture.Bitmap.LoadFromFile(..) eine Graphic die nicht ein
bmp ist dann gibts Fehlermeldung! Das wird vermutlich auch der Fall sein wenn ich TBitmap
verwende!


Stimmt, ich dachte es geht nur um BMPs. Sorry, da kann ich dir nicht helfen, aussrr das deine Prozedur mit all dem assign eher merkwürdig aussieht. Wenn du genau beschreibst was du willst kann ich dir vielleicht helfen.
ScorpionKing
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1150

Win XP

BeitragVerfasst: Do 14.07.05 20:50 
Es gibt aber auch Image1.Picture.LoadFromFile()!

_________________
Aus dem Urlaub zurück!
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Do 14.07.05 21:39 
Wie ich vorher geschrieben hatte:
user profile iconJRegier hat folgendes geschrieben:

Also ich bekomme immer die Fehlermeldung "Kein Bild vorhanden" wenn ich auf Canvas zugreife? Liegt es daran das ich das vorher
mit Assign in das andere Image kopiert habe? Oder dass ich da ein Picture geladen hatte?
Was müßte ich machen Repaint würde auch nicht helfen oder?


Also wenn ich diese Operationen auf ein neu erzeugtes Image ausführe in den ich kein Picture geladaen hatte gabs je keine Probleme!
Also ich vermute das ich einfach mal ein Image neu erzeugen muß wenn ich das Brauche! Ich versuche es und schreibe dann das Ergebnis!
Dolphi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Do 14.07.05 21:51 
Titel: Re: Label automatische Farbanpassung an BackgroundImage? Inv
user profile iconJRegier hat folgendes geschrieben:
Hallo, wie könnte man bei einem TLabel eine automatische Farbanpassung machen damit das TLabel auch auf dunklen Hintergründen zu sehen ist!

Ah jetzt fällts mir ein, also man könnte den Invers modus nehmen und irgendwie auf TImage den Text ausgeben! Stimmts?



Hmm, vielleicht hab ich ja was falsch verstanden, aber bei mir (Delphi 7) funzt das hier:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure ChangeLabelColor;
var
  i : integer;
begin
  for i := 0 to Form1.ControlCount - 1 do begin
    if Form1.controls[i] is TLabel then begin
      TLabel(Form1.controls[i]).font.Color :=  ColorToRGB(Form1.Color) xor $00FFFFFF;
    end;
  end;
end;
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Do 14.07.05 22:18 
user profile iconJRegier hat folgendes geschrieben:

Also wenn ich diese Operationen auf ein neu erzeugtes Image ausführe in den ich kein Picture geladaen hatte gabs je keine Probleme!
Also ich vermute das ich einfach mal ein Image neu erzeugen muß wenn ich das Brauche! Ich versuche es und schreibe dann das Ergebnis!


Super es klappt, keine Fehlermeldung wenn ich eine TImage bei bedarf erzeuge in die ich noch keine Picture geladen habe!
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Fr 15.07.05 11:05 
user profile iconmaxk hat folgendes geschrieben:
Auf die Schnelle:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
const Text='Hallo Welt';
begin
 with Image1.Canvas do begin
  Font.Size:=20;
  Font.Name:='Arial';
  with TBitmap.Create do try
   Canvas.Font.Assign(Font);
   Width:=TextWidth(Text);
   Height:=TextHeight(Text);
   Canvas.TextOut(0,0,Text);
   Canvas.CopyMode:=dstInvert;
   Canvas.CopyRect(Rect(0,0,Width,Height),Canvas,Rect(0,0,0,0));

   CopyMode:=srcInvert;
   CopyRect(Rect(100,100,100+Width,100+Height),Canvas,Rect(0,0,Width,Height));
  finally
   Free;
  end;
 end;
end;
Zeichnet den Text invertiert genau auf das Image.

Gruß,
maxk


Ich bin noch nicht ganz zufriden mit dem Ergebnis! Also könnte man z.B. irgendwie so machen das z.B. ab einem bestimten Farbwert
Dunkel nur z.B gelb angezeigt wird und ab einem bestimmten Farbwert Hell einfach z.B Schwarz angezeigt wird.
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Fr 15.07.05 16:44 
Das wird nicht mit Boardmitteln gehen, da du hier erst die Farbwerte jedes Pixels analysieren müsstest. Das dauert sehr viel länger als die Benutzung der oben gezeigten Funktionen. Ich würde davon also abraten - abgesehen davon, dass ich auf die schnelle keinen besseren Weg wüsste, als jeden Pixel einzeln durchzugehen :roll:

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.