Autor |
Beitrag |
JRegier
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: 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
      
Beiträge: 1150
Win XP
|
Verfasst: Do 14.07.05 15:46
Setzt die Option Transparent bei dem Label auf True!
MfG, ScorpionKing!
_________________ Aus dem Urlaub zurück!
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Do 14.07.05 15:50
ScorpionKing 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
      
Beiträge: 1150
Win XP
|
Verfasst: 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
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: 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
      
Beiträge: 1150
Win XP
|
Verfasst: Do 14.07.05 16:01
maxk 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
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Do 14.07.05 16:10
Auf die Schnelle: 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
      
Beiträge: 1150
Win XP
|
Verfasst: Do 14.07.05 16:11
Super Code, danke!
Ich habe es eben ausprobiert, funktioniert auch!
_________________ Aus dem Urlaub zurück!
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: 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
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); TempImage.Visible := False;
... ... ...
with TempImage.Canvas do begin FillRect(0,0,Width,Height); 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
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: 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 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Do 14.07.05 20:43
Tilman 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
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Do 14.07.05 20:48
JRegier 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
      
Beiträge: 1150
Win XP
|
Verfasst: Do 14.07.05 20:50
Es gibt aber auch Image1.Picture.LoadFromFile()!
_________________ Aus dem Urlaub zurück!
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Do 14.07.05 21:39
Wie ich vorher geschrieben hatte:
JRegier 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
      
Beiträge: 18
|
Verfasst: Do 14.07.05 21:51
Titel: Re: Label automatische Farbanpassung an BackgroundImage? Inv
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Do 14.07.05 22:18
JRegier 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 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Fr 15.07.05 11:05
maxk hat folgendes geschrieben: | Auf die Schnelle: 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
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: 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 
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|