Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ProgressBar Farbe lässt sich nicht ändern (https://www.delphipraxis.net/105052-progressbar-farbe-laesst-sich-nicht-aendern.html)

BullsEye 14. Dez 2007 18:49


ProgressBar Farbe lässt sich nicht ändern
 
Auf nen Button klick (bis jetzt ist das noch so*) soll die Farbe zweier Progress Bars geändert werden.
Aber irgendwie geht das nicht. Oder gibts da noch vllt ne andere Möglichkeit?
Bis jetzt hab ich folgendes:

Delphi-Quellcode:
uses CommCtrl;


procedure TfrmEinstellungen.btnPGBFarbeClick(Sender: TObject);
begin
      frmMain.pbLeft.Perform(PBM_SETBARCOLOR, -1, clblue);
    frmMain.pbRight.Perform(PBM_SETBARCOLOR, -1, clblue);
end;
Andere Farben gehen auch nicht

Delphi-Quellcode:
clgreen
clorange
clred
clgreen
clblack
---------------------------
*soll später noch durch ne ComboBox bzw durch ne PaintBox geändert werden

SirThornberry 14. Dez 2007 19:13

Re: ProgressBar Farbe lässt sich nicht ändern
 
die Progressbar nimmt doch die Farbe von ihrem Parent an oder liege ich jetzt völlig daneben?

MrKnogge 14. Dez 2007 19:17

Re: ProgressBar Farbe lässt sich nicht ändern
 
Hast du das XP-Manifest in dein Programm eingebunden?

Progman 14. Dez 2007 19:31

Re: ProgressBar Farbe lässt sich nicht ändern
 
TProgressBar scheint gar keine Eigenschaft BarColor oder Color zu haben. Jedenfalls hab ich die hier (D2007) nicht gefunden. Man könnte aber TGauge nehmen, da kann man die Farben nach Belieben ändern.

BullsEye 14. Dez 2007 19:48

Re: ProgressBar Farbe lässt sich nicht ändern
 
Zitat:

Zitat von Progman
TProgressBar scheint gar keine Eigenschaft BarColor oder Color zu haben. Jedenfalls hab ich die hier (D2007) nicht gefunden. Man könnte aber TGauge nehmen, da kann man die Farben nach Belieben ändern.

Im Objectinspector lässt diese sich auch nicht ändern.
Zitat:

Zitat von MrKnogge
Hast du das XP-Manifest in dein Programm eingebunden?

Ja hab ich.

EDatabaseError 14. Dez 2007 19:56

Re: ProgressBar Farbe lässt sich nicht ändern
 
Bei den Schweizern (swissdelphicenter.ch) gibts ein Code wie man eine Progressbar farbig bekommt...

BullsEye 14. Dez 2007 20:24

Re: ProgressBar Farbe lässt sich nicht ändern
 
mit Hilfe von SwissDelphiCenter bin ich nun auf folgenden Code bekommen

Delphi-Quellcode:
 
frmMain.pbLeft.Brush.color := clTeal;
  SendMessage(frmMain.pbLeft.Handle, PBM_SETBARCOLOR, 0, clblue);
  frmMain.pbRight.Brush.color := clTeal;
  SendMessage(frmMain.pbRight.Handle, PBM_SETBARCOLOR, 0, clblue);
Allerdings scheint der auch nicht wirklich zu funtkionieren?!

Muetze1 14. Dez 2007 21:03

Re: ProgressBar Farbe lässt sich nicht ändern
 
Wenn du das XP Manifest nutzt, dann wird das Theme verwendet, sprich: Der ProgressBar wird von Windows anhand des Themes gezeichnet. Somit musst du dir entweder selber einen Progressbar schreiben bzw. komplett einen Balken selber malen.

Luckie 14. Dez 2007 22:16

Re: ProgressBar Farbe lässt sich nicht ändern
 
Gerade getestet:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, commctrl;

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject);
begin
  SendMessage(Progressbar1.Handle, PBM_SETBARCOLOR, 0, clRed);
end;

end.
Funktioniert. Es muss an etwas anderem liegen. Vermutlich an dem vorhanden Manifest, wie Muetze schon gesagt hat.

BullsEye 15. Dez 2007 05:04

Re: ProgressBar Farbe lässt sich nicht ändern
 
Hm ich werd da nochmal schauen.
Aber danke euch erstmal ;)

Die Muhkuh 15. Dez 2007 07:07

Re: ProgressBar Farbe lässt sich nicht ändern
 
