![]() |
transparente Progressbar oder Text in Progressbar
heyho,
ich hab mal wieder ne Frage:p Und zwa: ich schreibe derzeit an einem kleinen Downloadtool. Für dieses wollte ich nun eine Fortschrittanzeige entwickeln. Habe dafür dann die TProgressbar verwendet. Klappt auch ganz gut mit dem Fortschritt anzeigen. Doch nun stoße ich auf ein Problem. Ich wollte die Progressbar in etwa so wie die von FlashFXP ( ![]() Für die 2 Möglichkeit ( Text unter der Progressbar ), müsste diese transparent sein. Ich hab es zwa mal geschafft über Progressbar1.Brush.Style := BsClear; den Hintergrund 'transparent' zu machen, doch leider nicht den Statusbalken. Meine 2 Frage wäre also, wie ich den Statusbalken transparent machen kann. Sollte doch irgendwie möglich sein. Hab mal mit SetBkMode(ProgressBar1.handle, TRANSPARENT); probiert. Hat aber leider garnix bewirkt. Ich habe auch gehört, das es Farbcodes für transparente Farben gibt. Doch leider weiss ich nicht wie ich diese generieren soll. Vielleicht hat da ja jmd. auch ne Ahung:) Letzte Idee war für mich eine TGauge einzusetzen. Doch da scheiter ich leider schon beim implementieren der Komponente in das Form. Wo finde ich die TGauge überhaupt in Delphi? Wie man sieht, Fragen über Fragen. Ich hoffe, nein ich bete um eure Antwort... :hi: fröhliche Festtage janos |
Re: transparente Progressbar oder Text in Progressbar
Hai Janos,
TGauge findest Du bei der Registerkarte "Beispiele". Ansonsten wäre es wohl das einfachste das ganze mit einem Panel und einem TImage das auf diesem Liegt selber zu machen. Ansatzweise so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var rec : TRect; begin rec.Left := Image1.Left; rec.Top := Image1.Top; rec.Bottom := Image1.Top + Image1.Height; rec.Right := Image1.Width DIV 2; // 50 % Image1.Canvas.Brush.Color := clred; Image1.Canvas.Brush.Style := bsSolid; Image1.Canvas.FillRect(rec); Image1.Canvas.Brush.Style := bsClear; Image1.Canvas.TextOut(Image1.Width DIV 2,Image1.Height DIV 2,'blubb'); end; |
Re: transparente Progressbar oder Text in Progressbar
hey, danke! Das mit dem selbsterstellen gefällt mir schon mal ziemlich gut.
Ich versuch grad das ganze etz aber in ne Statuspanel von einer Statusbar reinzubringen. Leider hab ich oben immer ne weißen Rand. Der mir nicht so gut gefällt und das Bild stiecht auch ne bissel über das Statuspanel hinaus. Ne idee wie man den wegbekommt, bzw. es sauber in die Statusbar einfügen kann?:) Aktueller Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var rec : TRect; begin Image1.Parent := Statusbar1; Statusbar1.Perform(SB_GETRECT, 0, Integer(@rec)); Image1.Top := rec.Top; Image1.Left := rec.Left; Image1.Width := rec.Right - rec.Left; Image1.Height := rec.Bottom - rec.Top; Image1.Canvas.Brush.Color := $0000FAFA; Image1.Canvas.Brush.Style := bsSolid; Image1.Canvas.FillRect(rec); Image1.Canvas.Brush.Style := bsClear; Image1.Canvas.TextOut(Image1.Width DIV 2,Image1.Height DIV 2,'blubb'); end; grüße janos |
Re: transparente Progressbar oder Text in Progressbar
wenn du schon nen TRect hast kannst doch die progressbar direkt darein zeichnen ohne den umweg über das TImage zu machen
EDIT.... habs mal für die statusbar umgeschrieben
Delphi-Quellcode:
der part mit "fit into panel" könnte man bestimmt über ne api herausfinden.... aber dafür gibts andere spezialisten.... mir fällt die funktion grad nicht ein...
procedure TForm1.Button1Click(Sender: TObject);
var R, RBar : TRect; Position: Integer; Text: String; begin Position := 33; Text := '333kb/1000kb @ 33,12kb/s'; Statusbar1.Perform(SB_GETRECT, 0, Integer(@R)); //progress bar RBar := R; //fit into panel RBar.Left := RBar.Left + 1; RBar.Top := RBar.Top + 1; RBar.Right := RBar.Right - 2; RBar.Bottom := RBar.Bottom - 2; RBar.Right := RBar.Left + Ceil( (Position / 100) * (RBar.Right - RBar.Left) ); Statusbar1.Canvas.Brush.Color := clSkyBlue; Statusbar1.Canvas.FillRect(RBar); //progress text SetBkMode(Statusbar1.Canvas.Handle, TRANSPARENT); DrawText(Statusbar1.Canvas.Handle, PCHAR(Text), Length(Text), R, DT_SINGLELINE or DT_END_ELLIPSIS or DT_CENTER); end; grüße, paresy |
Re: transparente Progressbar oder Text in Progressbar
Wunderbar! Man dankt:) Sollte mich bei Gelegenheit vielleicht mal mehr mit TRect auseinander setzen. Anbei, jmd. ne Tutorial-Link für die Komponente?:D
Hab jetzt auch den Text skaliert. Tschuldigung, aber meine letzte Frage wäre nun noch. Bei dem über mir genannten Code verschwindet das mit FillRect und DrawText gezeichnete, sobald ich mein Form minimiere oder mal ne andere Anwendung vor den Statuspanel schiebe. Wisst ihr vielleicht woran das liegt? Wäre nett, wenn das ganze konstant nach dem zeichnen mir erhalten bleibt. Thanx to the replyer:) ne schöööön abend noch janos |
Re: transparente Progressbar oder Text in Progressbar
pack mal deinen code ins OnDrawPanel Event
Delphi-Quellcode:
und dann beim Panel ( dort wo du z.b. den Text der angezeigt werden soll reinschreibst ) die property Style auf 'psOwnerDraw'
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;
const Rect: TRect); var R, RBar : TRect; Position: Integer; Text: String; begin Position := 33; Text := '333kb/1000kb @ 33,12kb/s'; { Statusbar1.Perform(SB_GETRECT, 0, Integer(@R)); } //braucht man nicht mehr da das event uns schon mit dem RECT versorgt //progress bar R := Rect; RBar := R; //fit into panel RBar.Left := RBar.Left + 1; RBar.Top := RBar.Top + 1; RBar.Right := RBar.Right - 2; RBar.Bottom := RBar.Bottom - 2; RBar.Right := RBar.Left + Ceil( (Position / 100) * (RBar.Right - RBar.Left) ); Statusbar1.Canvas.Brush.Color := clSkyBlue; Statusbar1.Canvas.FillRect(RBar); //progress text SetBkMode(Statusbar1.Canvas.Handle, TRANSPARENT); DrawText(Statusbar1.Canvas.Handle, PCHAR(Text), Length(Text), R, DT_SINGLELINE or DT_END_ELLIPSIS or DT_CENTER); end; |
Re: transparente Progressbar oder Text in Progressbar
Danke dir paresy!:) Funktioniert. Ich hab aber gemerkt, das es fast egal ist ob ich DrawPanel einsetze oder nicht. Da durch die Fortschrittsanzeige der Balken sowieso im minimalen Abstand neu gezeichnet wird. Aber trozdem danke für die Info, mehr wissen ist besser als weniger:D
frohes neues janos |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz