Autor Beitrag
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: 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 :roll:
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
ausblenden volle Höhe Delphi-Quelltext
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:
//dies Procedure ist auch original aus der Gauge.pas nur halt modifiziert.
procedure TGaugeButton.PaintAsText(AnImage: TBitmap; PaintRect: TRect);
var
  S: String;
  Ss: Array[0..5of 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);   //<--- Original Procedure der Gauge.pas
    PaintBackground(OverRect, PaintRect);  //<--- Original Procedure der Gauge.pas etwas modifiziert

    with OverRect.Canvas do
    begin

      Brush.Style:= bsClear;

      Font:= Self.Font;
      //Font.Color:= clWhite;

      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(00, 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.10.10 14:43 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
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. :nixweiss:

Da müsstest du im Debugger mal schauen was passiert. Wobei das bei dem Quelltext durch die ganzen with ne Qual wird...
ALF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Sa 30.10.10 16:21 
naja, nicht nur durch die vielen with kommt man durcheinander auch durch die vielen
ausblenden 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!
ausblenden Delphi-Quelltext
1:
font.Color:= font.Color and FBorderColor; // oder(xor,or) oder FBackColor					

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Sa 30.10.10 17:33 
So, hab ne Lösung.
ausblenden Delphi-Quelltext
1:
Font.Color:= Font.Color  xor FBorderColor xor FBackColor xor $00000000;					
Funct komischerweise :gruebel:

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Sa 30.10.10 18:00 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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 :wink:

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 :roll:

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.10.10 18:47 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
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...

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
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 :roll:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Sa 30.10.10 19:00 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
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 :mrgreen:
Mach ich vielleicht auch noch :zwinker:

PS. Hab die Funktionen schon gefunden in der DP. Mal sehen, ist alles ne Zeitfrage :wink:

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.10.10 19:08 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Letztentlich währe es einfacher gewesen das Teil selbst neu zu schreiben, als
ein vorhandenes zu modifizieren :mrgreen:
Ich weiß, deshalb hatte ich ja das entsprechende Beispiel gebracht. ;-)

Da kann man dann auch schöne Farbverläufe reinbringen und so.