Autor |
Beitrag |
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Sa 30.10.10 14:21
Hi, mal wieder ich
Ich habe die Gauge.pas von Delphi für mich etwas modifiziert, so das ich nur noch das drin haben, was ich speziell brauch und dafür einiges noch hinzugefügt.
Einstellen des Border grösse, Farbe, VordergrundFarbe, Textposition, TextFarbe, Zeilenumbruch.
Ich bin dabei auch ehrlich und sage gleich, viel abgekupfert
So richtig verstanden hab ich die Sache also nicht.
Mein eigentliches Problem, ich kann zwar die TextFarbe ändern, aber sie nimmt nicht die Farbe an die ich angebe.
Dazu mal die Procedure wo der Text geschrieben wird 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| procedure TGaugeButton.PaintAsText(AnImage: TBitmap; PaintRect: TRect); var S: String; Ss: Array[0..5] of String; X, Y, Fi, Ls, I : Integer; OverRect: TBltBitmap; begin S:= FGaugeCaption; Fi:= (Width div Font.Size) + 5; Ls:= length(S) div Fi;
for I:= 0 to Ls do begin Ss[i]:= LeftBStr(S, Fi); Delete(S, 1, Fi); end;
OverRect:= TBltBitmap.Create; try OverRect.MakeLike(AnImage); PaintBackground(OverRect, PaintRect); with OverRect.Canvas do begin
Brush.Style:= bsClear;
Font:= Self.Font; for I:= 0 to ls do begin with PaintRect do begin if I >= 1 then X:= (Left + Font.Size * 4 - 5) else X:= (Left + 8);
Y:= (Top + (Font.Size + 4) * I); end; TextRect(PaintRect, X, Y, Ss[I]); end; end; AnImage.Canvas.CopyMode:= cmSrcInvert; AnImage.Canvas.Draw(0, 0, OverRect); finally OverRect.Free; end; end; |
Wie gesagt, mehr gekupfert als verstanden. Darum fehlt jetzt natürlich der Überblick wo ich was ändern muss, das die TextFarbe die ist, die man angibt. Ohne, das nun wiederum irgend wo anders die Farben nicht mehr stimmen.
Was bei meinen Versuchen natürlich passiert ist!
Ich vermute, das ich den Text nicht auf das Original schreiben darf sondern, ein neues Bitmap erstellen muss und diese dann draufkopieren muss! Aber naja.... vielleicht gehts auch ohne, halt nur die richtige Stelle verändern?
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 30.10.10 14:43
ALF hat folgendes geschrieben : | Ich vermute, das ich den Text nicht auf das Original schreiben darf sondern, ein neues Bitmap erstellen muss und diese dann draufkopieren muss! |
Genau das passiert hier in dem Quelltext ja.
Durch das with musste ich zwar fünfmal hinschauen, weil es sowas von unübersichtlich wird, aber es sieht schon so aus als ob es so richtig sein sollte.
Da müsstest du im Debugger mal schauen was passiert. Wobei das bei dem Quelltext durch die ganzen with ne Qual wird...
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Sa 30.10.10 16:21
naja, nicht nur durch die vielen with kommt man durcheinander auch durch die vielen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| TheImage.Canvas.CopyMode:= cmSrcInvert; .... TheImage.Canvas.CopyMode:= cmSrcCopy;
AnImage.Canvas.CopyMode:= cmSrcInvert; ... AnImage.Canvas.CopyMode:= cmSrcCopy; | steht man echt auf den schlauch!
Bin aber dabei an sowas zu denken leider funct es auch nur Teilweise!
Delphi-Quelltext 1:
| font.Color:= font.Color and FBorderColor; |
denn zum Schluss muss ja weder die Farbe gelb als Beispiel rauskommen!
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 30.10.10 16:34
Ich benutze auch z.B. das HSB Farbsystem. Dann kann ich einfach die Helligkeit regulieren (heller oder dunkler), so dass die Schrift in Abhängigkeit vom Hintergrund immer gut lesbar ist. 
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Sa 30.10.10 17:33
So, hab ne Lösung.
Delphi-Quelltext 1:
| Font.Color:= Font.Color xor FBorderColor xor FBackColor xor $00000000; | Funct komischerweise
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 30.10.10 17:37
Damit bekommst du aber eine zufällige Farbe...
Und das bedeutet, dass die Eigenschaft Font vermutlich schlicht auf eine ungünstige Farbe gesetzt war. Deshalb hast du nichts von der Zuweisung gemerkt. Denn schließlich passiert hier sonst ja auch nix weiter...
Und das letzte xor mit Null kannst du dir sparen. Denn da kann sich nix bei verändern, überleg dir das mal mathematisch. 
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Sa 30.10.10 18:00
jaenicke hat folgendes geschrieben : | Und das letzte xor mit Null kannst du dir sparen. Denn da kann sich nix bei verändern, überleg dir das mal mathematisch.  |
jo hab ich auch gemerkt!
Aber das andere funct tatsächlich! Wenn ich jetzt FBorderColor oder FBackColor ändere bleibt die Farbe von Font, bzw wenn ich die Farbe im Font ändere kommt auch der Farbwert. Vorher kam irgend was anderes, als das was ich ausgewählt habe! Schau mal in die original Gauge.pas da steht Font.Color:= clWhite und angezeigt wird clBlack! Muss also was mit den ewigen cmSrcInvert zu tun haben. Da ich nun 2 Farben zusätzlich habe, FBorderColor + FBackcolor, muss ich ja irgendwie wieder auf die eigentliche Farbe von Font kommen und so scheint es zu funktionieren!
Allerdings hört es ab clActiveBorder auf, ab da ändert sich nix mehr was an Farben in der Liste steht. Aber wer nimmt die schon
P.S. HSB Farbsysthem, schon mal was gelesen und gesehen, zum Einsatz, naja, hab ich es noch nie geschafft müsste erst wieder nachschauen wo da was steht und wie man es macht
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 30.10.10 18:47
ALF hat folgendes geschrieben : | Muss also was mit den ewigen cmSrcInvert zu tun haben. |
Nutze es halt nicht. Dass man sowas auch sehr einfach selber hinbekommt, habe ich ja oben schon gezeigt...
ALF hat folgendes geschrieben : | P.S. HSB Farbsysthem, schon mal was gelesen und gesehen, zum Einsatz, naja, hab ich es noch nie geschafft müsste erst wieder nachschauen wo da was steht und wie man es macht |
In der DP gibts zwei Funktionen, die das jeweils umwandeln. Und wenn du ne HSB-Farbdarstellung hast, kannst du direkt den Helligkeitswert ändern und es wieder in eine Delphi-Farbe umwandeln.
// EDIT:
Und hier gibts von mir ne ganze komplett selbst gezeichnete Scrollbar:
www.delphi-forum.de/viewtopic.php?t=64090
Der Quelltext ist allerdings nicht so schön, da hab ich noch nicht ganz so auf die Formalien geachtet...
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Sa 30.10.10 19:00
jaenicke hat folgendes geschrieben : | ALF hat folgendes geschrieben : | Muss also was mit den ewigen cmSrcInvert zu tun haben. | Nutze es halt nicht..... |
wenn es so einfach wär, nur leider gibt es dann chaos bei den anderen Farben, Back und Border. Letztentlich währe es einfacher gewesen das Teil selbst neu zu schreiben, als
ein vorhandenes zu modifizieren
Mach ich vielleicht auch noch
PS. Hab die Funktionen schon gefunden in der DP. Mal sehen, ist alles ne Zeitfrage
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 30.10.10 19:08
|
|
|