Hallo,
schreibe gerade mit Lazarus zum ersten mal. Ich möchte die TProgressBar modifizieren:
1) Farbe ändern
2) Über die Progressbar etwas zeichnen
Jemand erfahrung?
TProgressBar modifizieren
Re: TProgressBar modifizieren
Darf ich fragen wozu? Die Standard-Komponenten sind versucht, soweit wie möglich nativ zu sein.Lyan hat geschrieben:Ich möchte die TProgressBar modifizieren:
Natürlich kannst du über oder auf einer normalen TProgressBar zeichnen. Dieses musst du aber selbst implementieren und das jeweils für das entsprechende OS.
Ich sehe zwei Lösungsansätze. Entweder du nimmst eine Progressbar-Komponente, die für das selber Zeichnen ausgelegt ist, wie z.B. http://wiki.freepascal.org/BGRAControls#TBCDProgressBar
oder du zeichnest die Progressbar selbst, z.B. mit einer TPaintBox.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: TProgressBar modifizieren
Michl hat geschrieben:Darf ich fragen wozu? Die Standard-Komponenten sind versucht, soweit wie möglich nativ zu sein.Lyan hat geschrieben:Ich möchte die TProgressBar modifizieren:
Natürlich kannst du über oder auf einer normalen TProgressBar zeichnen. Dieses musst du aber selbst implementieren und das jeweils für das entsprechende OS.
Ich sehe zwei Lösungsansätze. Entweder du nimmst eine Progressbar-Komponente, die für das selber Zeichnen ausgelegt ist, wie z.B. http://wiki.freepascal.org/BGRAControls#TBCDProgressBar
oder du zeichnest die Progressbar selbst, z.B. mit einer TPaintBox.
Ja TBCDProgressBar wird es dann wohl sein.
Übrigens noch eine andere frage, nicht sicher ob sich dazu ein Thread lohnt:
procedure TFormMain.FormCreate(Sender: TObject);
begin
bmp := TBGRABitmap.Create('C:\tmp\bmp.png');
bmp2 := TBGRABitmap.Create();
RotateAngle := 10;
end;
RotateAngle := RotateAngle + 20;
bmp2.SetSize(bmp.Width, bmp.Height);
bmp2.PutImageAngle(bmp2.Width div 2, bmp2.Height div 2, bmp, RotateAngle, bmp.Width div 2, bmp.Height div 2, 255, False, True);
ImageOsuRotate.Picture.Bitmap.Width := bmp2.Width;
ImageOsuRotate.Picture.Bitmap.Height := bmp2.Height;
ImageOsuRotate.Picture.assign(bmp2);
Ich versuche gerade testweise ein Bild mit dieser BGRAlib zu rotieren.
Dabei scheint bmp2 nicht cleaned zu werden. Liegt das am PNG?
Anfangs sieht das Bild in der Mitte so aus:
http://imgur.com/a/OcIve
Bei der ersten Rotation so:
http://imgur.com/a/Ia0O4
Und wenn man noch paar mal rotiert so:
http://imgur.com/a/LXFuk
Immer so weiter.
Ich müsste also (muss ich nicht, wäre auch wahnsinn) bmp2.free und bmp.create jedes mal ausführen um das problem mit meinem aktuellen kenntnisstand zu beheben.
Re: TProgressBar modifizieren
Bin kein Wissender bzgl. BGRABitmap und vielleicht geht es auch anders oder/und besser, so wäre aber eine Variante:
PS: Wenn du hier im Forum Code postest, ist er besser lesbar, wenn du diesen mit dem Highlighter FreePascal/Lazarus umklammerst.
Code: Alles auswählen
RotateAngle := RotateAngle + 20;
bmp2.SetSize(bmp.Width, bmp.Height);
bmp2.FillTransparent; // <-- diese Zeile einfügen
bmp2.PutImageAngle(bmp2.Width div 2, bmp2.Height div 2, bmp, RotateAngle, bmp.Width div 2, bmp.Height div 2, 255, False, True);
ImageOsuRotate.Picture.Bitmap.Width := bmp2.Width;
ImageOsuRotate.Picture.Bitmap.Height := bmp2.Height;
ImageOsuRotate.Picture.assign(bmp2);
PS: Wenn du hier im Forum Code postest, ist er besser lesbar, wenn du diesen mit dem Highlighter FreePascal/Lazarus umklammerst.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;