TProgressBar modifizieren

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Lyan
Beiträge: 5
Registriert: So 12. Feb 2017, 15:00

TProgressBar modifizieren

Beitrag von Lyan »

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?

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

Re: TProgressBar modifizieren

Beitrag von Michl »

Lyan hat geschrieben:Ich möchte die TProgressBar modifizieren:
Darf ich fragen wozu? Die Standard-Komponenten sind versucht, soweit wie möglich nativ zu sein.

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; 

Lyan
Beiträge: 5
Registriert: So 12. Feb 2017, 15:00

Re: TProgressBar modifizieren

Beitrag von Lyan »

Michl hat geschrieben:
Lyan hat geschrieben:Ich möchte die TProgressBar modifizieren:
Darf ich fragen wozu? Die Standard-Komponenten sind versucht, soweit wie möglich nativ zu sein.

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.

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

Re: TProgressBar modifizieren

Beitrag von Michl »

Bin kein Wissender bzgl. BGRABitmap und vielleicht geht es auch anders oder/und besser, so wäre aber eine Variante:

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; 

Antworten