AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Benötige Hilfe beim Entwickeln einer Komponente

Benötige Hilfe beim Entwickeln einer Komponente

Ein Thema von torud · begonnen am 29. Aug 2007 · letzter Beitrag vom 17. Jul 2013
Antwort Antwort
Seite 5 von 13   « Erste     345 67     Letzte » 
christophww

Registriert seit: 29. Aug 2007
Ort: Hachenburg
1 Beiträge
 
#1

AW: Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 17. Jul 2013, 17:42
Das Thema ist zwar schon alt, aber da ich die Funktion DrawGradient von hier habe, will ich andere davor bewahren, in den gleichen Fehler zu laufen. Es hat Tage gedauert, bis ich verstanden habe, dass die lokale Variable c nicht initialisiert wird und deshalb der Wert von c.reserved manchmal nicht 0 ist. Dann wurde statt eines Farbverlaufs nur noch die Farbe Schwarz ausgegeben.

ALSO UNBEDINGT: c.reserved:=0;

procedure DrawGradient(const Canvas: TCanvas; Color1, Color2: TColor;
ARect: TRect; GradientOrientation: TGradientOrientation);
var
c1, c2, c: TPixelRec; //for easy access to RGB values as well as TColor value
x, y: Integer; //current pixel position to be set
OldPenWidth: Integer; //Save old settings to restore them properly
OldPenStyle: TPenStyle;//see above
begin
c1.Color := ColorToRGB(Color1); //convert system colors to RGB values
c2.Color := ColorToRGB(Color2); //if neccessary
OldPenWidth := Canvas.Pen.Width; //get old settings
OldPenStyle := Canvas.Pen.Style;
Canvas.Pen.Width:=1; //ensure correct pen settings
Canvas.Pen.Style:=psInsideFrame;

c.reserved:=0; //

case GradientOrientation of
goVertical:
begin
for y := 0 to ARect.Bottom - ARect.Top do
begin
c.r := Round(c1.r + (c2.r - c1.r) * y / (ARect.Bottom - ARect.Top));
c.g := Round(c1.g + (c2.g - c1.g) * y / (ARect.Bottom - ARect.Top));
c.b := Round(c1.b + (c2.b - c1.b) * y / (ARect.Bottom - ARect.Top));
Canvas.Brush.Color := c.Color;
Canvas.FillRect(Classes.Rect(ARect.Left, ARect.Top + y,
ARect.Right, ARect.Top + y + 1));
end;
end;
goHorizontal:
begin
for x := 0 to ARect.Right - ARect.Left do
begin
c.r := Round(c1.r + (c2.r - c1.r) * x / (ARect.Right - ARect.Left));
c.g := Round(c1.g + (c2.g - c1.g) * x / (ARect.Right - ARect.Left));
c.b := Round(c1.b + (c2.b - c1.b) * x / (ARect.Right - ARect.Left));
Canvas.Brush.Color := c.Color;
Canvas.FillRect(Rect(ARect.Left + x, ARect.Top,
ARect.Left + x + 1, ARect.Bottom));
end;
end;
end;
Canvas.Pen.Width := OldPenWidth; //restore old settings
Canvas.Pen.Style := OldPenStyle;
end;
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 31. Aug 2007, 08:15
Du musst im constructor auch eine Instanz von Picture erstellen (Create).
Die Prüfung auf nil ist zwar o.k. imho aber etwas unsicher ohne Initialisierung (jetzt werden gleich wieder alle schreien, dass Delphi das beim Start min nil übernimmt ....). Egal, füge im Construktor ein create für FPicture (im Destructor FreeAndNil) ein und teste weiter.

Gruß oki
42
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 31. Aug 2007, 08:38
Hm das kann es nicht sein, behaupte ich mal so, da ich nach dem Kompilieren der Komponente und dem Öffnen des Testprojektes direkt beim Anklicken der Komponente einen abstrakten Fehler erhalte.

Delphi-Quellcode:
private
    FPicture:TGraphic;

constructor TmyPanel.Create(AOwner: TComponent);
begin
  FPicture := TGraphic.Create;
  inherited Create(AOwner);
  Align := alNone;
  BgColorFrom := clWhite;
  BgColorTo := clSilver;
  BorderColor := clGray;
  BorderStyle := psSolid;
  BorderWidth := 2;
end;

destructor TmyPanel.Destroy;
begin
  inherited;
  FPicture.Free;
end;
Meldungen vom Compiler:
[Warnung] myPanel.pas(89): Instanz von 'TGraphic' mit der abstrakten Methode 'TGraphic.LoadFromStream' wird angelegt
[Warnung] myPanel.pas(89): Instanz von 'TGraphic' mit der abstrakten Methode 'TGraphic.SaveToStream' wird angelegt
[Warnung] myPanel.pas(89): Instanz von 'TGraphic' mit der abstrakten Methode 'TGraphic.LoadFromClipboardFormat' wird angelegt
[Warnung] myPanel.pas(89): Instanz von 'TGraphic' mit der abstrakten Methode 'TGraphic.SaveToClipboardFormat' wird angelegt
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#4

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 31. Aug 2007, 08:39
Andersherum:
Delphi-Quellcode:
destructor TmyPanel.Destroy;
begin
  FPicture.Free;
  inherited;
end;
//Edit: Das hat nichts mit den Warnungen zu tun, ich wollte nur darauf hinweisen. Leg die Grafik mal als Bitmap an, dann sollten die Warnungen verschwinden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 31. Aug 2007, 08:48
Also das kanns eigentlich nicht sein, denn das Problem ist weiterhin das GLEICHE.
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#6

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 31. Aug 2007, 08:51
Die monierten Methoden sind in TGraphic als abstrakt deklariert und werden in abgeleiteten Klassen überschrieben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 31. Aug 2007, 09:12
Kurzer Satz und dennoch zu viel input für mich. Was bedeutet das jetzt?
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#8

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 31. Aug 2007, 09:14
As I said: Ändere im Konstruktor mal die ZeileFPicture := TGraphic.Create; inFPicture := TBitmap.Create;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 31. Aug 2007, 09:34
Hallo Tom,

versuche es einmal so:

Delphi-Quellcode:
type
  TmyPanel = class (TCustomControl)
  private
    FPicture : TPicture;
    procedure PictureChanged (Sender: TObject);
    procedure SetPicture (aValue: TPicture);
  public
    constructor Create (aOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Picture: TPicture read FPicture write SetPicture;
  end;


constructor TmyPanel.Create (aOwner: TComponent);
begin
  inherited;
  FPicture := TPicture.Create;
  FPicture.OnChange := PictureChanged;
end;

destructor TmyPanel.Destroy;
begin
  FPicture.Free;
  inherited;
end;

procedure TmyPanel.PictureChanged (Sender: TObject);
begin
  Invalidate;
end;

procedure TmyPanel.SetPicture (aValue: TPicture);
begin
  FPicture.Assign (aValue); // KEINE Zuweisung, sondern Assign!
end;
Der Code ist nicht getestet, aber so ungefähr sollte es funktionieren.

Gruß Hawkeye
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#10

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 31. Aug 2007, 10:12
Hallo Hawkeye,

genauso gehts!!!
Danke
Tom
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 13   « Erste     345 67     Letzte » 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:45 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 by Thomas Breitkreuz