Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi XE2 eigene Klasse nicht gefunden (https://www.delphipraxis.net/166620-delphi-xe2-eigene-klasse-nicht-gefunden.html)

trashcandesign 22. Feb 2012 09:19

Delphi XE2 eigene Klasse nicht gefunden
 
Moin,

nach langer Abstinenz habe ich doch mal wieder eine Frage.
Ich habe Delphi XE2 Professional und das TMS Component Pack frisch auf meinem Rechner isntalliert.

Für eine erweiterung der TMSPolyList habe ich ein eigenes Package erstellt, darin von einer TMS Komponente abgeleitet und die Klasse mit:

Code:
procedure Register;
begin
  RegisterPolyItem(TMPWedgeItem);
  RegisterClass(TMPWedgeItem);
end;
registriert.
Das funktioniert auch alles wie gewünscht.
Wenn ich jetzt Delphi neustarte und ein Projekt öffne, dass diese Klasse einbindet, bekomme ich die Meldung "Klasse XYZ nicht gefunden".
Das lässt sich nur lösen, wenn ich das Package de- und wieder neuinstalliere. Dann funktioniert es zumindest bis zum nächsten Programmstart ;)

Unter "Komponente -> Packages isntallieren" wird mit das Package auch mit einem Haken angezeigt.

Hat einer von euch zufällig eine Glaskugel, die mir verrät, was ich falsch mache?

Die BPL wird mir in "C:\Users\Public\Documents\RAD Studio\9.0\Bpl" erstellt.
Gibt es ein Problem mit den Standard-Einstellungen der Delphi Installation?

Gruß
Dirk

DeddyH 22. Feb 2012 09:21

AW: Delphi XE2 eigene Klasse nicht gefunden
 
Ist die Unit auch im Bibliothekspfad zu finden?

trashcandesign 22. Feb 2012 09:34

AW: Delphi XE2 eigene Klasse nicht gefunden
 
Hallo Detlef,

ich habe den Pfad in den Projekt-Suchpfad aufgenommen und kann die Unit auch mit [Strg] über den Quelltext aufrufen.
Ich bekomme aber leider weiterhin den Fehler nach einem Programmneustart.

Sir Rufo 22. Feb 2012 09:37

AW: Delphi XE2 eigene Klasse nicht gefunden
 
Den Pfad zum Source in den Suchpfad und den Pfad zu den compilierten Teilen (dcu) in den Bibliothekspfad

DeddyH 22. Feb 2012 09:39

AW: Delphi XE2 eigene Klasse nicht gefunden
 
Das verwechsel ich jedes Mal, es muss schwer sein, sich 2 Werte zu merken :stupid:

trashcandesign 22. Feb 2012 09:50

AW: Delphi XE2 eigene Klasse nicht gefunden
 
Liste der Anhänge anzeigen (Anzahl: 2)
Nur damit wir jetzt nicht aneinander vorbei reden:

Ich habe den Pfad zur Pas-Datei in den Suchpfad der Projekt-Optionen und den Pfad zur DCU in den Bibliothekspfad des Programms eingetragen.
Zur Erklärung, was ich meine habe ich auch mal zwei Screenshots angehängt.

Das funktioniert leider auch nicht.

DeddyH 22. Feb 2012 09:53

AW: Delphi XE2 eigene Klasse nicht gefunden
 
Wieso in den Suchpfad der Projektoptionen und nicht in den Delphi-Suchpfad?

trashcandesign 22. Feb 2012 09:54

AW: Delphi XE2 eigene Klasse nicht gefunden
 
War nur eine Eingebung... gut, keine wirklich gute ;)
In den Delphi Einstellungen bewirkt es auch nichts....

DeddyH 22. Feb 2012 09:56

AW: Delphi XE2 eigene Klasse nicht gefunden
 
*Pfuh* das Package ist nicht irgendwie in den DisabledPackages gelandet? Sonst fällt mir langsam auch nichts mehr ein.

trashcandesign 22. Feb 2012 10:06

AW: Delphi XE2 eigene Klasse nicht gefunden
 
DisabledPackages?
Wo finde ich das?


Hier nochmal den Quelltext der Unit, vielleicht bin ja einfach nur dämlich und mache was Grundlegendes falsch?



Code:
unit MPWedgeItem;

interface

uses
  Windows, Classes, GDIPCustomItem, Graphics, GDIPTextItem, AdvGDIP, GDIPFill;

const
  MAJ_VER = 1; // Major version nr.
  MIN_VER = 0; // Minor version nr.
  REL_VER = 0; // Release nr.
  BLD_VER = 0; // Build nr.

  //v0.9.0.0 : First Beta Release
  //v1.0.0.0 : First Release

type
  TWedgePosition = (wpLeft, wpRight);

  TWedgePositions = set of TWedgePosition;

  TMPWedgeItem = class(TTextItem)
  private
    FWedgePositions: TWedgePositions;
    FWedgeSize: integer;
    FWedgeStates: TItemStates;
    procedure SetWedgePositions(const Value: TWedgePositions);
    procedure SetWedgeSize(const Value: integer);
    procedure SetWedgeStates(const Value: TItemStates);
  protected
    function GetVersionNr: integer; override;
    procedure DrawFocus(g: TGPGraphics; ARect: TGPRectF; ItemAppearance: TItemAppearance); override;
    function GetWedgeRect(ARect: TGPRectF): TGPRectF;
  public
    constructor Create(AOwner: TComponent); override;
    procedure Assign(Source: TPersistent); override;
    function CreateNewItem(AOwner: TComponent): TCustomItem; override;
    function GetClassType: TComponentClass; override;
    class function CustomClassName: String; override;
    procedure DrawInRect(g: TGPGraphics; ItemAppearance: TItemAppearance; R: TGPRectF); override;
    function DrawText(g: TGPGraphics; ARect: TGPRectF; ItemAppearance: TItemAppearance; DoText: Boolean = true): TGPRectF; override;
  published
    property WedgePositions: TWedgePositions read FWedgePositions write SetWedgePositions default [wpRight];
    property WedgeSize: integer read FWedgeSize write SetWedgeSize default 6;
    property WedgeStates: TItemStates read FWedgeStates write SetWedgeStates default [isNormal, isHovered, isDown, isSelected];
  end;

procedure Register;
procedure UnRegister;

implementation

procedure Register;
begin
  RegisterPolyItem(TMPWedgeItem);
  RegisterClass(TMPWedgeItem);
end;

procedure UnRegister;
begin
  UnRegisterClass(TMPWedgeItem);
end;

{ TWedgeItem }

procedure TMPWedgeItem.Assign(Source: TPersistent);
begin
  inherited;
  if Source is TMPWedgeItem then
  begin
    FWedgePositions := (Source as TMPWedgeItem).WedgePositions;
    FWedgeSize := (Source as TMPWedgeItem).WedgeSize;
    FWedgeStates := (Source as TMPWedgeItem).WedgeStates;
    Changed;
  end;
end;

constructor TMPWedgeItem.Create(AOwner: TComponent);
begin
  inherited;
  FWedgePositions := [wpRight];
  FWedgeSize := 6;
  FWedgeStates := [isSelected];
  Self.CaptionMargin.Left := 10;
end;

function TMPWedgeItem.CreateNewItem(AOwner: TComponent): TCustomItem;
begin
  Result := TMPWedgeItem.Create(AOwner);
end;

class function TMPWedgeItem.CustomClassName: String;
begin
  Result := 'MPFeuer Wedge Item';
end;

procedure TMPWedgeItem.DrawInRect(g: TGPGraphics; ItemAppearance: TItemAppearance;
  R: TGPRectF);
type
  TPointArray = array of TGPPointF;
var
  rgn: TGPRegion;
  f: TGDIPFill;
  s: integer;
  pth: TGPGraphicsPath;
  wdRight, wdLeft: TPointArray;
  p: TGPPen;
  ir: TGPRectF;