Zitat:

Zitat von BullsEye
Hm ich werd da nochmal schauen.
Aber danke euch erstmal ;)

Alternativ kannst Du, wie schon erwähnt, eine TGauge verwenden, die kannst Du farblich anpassen.

bitsetter 15. Dez 2007 07:44

Re: ProgressBar Farbe lässt sich nicht ändern
 
Zitat:

Zitat von Muetze1
Wenn du das XP Manifest nutzt, dann wird das Theme verwendet, sprich: Der ProgressBar wird von Windows anhand des Themes gezeichnet. Somit musst du dir entweder selber einen Progressbar schreiben bzw. komplett einen Balken selber malen.

Hallo,

oder mit
Delphi-Quellcode:
uses uxTheme;

  if uxTheme.IsThemeActive then
    uxTheme.SetWindowTheme(Progressbar1.Handle, '', '');
das Theme für die Progressbar abschalten.

BullsEye 15. Dez 2007 18:27

Re: ProgressBar Farbe lässt sich nicht ändern
 
Delphi-Quellcode:
uses uxTheme, commctrl;

procedure TfrmEinstellungen.btnFarbeClick(Sender: TObject);
begin
  if uxTheme.IsThemeActive then
    uxTheme.SetWindowTheme(frmMain.pbLeft.Handle, '', '');
    uxTheme.SetWindowTheme(frmMain.pbRight.Handle, '', '');
  frmMain.pbLeft.Brush.color := clTeal;
  SendMessage(frmMain.pbLeft.Handle, PBM_SETBARCOLOR, 0, clblue);
  frmMain.pbRight.Brush.color := clTeal;
  SendMessage(frmMain.pbRight.Handle, PBM_SETBARCOLOR, 0, clblue);
end;
So gehts!!
Danke dir bitsetter!!!

DeddyH 15. Dez 2007 18:30

Re: ProgressBar Farbe lässt sich nicht ändern
 
Fehlt da nicht ein begin...end?

dominikkv 15. Dez 2007 18:32

Re: ProgressBar Farbe lässt sich nicht ändern
 
Zitat:

Zitat von BullsEye
Delphi-Quellcode:
uses uxTheme, commctrl;

procedure TfrmEinstellungen.btnFarbeClick(Sender: TObject);
begin
  if uxTheme.IsThemeActive then
    uxTheme.SetWindowTheme(frmMain.pbLeft.Handle, '', '');
    uxTheme.SetWindowTheme(frmMain.pbRight.Handle, '', '');
  frmMain.pbLeft.Brush.color := clTeal;
  SendMessage(frmMain.pbLeft.Handle, PBM_SETBARCOLOR, 0, clblue);
  frmMain.pbRight.Brush.color := clTeal;
  SendMessage(frmMain.pbRight.Handle, PBM_SETBARCOLOR, 0, clblue);
end;
So gehts!!
Danke dir bitsetter!!!

fehlt da nicht ein begin..end?
edit: lol...genau der gleiche wortlaut xD

DeddyH 15. Dez 2007 18:39

Re: ProgressBar Farbe lässt sich nicht ändern
 
:lol: XD

BullsEye 16. Dez 2007 02:06

Re: ProgressBar Farbe lässt sich nicht ändern
 
nunja, das mag sein aber es läuft ersteinmal, und das ist das wichtigste^^
Aber ich glaube wenn wir nur einen Fall haben ist ein Begin & End unwichtig oder?

xZise 16. Dez 2007 08:44

Re: ProgressBar Farbe lässt sich nicht ändern
 
Naja...
Das ist fast so als würdest du sagen:
Delphi-Quellcode:
if MyObject.IstApfel then
  MyObject.Form := Rund;
  MyObject.Color := clRed;
Ergebnis:
Egal, was MyObject ist, er wäre immer rot!
Delphi kann ja nicht wissen, was er alles machen soll, wenn die Bedingung erfüllt ist.
Ein Beispiel:
Delphi-Quellcode:
if myObject.IstApfel then
MyObject.Form := Rund;
MyObject.Color := clRed;
if myObject.IstLebensmittel then
myObject.Essen;
Was soll er machen, wenn "IstApfel" und "IstLebensmittel" wahr sind?
Was, wenn nur "IstLebensmittel" wahr ist?
Und was wenn gar nichts wahr ist xD?

Und Einrückungen zählen nicht ;) Die ignoriert der Compiler!

Zwar funktioniert es so, aber die zweite ProgressBar hat nie einen Skin.

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz