AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Delphi XE2 eigene Klasse nicht gefunden

Ein Thema von trashcandesign · begonnen am 22. Feb 2012 · letzter Beitrag vom 22. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2   
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#1

Delphi XE2 eigene Klasse nicht gefunden

  Alt 22. Feb 2012, 10:19
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.459 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Delphi XE2 eigene Klasse nicht gefunden

  Alt 22. Feb 2012, 10:21
Ist die Unit auch im Bibliothekspfad zu finden?
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
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Delphi XE2 eigene Klasse nicht gefunden

  Alt 22. Feb 2012, 10:34
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Delphi XE2 eigene Klasse nicht gefunden

  Alt 22. Feb 2012, 10:37
Den Pfad zum Source in den Suchpfad und den Pfad zu den compilierten Teilen (dcu) in den Bibliothekspfad
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.459 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Delphi XE2 eigene Klasse nicht gefunden

  Alt 22. Feb 2012, 10:39
Das verwechsel ich jedes Mal, es muss schwer sein, sich 2 Werte zu merken
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
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Delphi XE2 eigene Klasse nicht gefunden

  Alt 22. Feb 2012, 10:50
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.
Miniaturansicht angehängter Grafiken
suchpfad.jpg   bibliothekspfad.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.459 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Delphi XE2 eigene Klasse nicht gefunden

  Alt 22. Feb 2012, 10:53
Wieso in den Suchpfad der Projektoptionen und nicht in den Delphi-Suchpfad?
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
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Delphi XE2 eigene Klasse nicht gefunden

  Alt 22. Feb 2012, 10:54
War nur eine Eingebung... gut, keine wirklich gute
In den Delphi Einstellungen bewirkt es auch nichts....
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.459 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Delphi XE2 eigene Klasse nicht gefunden

  Alt 22. Feb 2012, 10:56
*Pfuh* das Package ist nicht irgendwie in den DisabledPackages gelandet? Sonst fällt mir langsam auch nichts mehr ein.
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
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#10

AW: Delphi XE2 eigene Klasse nicht gefunden

  Alt 22. Feb 2012, 11:06
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 06:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf