AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zwei Fragen zu Komponentenentwicklung
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Fragen zu Komponentenentwicklung

Ein Thema von DGL-luke · begonnen am 8. Jun 2005 · letzter Beitrag vom 11. Jun 2005
Antwort Antwort
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

Re: Zwei Fragen zu Komponentenentwicklung

  Alt 8. Jun 2005, 18:49
um missverständnisse zu vermeiden: ich habe bereits eine komponente programmiert, die soweit auch funktioniert.


ich hab da auch eine procedure paint; , die allerdings nix überschreibt, sondern von formpaint aufgerufen wird.

um meine aussage also ein wenig zu entschärfen:

"so weit wie das tutorial auf dsdt bin ich auch schon".


@phlux: ich habe in der suche gesehen, dass die threads zu komponenten ziemlich gleichmässig auf "sonstige fragen zu delphi" und "vcl und controls" verteilt sind. wenn man streng ist, passen eigene komponetenten auch nicht wirklich in die VCL-Sparte: "Fragen rund um VCL- und WinForms-Komponenten einschließlich der Common Controls(z.B. deren Benutzung und/oder Weiterentwicklung)" - gehören selbst entwickelte Komponenten zur VCL?!

@jfheins: eine processbar, die auf ein canvas gezeichnet wird anstatt sich selbst zu zeichnen, da ich überprüfen möchte, ob das bei einer großen anzahl von progressbars performancevorteile bringt.

der komplette source(hab gerade keine zeit, das hochzuladen):

Delphi-Quellcode:
unit U_CanvasBar;

interface

uses Graphics,Types,SysUtils,Classes,Windows;

type TCanvasbar = class(TComponent)
 private
  fStep,FPercent,fPosition:integer;
  fMin,fMax:integer;
  fLeft,fTop,fWidth,fHeight:integer;
  fParent:TCanvas;
  fBorderCol,fColor,fGaugeCol:TColor;
  fFont:TFont;
  procedure SetPosition(value:integer);
 public
   constructor Create(AOwner:TComponent); override;
   destructor Destroy; override;

   procedure Paint; //kein override, sollte da eins sein?
   procedure StepIt;
 published
  property Parent : TCanvas read fParent write fParent;
  property Step : integer read fStep write fStep ; //stored 1;
  property Position: integer read fPosition write SetPosition; //stored 0;
  property Percent : integer read fPercent ; //stored 0;
  property Left : integer read fLeft write fLeft ; //stored 0;
  property Top : integer read fTop write fTop ; //stored 0;
  property Height : integer read fHeight write fHeight ; //stored 0;
  property Width : integer read fWidth write fWidth ; //stored 0;
  property BorderColor: TColor read fBorderCol write fBorderCol; //stored clblack;
  property Color: TColor read fColor write FColor ; //stored clgray;
  property FGaugeColor:TColor read fGaugeCol write fGaugeCol ; //stored clmedgray;
  property Font: TFont read fFont write fFont;
  property Min: integer read fMin write fMin;
  property Max: integer read fmax write fMax;

end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Custom',[TCanvasBar]);
end;

constructor TCanvasBar.Create(AOwner:TComponent);

begin
 inherited;
  fBorderCol := clBlack; //hier werden die angesprochenen standardwerte gesetzt, die ich im OI nicht überschrieben kann.
  fGaugeCol := clSilver; //im OI erscheint das hier übrigens auch als clblack....
  fColor := clGray; //...ebenso wie das hier.
  fFont:=TFont.Create;
  fMin:=0;
  fMax:=100;
  fPosition:=0;
  fPercent:=0;
  fStep:=1;
  fWidth:=160;
  fHeight:=16;
end;

destructor TCanvasBar.Destroy;
begin
 inherited;
 fFont.Free;
end;

procedure TCanvasBar.Paint;
var storpen:TPen;
    storbrush:TBrush;
    storfont:TFont;
    gaugerect:TRect;
    textwidth, textHeight, textLeft,textTop:integer;
begin
 storpen:=TPen.Create;
 storbrush:=TBrush.Create;
 storfont:=TFont.Create;
 storpen.Assign(fparent.pen);
 storbrush.Assign(fparent.Brush);
 storfont.Assign(fparent.Font);
 fparent.Pen.Color:=fBorderCol;
 fparent.Brush.Color:=fColor;

 fparent.Rectangle(fleft,ftop,fleft+fwidth,ftop+fheight);

if fPercent > 0 then
begin
 GaugeRect.Left:=fLeft+1;
 GaugeRect.Top:=fTop+1;
 GaugeRect.Bottom:=fTop + fHeight - 1;
 GaugeRect.Right:= fLeft + round( (fwidth-2) * ( fPosition / fMax ));
 fparent.Pen.Color:=fGaugeCol;
 fparent.Brush.Color:=fGaugeCol;

 fparent.Rectangle(GaugeRect);
end;

 fparent.Font:= fFont;
 textwidth := fparent.TextWidth(inttostr(fPercent)+'%');
 textHeight := fparent.TextHeight(inttostr(fPercent)+'%');
 textLeft := round(fLeft + fWidth / 2 - textWidth / 2);
 textTop := round(fTop + fHeight / 2 - textHeight / 2);

 SetBKMode(parent.Handle,TRANSPARENT); //das geht eleganter, ich weiss.
 fparent.TextOut(textLeft,textTop,inttostr(fPercent)+'%');
 SetBKMode(parent.Handle,OPAQUE);

 fparent.Brush.Assign(storbrush);
 fparent.Pen.Assign(storpen);
 fparent.Font.Assign(storfont);

 storpen.Free;
 storbrush.Free;
 storfont.Free;

end;

procedure TCanvasBar.StepIt;
begin
fPosition := fPosition+fStep;
self.SetPosition(fPosition);

Paint;
end;

procedure TCanvasbar.SetPosition(value:integer);
begin
fPosition := value;
if fMin <> fMax then
fPercent := Round(Abs((fPosition - fMin) / (fMax - fMin)) * 100)
else fPercent:=0;
end;
end.
ein screenshot kommt vielleicht später, ich hab auf jeden fall ne test-app da.

EDIT: aufgrund neuer sachlage obige aussage revidiert.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  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 05:43 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