begin
  if (WedgePositions <> []) and (self.State in WedgeStates) then
  begin
    ir := MakeRect(r.x, r.y, r.width + 1, r.height + 1);
    f := GetFill(ItemAppearance);
    p := TGPPen.Create(MakeColor(f.BorderOpacity, f.BorderColor), f.BorderWidth);
    rgn := TGPRegion.Create(ir);
    s := WedgeSize;
    pth := TGPGraphicsPath.Create;

    if wpRight in WedgePositions then
    begin
      SetLength(wdRight, 3);
      wdRight[0] := MakePoint(ir.X + ir.Width, ir.Y - s + (ir.Height - 1) / 2);
      wdRight[1] := MakePoint(ir.X + ir.Width - s, ir.Y + (ir.Height - 1) / 2);
      wdRight[2] := MakePoint(ir.X + ir.Width, ir.Y + s + (ir.Height - 1) / 2);
      pth.AddPolygon(PGPPointF(wdRight), 3);
      rgn.Exclude(pth);
    end;

    if wpLeft in WedgePositions then
    begin
      SetLength(wdLeft, 3);
      wdLeft[0] := MakePoint(ir.X, ir.Y - s + ir.Height / 2);
      wdLeft[1] := MakePoint(ir.X + s, ir.Y + ir.Height / 2);
      wdLeft[2] := MakePoint(ir.X, ir.Y + s + ir.Height / 2);
      pth.AddPolygon(PGPPointF(wdLeft), 3);
      rgn.Exclude(pth);
    end;

    g.SetClip(rgn);

    inherited;

    g.ResetClip;
    pth.Free;
    rgn.Free;

    if wpRight in WedgePositions then
    begin
      g.DrawLine(p, wdRight[0].X-1, wdRight[0].Y, wdRight[1].X-1, wdRight[1].Y);
      g.DrawLine(p, wdRight[1].X-1, wdRight[1].Y, wdRight[2].X-1, wdRight[2].Y);
    end;

    if wpLeft in WedgePositions then
    begin
      g.DrawLine(p, wdleft[0].X, wdleft[0].Y, wdleft[1].X, wdleft[1].Y);
      g.DrawLine(p, wdleft[1].X, wdleft[1].Y, wdleft[2].X, wdleft[2].Y);
    end;

    p.Free;

  end
  else
    inherited;
end;

procedure TMPWedgeItem.DrawFocus(g: TGPGraphics; ARect: TGPRectF;
  ItemAppearance: TItemAppearance);
begin
  inherited DrawFocus(g, GetWedgeRect(ARect), ItemAppearance);
end;


function TMPWedgeItem.DrawText(g: TGPGraphics; ARect: TGPRectF;
  ItemAppearance: TItemAppearance; DoText: Boolean = true): TGPRectF;
begin
  Result := inherited DrawText(g, GetWedgeRect(ARect), ItemAppearance, DoText);
end;

function TMPWedgeItem.GetClassType: TComponentClass;
begin
  Result := TMPWedgeItem;
end;

function TMPWedgeItem.GetVersionNr: integer;
begin
  Result := MakeLong(MakeWord(BLD_VER,REL_VER),MakeWord(MIN_VER,MAJ_VER));
end;

function TMPWedgeItem.GetWedgeRect(ARect: TGPRectF): TGPRectF;
begin
  Result := ARect;
  if (self.State in WedgeStates) then
  begin
    if wpRight in WedgePositions then
    begin
      Result.Width := Result.Width - WedgeSize;
    end;

    if wpLeft in WedgePositions then
    begin
      Result.X := Result.X + WedgeSize;
      Result.Width := Result.Width - WedgeSize;
    end;
  end;
end;

procedure TMPWedgeItem.SetWedgePositions(const Value: TWedgePositions);
begin
  if FWedgePositions <> Value then
  begin
    FWedgePositions := Value;
    Changed;
  end;
end;

procedure TMPWedgeItem.SetWedgeSize(const Value: integer);
begin
  if FWedgeSize <> Value then
  begin
    FWedgeSize := Value;
    Changed;
  end;
end;

procedure TMPWedgeItem.SetWedgeStates(const Value: TItemStates);
begin
  if FWedgeStates <> Value then
  begin
    FWedgeStates := Value;
    Changed;
  end;
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:29 Uhr.
Seite 1 von 2  1 2      

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