AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TProgressbar ohne Rahmen

Ein Thema von gizzy · begonnen am 12. Feb 2008 · letzter Beitrag vom 14. Feb 2008
Antwort Antwort
Benutzerbild von gizzy
gizzy

Registriert seit: 3. Jun 2007
59 Beiträge
 
Delphi 2007 Enterprise
 
#1

TProgressbar ohne Rahmen

  Alt 12. Feb 2008, 23:10
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
David
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: TProgressbar ohne Rahmen

  Alt 12. Feb 2008, 23:38
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.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von gizzy
gizzy

Registriert seit: 3. Jun 2007
59 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: TProgressbar ohne Rahmen

  Alt 13. Feb 2008, 20:53
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.
David
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TProgressbar ohne Rahmen

  Alt 13. Feb 2008, 21:22
Zitat von gizzy:
Ich verwende Delphi 5.
Wie installiere ich die Komponente Richtig?
Komponenten installieren
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.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von gizzy
gizzy

Registriert seit: 3. Jun 2007
59 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: TProgressbar ohne Rahmen

  Alt 14. Feb 2008, 16:11
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?
David
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: TProgressbar ohne Rahmen

  Alt 14. Feb 2008, 18:56
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.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  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 21:30 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