ProgressBar mit einstellbarem Text
-
- Beiträge: 109
- Registriert: Sa 20. Dez 2008, 20:42
- OS, Lazarus, FPC: Linux (L 0.9.24)
- CPU-Target: 32Bit
- Wohnort: San Jose,CA
- Kontaktdaten:
ProgressBar mit einstellbarem Text
Hallo,
wie kann mann einstellen das die ProgressBar z.b. den Text "Bitte Warten..." in der Mitte anzeigt?
Ich mein etwa so:
+----------------------------------------------------------+
|||||||||||||||||||||||||||||||Bitte|Warten||||||||||||||||||||||||||||
+----------------------------------------------------------+
So wie wenn man BarShowText:true setzt halt nur mit nem anderen Text.
wie kann mann einstellen das die ProgressBar z.b. den Text "Bitte Warten..." in der Mitte anzeigt?
Ich mein etwa so:
+----------------------------------------------------------+
|||||||||||||||||||||||||||||||Bitte|Warten||||||||||||||||||||||||||||
+----------------------------------------------------------+
So wie wenn man BarShowText:true setzt halt nur mit nem anderen Text.
Code: Alles auswählen
If beitragHilfreich then leseitdurch()else volle_ignoranz();
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: ProgressBar mit einstellbarem Text
Du könnstest...
1) Den Text drüber zeichnen (unschön)
2) Dir mal anschauen, wie denn die Prozentangabe auf die ProgressBar kommt und das nachstellen/umschreiben
2) Den Text in einem Label unter der ProgressBar anzeigen lassen.
1) Den Text drüber zeichnen (unschön)
2) Dir mal anschauen, wie denn die Prozentangabe auf die ProgressBar kommt und das nachstellen/umschreiben
2) Den Text in einem Label unter der ProgressBar anzeigen lassen.
-
- Beiträge: 155
- Registriert: Mi 22. Aug 2007, 14:52
- OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 65719 Hofheim am Taunus
- Kontaktdaten:
Re: ProgressBar mit einstellbarem Text
Mir gefällt der Standard-Text auch nicht.
und auch noch (natürlich zurecht) in der Private-Abteilung.
Beim Create macht es ein:
...und es gibt leider keine Property die dies verändern kann, also neue Klasse schreiben, die das änderbar macht...
Ist mir persönlich zu viel Arbeit, ich lass das so.
Dazu sieht man im Quelltext:2) Dir mal anschauen, wie denn die Prozentangabe auf die ProgressBar kommt und das nachstellen/umschreiben
Code: Alles auswählen
- FBarTextFormat is a fixed string by now, hard-coded in the gtk-interface
Beim Create macht es ein:
Code: Alles auswählen
FBarTextFormat := '%v from [%l-%u] (=%p%%)';
Ist mir persönlich zu viel Arbeit, ich lass das so.

-
- Beiträge: 109
- Registriert: Sa 20. Dez 2008, 20:42
- OS, Lazarus, FPC: Linux (L 0.9.24)
- CPU-Target: 32Bit
- Wohnort: San Jose,CA
- Kontaktdaten:
Re: ProgressBar mit einstellbarem Text
Der stanardtext ist auch nicht so gutes Englisch.
Es heisst so:50 of[0-100] 50%
Wo ist diese Datei?
Ich bin nur in der ComCtrl gelandet.
Wenn das private ist,kann man das nicht einfach in public packen?
Ich hab das gefunden:
Da ist dieses
wenn ich dass einfach in public packen würde ginge es doch?
in etwa so:
und dann der rest
Es heisst so:50 of[0-100] 50%
Wo ist diese Datei?
Ich bin nur in der ComCtrl gelandet.
Wenn das private ist,kann man das nicht einfach in public packen?
Ich hab das gefunden:
Code: Alles auswählen
TCustomProgressBar = class(TWinControl)
private
FMin : Integer;
FMax : Integer;
FStep : Integer;
FPosition : Integer;
FSmooth : boolean;
FBarShowText : boolean;
FBarTextFormat : string;
FOrientation : TProgressBarOrientation;
function GetMin: Integer;
function GetMax: Integer;
function GetPosition: Integer;
procedure SetParams(AMin, AMax: Integer);
procedure SetMin(Value: Integer);
procedure SetMax(Value: Integer);
procedure SetPosition(Value: Integer);
procedure SetStep(Value: Integer);
procedure SetSmooth (Value : boolean);
procedure SetBarShowText (Value : boolean);
procedure SetOrientation (Value : TProgressBarOrientation);
protected
procedure ApplyChanges;
procedure InitializeWnd; overrde;
procedure Loaded; override;
class function GetControlClassDefaultSize: TPoint; override;
public
constructor Create(AOwner: TComponent); override;
procedure StepIt;
procedure StepBy(Delta: Integer);
public
property Max: Integer read GetMax write SetMax;
property Min: Integer read GetMin write SetMin;
property Orientation: TProgressBarOrientation read FOrientation write SetOrientation default pbHorizontal;
property Position: Integer read GetPosition write SetPosition default 0;
property Smooth : boolean read FSmooth write SetSmooth default false;
property Step: Integer read FStep write SetStep default 10;
property BarShowText : boolean read FBarShowText write SetBarShowText;
Code: Alles auswählen
FBarTextFormat : string;
in etwa so:
Code: Alles auswählen
public
FBarTextFormat : string;
Code: Alles auswählen
If beitragHilfreich then leseitdurch()else volle_ignoranz();
-
- Beiträge: 109
- Registriert: Sa 20. Dez 2008, 20:42
- OS, Lazarus, FPC: Linux (L 0.9.24)
- CPU-Target: 32Bit
- Wohnort: San Jose,CA
- Kontaktdaten:
Re: ProgressBar mit einstellbarem Text
Ich hab jetzt eine Unit geschreiben:
Und dass ist was ich sehe im Messages fenster:
Code: Alles auswählen
unit ComnCtrls;
{$mode objfpc}
{$H+}
interface
uses
SysUtils, Classes, LResources, LCLIntf, LCLType,
LCLProc, AvgLvlTree, GraphType, Graphics,
Controls, Forms, StdCtrls,ComCtrls,WSComCtrls,WSLCLClasses, WSControls, WSExtCtrls, WSStdCtrls,
WSToolwin;
type
{ TTCustomProgressBar }
{
@abstract(Simple progressbar with Text.)
Introduced by Author Name <seiferttristan@gmail.com>
}
TTCustomProgressBar = class(TWinControl)
private
FMin : Integer;
FMax : Integer;
FStep : Integer;
FPosition : Integer;
FSmooth : boolean;
FBarTextFormat : string;
FBarShowText : boolean;
FOrientation : TProgressBarOrientation;
function GetMin: Integer;
function GetMax: Integer;
function GetPosition: Integer;
procedure SetParams(AMin, AMax: Integer);
procedure SetMin(Value: Integer);
procedure SetMax(Value: Integer);
procedure SetPosition(Value: Integer);
procedure SetStep(Value: Integer);
procedure SetSmooth (Value : boolean);
procedure SetBarShowText (Value : boolean);
procedure SetOrientation (Value : TProgressBarOrientation);
protected
procedure ApplyChanges;
procedure InitializeWnd; override;
procedure Loaded; override;
class function GetControlClassDefaultSize: TPoint; override;
public
constructor Create(AOwner: TComponent); override;
procedure StepIt;
procedure StepBy(Delta: Integer);
public
property Max: Integer read GetMax write SetMax;
property Min: Integer read GetMin write SetMin;
property Orientation: TProgressBarOrientation read FOrientation write SetOrientation default pbHorizontal;
property Position: Integer read GetPosition write SetPosition default 0;
property Smooth : boolean read FSmooth write SetSmooth default false;
property Step: Integer read FStep write SetStep default 10;
property Text: string read FBarTextFormat write FBarTextFormat;
property BarShowText : boolean read FBarShowText write SetBarShowText;
end;
{ TTProgressBar }
TTProgressBar = class(TTCustomProgressBar)
published
property Align;
property Anchors;
property BorderSpacing;
property BorderWidth;
property Constraints;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Hint;
property Max;
property Min;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDock;
property OnStartDrag;
property Orientation;
property ParentShowHint;
property PopupMenu;
property Position;
property ShowHint;
property Smooth;
property Step;
property TabOrder;
property TabStop;
property Text;
property Visible;
property BarShowText;
end;
{ TTWSProgressBar }
TTWSProgressBar = class(TWSWinControl)
class procedure ApplyChanges(AProgressBar: TTCustomProgressBar); virtual;
class procedure SetPosition(AProgressBar: TTCustomProgressBar; Value: integer); virtual;
end;
TTWSProgressBarClass = class of TTWSProgressBar;
procedure Register;
implementation
// !!! Avoid unit circles. Only add units if really needed.
procedure Register;
begin
RegisterComponents('Common Controls',[TTProgressBar]);
end;
{$I progressbarTS.inc}
end.
Code: Alles auswählen
Hint: Start of reading config file /etc/fpc.cfg
Hint: End of reading config file /etc/fpc.cfg
Warning: You are using the obsolete switch -OG
Free Pascal Compiler version 2.2.0 [2008/09/20] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Linux for i386
Compiling TSTerritoriumsstrg.lpr
Compiling unit1.pas
Compiling unit2.pas
Compiling comnctrls.pp
comnctrls.pp(141,18) Error: Forward declaration not solved "class TTWSProgressBar.ApplyChanges(TTCustomProgressBar)"
comnctrls.pp(142,18) Error: Forward declaration not solved "class TTWSProgressBar.SetPosition(TTCustomProgressBar, LongInt)"
comnctrls.pp(165) Fatal: There were 2 errors compiling module, stopping
Code: Alles auswählen
If beitragHilfreich then leseitdurch()else volle_ignoranz();
-
- Beiträge: 1
- Registriert: So 3. Feb 2013, 15:27
Re: ProgressBar mit einstellbarem Text
Hallo zusammen,
es ist so, dass ich den "Sermon", den die ProgressBar ausgibt, für total unpraktikabel halte. In den allermeisten Anwendungen reicht die Prozentausgabe völlig. Die einfachste und schnellste Lösung ist, dies generell umzustellen. Ich erkläre hier, wie ich das unter Linux gemacht habe.
Zunächst bleibt Lazarus ungeöffnet. Mit Root-Rechten öffne ich einen Editor (z.B. KWrite) und öffne folgende Datei damit:
/usr/lib/lazarus/lcl/interfaces/gtk2/gtk2wscomctrls.pp . Wer ein anderes WidgetSet verwendet, sucht sich die Datei *comctrls.pp aus dem entsprechenden Ordner heraus. Die Zeile 459 verändere ich so: wText := Format('%%p%%%%', [Position, Min, Max]);
Dann speichere (überschreibe) die Datei. KWrite erstellt die vorherige Datei als Sicherungsdatei. Falls etwas schief geht, läßt sich so der alte Zustand wiederherstellen.
Jetzt öffne ich Lazarus und kompiliere Lazarus neu. Zu finden unter Werkzeuge: Kompiliere Lazarus mit Profil... . Und schon zeigt bei aktiviertem BarShowText die ProgressBar immer nur noch den aktuellen Prozentwert an.
Viel Erfolg aus dem Schwarzwald
es ist so, dass ich den "Sermon", den die ProgressBar ausgibt, für total unpraktikabel halte. In den allermeisten Anwendungen reicht die Prozentausgabe völlig. Die einfachste und schnellste Lösung ist, dies generell umzustellen. Ich erkläre hier, wie ich das unter Linux gemacht habe.
Zunächst bleibt Lazarus ungeöffnet. Mit Root-Rechten öffne ich einen Editor (z.B. KWrite) und öffne folgende Datei damit:
/usr/lib/lazarus/lcl/interfaces/gtk2/gtk2wscomctrls.pp . Wer ein anderes WidgetSet verwendet, sucht sich die Datei *comctrls.pp aus dem entsprechenden Ordner heraus. Die Zeile 459 verändere ich so: wText := Format('%%p%%%%', [Position, Min, Max]);
Dann speichere (überschreibe) die Datei. KWrite erstellt die vorherige Datei als Sicherungsdatei. Falls etwas schief geht, läßt sich so der alte Zustand wiederherstellen.
Jetzt öffne ich Lazarus und kompiliere Lazarus neu. Zu finden unter Werkzeuge: Kompiliere Lazarus mit Profil... . Und schon zeigt bei aktiviertem BarShowText die ProgressBar immer nur noch den aktuellen Prozentwert an.
Viel Erfolg aus dem Schwarzwald
- af0815
- Lazarusforum e. V.
- Beiträge: 6837
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: ProgressBar mit einstellbarem Text
Hat nur den Nachteil, das bei einem Update alles futsch ist und mann weis nach einiger Zeit nicht mehr warum.schwarzwaldtux hat geschrieben:... öffne folgende Datei damit:
/usr/lib/lazarus/lcl/interfaces/gtk2/gtk2wscomctrls.pp ...
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: ProgressBar mit einstellbarem Text
Man kann sich ja einen Hinweis im Quelltext machen, was man dafür geändert hataf0815 hat geschrieben:Hat nur den Nachteil, das bei einem Update alles futsch ist und mann weis nach einiger Zeit nicht mehr warum.schwarzwaldtux hat geschrieben:... öffne folgende Datei damit:
/usr/lib/lazarus/lcl/interfaces/gtk2/gtk2wscomctrls.pp ...
www.mcpatcher.net | www.hoeper.me