Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TProgressbar ohne Rahmen (https://www.delphipraxis.net/108389-tprogressbar-ohne-rahmen.html)

gizzy 12. Feb 2008 23:10


TProgressbar ohne Rahmen
 
Hallöchen,

und zwar wollte ich eine Progressbar ohne diesen Standart Rahmen haben. Ich hab mich schon überall durchgewurschtelt und dabei fokgendes gefunden. Leider bin ich nicht so der Delphi "Pro" um das auf anhieb zu verstehen, aber ich glaube ich muss den Quellcode als deue Komponente hinzufügen.
Kann mir da vielleicht jemand einen Tipp geben?

Zitat:


Delphi's ProgressBar always have a frame. If you wish to place it on a StatusBar it looks not beautifully. You can do small change in the component and you'll get the new one without a frame.

http://www.latiumsoftware.com/img/progress.gif

Look the picture (progress.gif). You can see three ProgressBars. One is a standard Delphi's component with a frame and the rest of them a component with a new property. Now you can drive a ProgressBar's frame.

unit NewProgress;

Delphi-Quellcode:
unit NewProgress;

// By Vladimir S. <shvetadvipa@mtu-net.ru>

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls;

type
  TNProgressBar = class(TProgressBar)
    procedure WMNCPAINT(var Msg: TMessage); message WM_NCPAINT;
  private
    FShowFrame: boolean;
    procedure SetShowFrame(Value: boolean);
  public
    constructor Create(AOwner: TComponent); override;
  published
    property ShowFrame: boolean read FShowFrame write SetShowFrame;
  end;

procedure Register;

implementation

{ TNProgressBar }

constructor TNProgressBar.Create(AOwner: TComponent);
begin
  inherited;
  FShowFrame := True;
end;

procedure TNProgressBar.SetShowFrame(Value: boolean);
begin
  if FShowFrame <> Value then begin
    FShowFrame:= Value;
    RecreateWnd;
  end;
end;

procedure TNProgressBar.WMNCPAINT(var Msg: TMessage);
var
  DC: HDC;
  RC: TRect;
begin
  if ShowFrame then begin
    inherited;
    Invalidate;
  end else begin
    DC := GetWindowDC(Handle);
    try
      Windows.GetClientRect(Handle, RC);
      with RC do begin
        Inc(Right, 2);
        Inc(Bottom, 2);
      end;
      Windows.FillRect(DC, RC, Brush.Handle);
    finally
      ReleaseDC(Handle, DC);
    end;
  end;
end;

procedure Register;
begin
  RegisterComponents('Controls', [TNProgressBar]);
end;

end.

Vielen Dank im voraus

bitsetter 12. Feb 2008 23:38

Re: TProgressbar ohne Rahmen
 
Hi,

du hast ja leider nicht angegeben welche Delphiversion du hast, bis Delphi 7 kannst du die Komponente jedenfalls unter dem Menü Component-> Install Component installieren.

Oder wenn du sie nicht gleich installieren möchtest, dann erstellst du ein neues Projekt. Dann setzt du eine TProgressBar auf das Formular und fügst diesen Code ein.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls;

type
  TProgressBar = class(ComCtrls.TProgressBar)
    procedure WMNCPAINT(var Msg: TMessage); message WM_NCPAINT;
  private
    FShowFrame: boolean;
    procedure SetShowFrame(Value: boolean);
  public
    constructor Create(AOwner: TComponent); override;
  published
    property ShowFrame: boolean read FShowFrame write SetShowFrame;
  end;

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TNProgressBar }

constructor TProgressBar.Create(AOwner: TComponent);
begin
  inherited;
  FShowFrame := false;//True;
  self.Position:= 20;//Test
end;

procedure TProgressBar.SetShowFrame(Value: boolean);
begin
  if FShowFrame <> Value then begin
    FShowFrame:= Value;
    RecreateWnd;
  end;
end;

procedure TProgressBar.WMNCPAINT(var Msg: TMessage);
var
  DC: HDC;
  RC: TRect;
begin
  if ShowFrame then begin
    inherited;
    Invalidate;
  end else begin
    DC := GetWindowDC(Handle);
    try
      Windows.GetClientRect(Handle, RC);
      with RC do begin
        Inc(Right, 2);
        Inc(Bottom, 2);
      end;
      Windows.FillRect(DC, RC, Brush.Handle);
    finally
      ReleaseDC(Handle, DC);
    end;
  end;
end;

end.

gizzy 13. Feb 2008 20:53

Re: TProgressbar ohne Rahmen
 
Ich verwende Delphi 5.
Wie installiere ich die Komponente Richtig? Und muss ich Diese dann bei jeden Projekt in der user-Liste aufnehmen?
Ich habe bisher nur mit den Standard-Komponenten von Borland gearbeitet. Hatte mir auch schon mal vor Indie zu installieren, da ich aber nicht so direkt Hintergestiegen bin wie, habe ich es gelassen.

bitsetter 13. Feb 2008 21:22

Re: TProgressbar ohne Rahmen
 
Zitat:

Zitat von gizzy
Ich verwende Delphi 5.
Wie installiere ich die Komponente Richtig?

Komponenten installieren
Zitat:

Zitat von gizzy
Und muss ich Diese dann bei jeden Projekt in der user-Liste

Nein, normalerweise müsste die Komponente unter Controls --> TNProgressBar erscheinen. Du setzt die Komponente genauso auf das Formular wie eine TProgressBar.

gizzy 14. Feb 2008 16:11

Re: TProgressbar ohne Rahmen
 
Hat leider nicht das gewünschte Ergebnis gebracht. Der Border scheint immer noch da zu sein, bei der neuen Komponente.

So bin ich vor gegangen (Delphi 5):

Komponente -> Neue Komponente...

VorfahrTyp: TProgressbar
Klassenname: TNProgressBar
Palettenseite: Controls
Name der Unit: NewProgress
Suchpfad: <Standart>

dann OK
Nun habe ich die Unit mit der vorgegebenen Ersetzt und Compilieren gedrückt. Die Komponente wurde erfolgreich hinzugefügt.

Hbae ich etwas falsch gemacht?

bitsetter 14. Feb 2008 18:56

Re: TProgressbar ohne Rahmen
 
Wenn du alles richtig gemacht hast, dann müsste im OI jetzt die Eigenschaft ShowFrame hinzugekommen sein. Die müsstest du dann auf false stellen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 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