AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi transparente Progressbar oder Text in Progressbar
Thema durchsuchen
Ansicht
Themen-Optionen

transparente Progressbar oder Text in Progressbar

Ein Thema von St. Janos · begonnen am 27. Dez 2004 · letzter Beitrag vom 1. Jan 2005
Antwort Antwort
St. Janos

Registriert seit: 25. Dez 2004
Ort: North Germany
12 Beiträge
 
#1

transparente Progressbar oder Text in Progressbar

  Alt 27. Dez 2004, 14:59
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 (Screenshot) implementieren. Heisst, ich würde gern über oder unter dem Statusbalken Text anzeigen. Für erst genanntes dachte ich an ein TextOut, welches man vlt. an die Grafik übergeben kann. Doch weiss ich nicht wie ich auf die grafische Darstellung der Progressbar zugreifen kann?! Das wäre dann meine erste Frage
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...

fröhliche Festtage
janos
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: transparente Progressbar oder Text in Progressbar

  Alt 27. Dez 2004, 15:38
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
St. Janos

Registriert seit: 25. Dez 2004
Ort: North Germany
12 Beiträge
 
#3

Re: transparente Progressbar oder Text in Progressbar

  Alt 27. Dez 2004, 18:30
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
  Mit Zitat antworten Zitat
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#4

Re: transparente Progressbar oder Text in Progressbar

  Alt 27. Dez 2004, 20:28
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:
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;
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...

grüße, paresy
  Mit Zitat antworten Zitat
St. Janos

Registriert seit: 25. Dez 2004
Ort: North Germany
12 Beiträge
 
#5

Re: transparente Progressbar oder Text in Progressbar

  Alt 27. Dez 2004, 23:10
Wunderbar! Man dankt Sollte mich bei Gelegenheit vielleicht mal mehr mit TRect auseinander setzen. Anbei, jmd. ne Tutorial-Link für die Komponente?

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
  Mit Zitat antworten Zitat
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#6

Re: transparente Progressbar oder Text in Progressbar

  Alt 28. Dez 2004, 19:46
pack mal deinen code ins OnDrawPanel Event

Delphi-Quellcode:
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;
und dann beim Panel ( dort wo du z.b. den Text der angezeigt werden soll reinschreibst ) die property Style auf 'psOwnerDraw'
  Mit Zitat antworten Zitat
St. Janos

Registriert seit: 25. Dez 2004
Ort: North Germany
12 Beiträge
 
#7

Re: transparente Progressbar oder Text in Progressbar

  Alt 1. Jan 2005, 00:22
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

frohes neues
janos
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 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