Progressbar Color

Rund um die LCL und andere Komponenten
Antworten
fget
Beiträge: 8
Registriert: Sa 9. Aug 2014, 15:48

Progressbar Color

Beitrag von fget »

Hallo, ich bin seit heute Mitglied hier im Forum.

Ich habe eine Frage bzw. ein kleines Problem. Ich habe auf meinem Formular 3 Fortschrittsbalken die jeweils für Gesundheit , Hunger und Durst da sein sollen. Dementsprechend möchte ich sie einfärben. jedoch klappt das nicht. Ich habe testweise versucht einen Balken mit folgender Anweisung zu färben, jedoch ohne Erfolg.

Code: Alles auswählen

 
procedure TForm4.Button2Click(Sender: TObject);
begin
   IF colordialog1.Execute
   then progressbar1.Perform(1033,0, Colordialog1.color);
 
end;
 
Also man soll mit einem Colordialog die Farbe wählen.

In meinem USES-Abschnitt steht noch folgendes:

Code: Alles auswählen

uses
   Windows,Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, Buttons, PairSplitter, ColorBox, ComCtrls, CommCtrl;
Danke für jede Hilfe!

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Progressbar Color

Beitrag von Michl »

Ich kann da ein wahrscheinliches Fehlverhalten von TColorDialog unter Win7 (Lazarus 1.3 r46023 FPC 2.7.1 i386-win32-win32/win64) bestätigen.

Wähle ich eine Farbe im Mischkasten, wird keine Farbe übernommen. Erst wenn ich eine Standardfarbe wähle und danach eine beliebige Farbe zusammenstelle, wird diese übernommen (schon sichtbar in dem TColorDialog in den TEdits Rot, Grün, Blau).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

fget
Beiträge: 8
Registriert: Sa 9. Aug 2014, 15:48

Re: Progressbar Color

Beitrag von fget »

Mh, das ist komisch. Bei mir geht noch nicht einmal diese Vorgehensweise... :?

Bzw. geht es bei ihnen auf eine andere Weise? Also ohne den ColorDialog? Wenn man z.B. beim Formular-Aufruf eine bestimmte Farbe als Parameter in dieser Zeile angibt, ohne den ColorDialog. Funktioniert das?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Progressbar Color

Beitrag von Michl »

Ich habe da mal debuggt. Letztendlich wird abhängig von meinem 32bit-WidGetSet in

Code: Alles auswählen

class procedure TWin32WSColorDialog.ShowModal(const ACommonDialog: TCommonDialog);
...
      UserResult := ChooseColor(CC); //hier
auf eine Windows-API-Routine

Code: Alles auswählen

function ChooseColor(_para1:LPCHOOSECOLOR):WINBOOL; stdcall; external 'comdlg32' name 'ChooseColorA';
zurückgegriffen und diese kann durchaus verschiedene Verhaltensmuster je nach Win-Version haben. Damit wäre IMHO FreePascal unschuldig an der Misere.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

fget
Beiträge: 8
Registriert: Sa 9. Aug 2014, 15:48

Re: Progressbar Color

Beitrag von fget »

Whoa, ok also davon hab ich jetzt erstmal nur 1% Verstanden :lol: Aber mit anderen Worten, es geht nicht? Da versuch ich es mit einer anderen Komponente. Ein Shape oder so. Aber Danke für deine Antwort!

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Progressbar Color

Beitrag von Michl »

fget hat geschrieben:Also ohne den ColorDialog? Wenn man z.B. beim Formular-Aufruf eine bestimmte Farbe als Parameter in dieser Zeile angibt, ohne den ColorDialog. Funktioniert das?
Das hatte ich gar nicht gelesen -> ja das geht!

Ich habe mal das Testprojekt angehangen. Evtl. liegt bei Dir der Hund ja woanders (evtl. noch ein Repaint hinterherschicken und/oder Application.Processmessage k.A.)?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

fget
Beiträge: 8
Registriert: Sa 9. Aug 2014, 15:48

Re: Progressbar Color

Beitrag von fget »

Das ist irgendwie verhext. Wenn ich ihr Programm ausführe, eine Farbe auswähle mit dem Dialog, passiert nix, das gleiche mit dem zweiten Button. Ich habe Win7 64 Bit...

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Progressbar Color

Beitrag von Michl »

Ich benutze Lazarus 32bit auf einem Win7 64bit Rechner. Das Verhalten kann da durchaus anders sein. Auch vermute ich, dass die Methode "Perform" nicht auf allen Systemen (in den entsprechenden WidGetSets) implementiert ist. Wenn man ein anderes Verhalten einer systemabhängigen Komponente (die Farbe eines Controls zu ändern ist auf jeden Fall dazu zu zählen) erreichen will, ist das zumeist mit etwas bis sehr hohem Aufwand verbunden.

Möglicherweise ist das Selberzeichnen einer eigenen Progressbar oder eine komplett andere Lösung sinnvoller?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

fget
Beiträge: 8
Registriert: Sa 9. Aug 2014, 15:48

Re: Progressbar Color

Beitrag von fget »

Wie geht das von statten mit einer eigenen Progressbar? Oder besser gefragt, welche Komponente eignet sich dafür?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Progressbar Color

Beitrag von Michl »

Achso, was mir eben noch einfiel. Es kann auch daran liegen, dass Du möglicherweise ein "aero"-Theme von Windows nutzt. Da geht das mit der Farbe der Progressbar ändern sowieso nicht so. Die Progressbar besteht dann nicht aus einer Farbe sondern aus mehreren. Ich habe ein klassisches Theme eingestellt.
fget hat geschrieben:Wie geht das von statten mit einer eigenen Progressbar? Oder besser gefragt, welche Komponente eignet sich dafür?
Da bei mir die Progressbar einfach als ein farbiges Rechteck auf einem Panel dargestellt wird, wäre es ein leichtes, dieses nachzubauen.
Ich weiss nicht, ob es eine OwnerDrawProgressbar gibt bzw. ob diese in einer Komponentensammlung enthalten ist. Google hat da einiges ausgespuckt, da ich aber davon nichts bisher ausprobiert habe, kann ich auch keine Empfehlung geben.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

fget
Beiträge: 8
Registriert: Sa 9. Aug 2014, 15:48

Re: Progressbar Color

Beitrag von fget »

Mh, okay danke erstmal, dafür. Das mit dem Aero Desktop könnte wirklich stimmen! Ich habe nämlich sowas aktiviert, bzw. war schon so :D . Gut dann werde ich mal in Google bisschen weiter suchen. Danke dir!

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Progressbar Color

Beitrag von m.fuchs »

Du kannst ja mal den ProgressBar aus den BGRAControls nehmen (http://wiki.lazarus.freepascal.org/BGRA ... rogressBar).
Damit sollte das eigentlich gehen. Und es sieht auch etwas hübscher aus, was ja ein Kriterium bei einem Spiel sein kann.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

fget
Beiträge: 8
Registriert: Sa 9. Aug 2014, 15:48

Re: Progressbar Color

Beitrag von fget »

Ja das stimmt, es sieht wirklich besser aus. Allerdings frage ich mich wo ich die Komponente her bekomme? Google findet darüber leider nicht so viel. Muss man da ein extra Package downloaden? Entschuldigung wenn ich solche dummen Fragen stelle :lol:

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Progressbar Color

Beitrag von m.fuchs »

Dumme Fragen stellen ist grundsätzlich erlaubt. Aber zumindest sollte man vorher ein wenig recherchieren. Das muss in diesem Falle nicht einmal Google sein, schau dir den Link doch noch etwas genauer an.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

fget
Beiträge: 8
Registriert: Sa 9. Aug 2014, 15:48

Re: Progressbar Color

Beitrag von fget »

Achh ich bin doch blöd :D Hab den Link ganz oben übersehen. Okay super! Dankeschön! Das mit dem neuen Package geht super. da habe ich gleich ein paar weitere tolle Komponenten. Und einfärben kann man die Progressbar auch. Super. Top Hilfe :)

Antworten