Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.dcu (https://www.delphipraxis.net/33572-loesung-das-leidige-problem-mit-der-dsgnintf-bzw-proxy-dcu.html)

King555 6. Feb 2006 16:07

Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
 
Das entsprechende Package ist definitv nur ein Entwufszeitpackage, habe eben nachgeschaut. Die "designide.dcp" ist wie schon gesagt eingebunden.

Der Sinn und Zweck von Designpackages war mir schon bewusst.

MaBuSE 6. Feb 2006 16:10

Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
 
Zitat:

Zitat von King555
Das entsprechende Package ist definitv nur ein Entwufszeitpackage, habe eben nachgeschaut. Die "designide.dcp" ist wie schon gesagt eingebunden.Der Sinn und Zweck von Designpackages war mir schon bewusst.

Tut mir leid, dann kann ich Dir nicht hefen.
Ich habe hier im Moment keine D2005 PE zur Hand

MarcRB1975 17. Aug 2006 07:28

Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
 
Hallo MaBuSe,

verfolgst du das Thema noch? Hast Du vielleicht schon 2005PE zu Hand? :wink:

Ich hab nämlich auch das Problem mit DesignIntf in Delphi 2005 PE.

Ich versteh das auch nicht, weshalb dieses solche Probleme macht. Zum Beispiel hab ich eine Komponente ich 2005PE installiert, die mit dem DesignIntf problemlos zu recht kommt.
Er unterkringelt zwar DesignIntf im Source aber diese Komponente funktioniert ja auch.
Ich meine, wenn diese Komponente funktioniert, weshalb soll dann meine(unsere) Komponenten nicht reibungslos funktionieren. Es kann doch nicht sein, dass das an dem DesignIntf scheitert. Also... irgendwas machen wir doch da falsch?

Wenn es Dich interessiert, dann könnte ich dir ja mal einen Auszug des Source schicken, bei das installieren der Komponente geklappt hat. Einen Auszug deshalb, weil es sich um 4 "Units" handelt, die ich alle ausgedruckt habe. Insgesamt waren es über 100 DIN A4-Seiten. :roteyes:
Vielleicht erkennst Du ja dann als Profi, wie man das machen muss. Also... ich habe ja versucht das nachzuvollziehen, aber irgendwie klappt das nicht.
Ich muss aber dazu sagen, dass es vom Prinzip her genauso ist, wie du gesagt hast. Man muss die Units auslagern.

Wäre schön, wenn Du dich mal melden würdest.

Danke im Voraus.

MaBuSE 17. Aug 2006 08:13

Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
 
Zitat:

Zitat von MarcRB1975
verfolgst du das Thema noch? Hast Du vielleicht schon 2005PE zu Hand? :wink:

Ja ich verfolge das Thema noch. ;-)
Ich habe keine 2005 PE installiert. (nur die D2006 Ent ;-))

Ich habe im Moment nur etwas wenig Zeit :-(

Du kannst mir aber Deinen (kompilierfähigen) Source Auszug schicken. Ich schau mal drüber. Das braucht aber etwas Zeit.

Hast Du die *.dpk (Entwurfszeitpackage) im Requires angepasst?
Dort muß die designide eingebunden sein.

MarcRB1975 17. Aug 2006 18:31

Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
 
Ich glaube, das "leidige Problem mit der DsgnInft..." hat nun ENDLICH ein Ende gefunden. :bounce2:

Also... ich denke besonders als Anfänger hat man es ja nicht leicht.

Mir hat das jetzt aber absolut keine Ruhe gelassen und hab überlegt, und überlegt ... :roteyes:
Ich dachte halt, es kann nicht sein, das das absolut nicht möglich ist.

Ich habe viele Möglichkeiten/Varianten ausprobiert und siehe da.... sogar in Delphi 2005 PE (!!!) klappt das jetzt ENDLICH.

Vorab möchte ich noch schnell sagen, dass man die erstellen Packages in den LIB-Ordner kopieren muss.
Naja.. vielleicht gehts ja auch anders, wenn man irgendwo was ändert, aber so funktionierte es wenigstens.
Alle (!!) Units oder besser gesagt Packages MÜSSEN in der ENTWURFSZEIT erstellt werden.
Ich weiss, das hat MABuSE immer gesagt und so ist es ja auch schliesslich.

Also... das soo richtig zu erklären... mhhh... das fällt mir in der "Fachsprache" ja nicht einfach, weil ich mir das programmieren selbst angeeignet habe.
Damit aber andere nicht soo verzweifeln wie ich :wall: und diejenigen, denen die Geduld und die Nerven fehlen, denn man dreht da wirkich am Rad bei diesem Problem, für die werde ich morgen bzw. am Wochenende eine PDF-Datei mit Screenshorts erstellen, in der ich alles beschreiben werde.

Schritt für Schritt, dass sogar Anfänger oder die, die das nicht so schnell kapieren - so wie ich - das verstehen werden.

Wenn es dann jemanden interessiert, kann er sich die Datei runterladen.

Aber ich muss mich erst noch schlau machen, wie ich dann hier die PDF-Datei irgendwie einbinden kann, damit sie anderen zur Verfügung steht.

MaBuSE 18. Aug 2006 08:08

Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
 
Zitat:

Zitat von MarcRB1975
Ich habe viele Möglichkeiten/Varianten ausprobiert und siehe da.... sogar in Delphi 2005 PE (!!!) klappt das jetzt ENDLICH.

Herzlichen Glückwunsch :thumb:

Zitat:

Zitat von MarcRB1975
Vorab möchte ich noch schnell sagen, dass man die erstellen Packages in den LIB-Ordner kopieren muss.
Naja.. vielleicht gehts ja auch anders, wenn man irgendwo was ändert, aber so funktionierte es wenigstens.
Alle (!!) Units oder besser gesagt Packages MÜSSEN in der ENTWURFSZEIT erstellt werden.
Ich weiss, das hat MABuSE immer gesagt und so ist es ja auch schliesslich.

Nein, das ist nicht notwendig, ich erklär es nochmal in der nächsten Antwort.

Zitat:

Zitat von MarcRB1975
..., für die werde ich morgen bzw. am Wochenende eine PDF-Datei mit Screenshorts erstellen, in der ich alles beschreiben werde.
Schritt für Schritt, dass sogar Anfänger oder die, die das nicht so schnell kapieren - so wie ich - das verstehen werden.
Wenn es dann jemanden interessiert, kann er sich die Datei runterladen.
Aber ich muss mich erst noch schlau machen, wie ich dann hier die PDF-Datei irgendwie einbinden kann, damit sie anderen zur Verfügung steht.

Super. Da werden sich sicherlich einige freuen.

Die PDF einfach als Attachment Deinem Beitrag hinzufügen.
(über dem [Absenden] Button im Beitragseditor)

MaBuSE 18. Aug 2006 10:00

Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
 
Hier noch mal ein paar weitere Hinweise zu den Packages und den Units:
  • Der meisten Entwickler binden alle Units in die Anwendung ein und verwenden keine Laufzeitpackages.
    Für diese Entwickler reicht es völlig aus, wenn alle von der Komponente (/n Sammlung) benötigte Units in einem Dessingntimepackage (Entwurfszeit Package) gepackt werden.
    Dieses Package wird dann in Delphi eingebunden und die Komponenten können benutzt werden.

    Es muss beachtet werden, das die Units, die die Komponenten enthalten keine Teile der ToolsAPI (z.B. DsgnIntf) benutzen!!! Sonst bekommt man die Fehlermeldung wegen fehlender ToolsAPI Units beim Kompilieren der Anwendung.
  • Es gibt aber auch Entwickler die sogenannte Runtimepackages (Laufzeit Packages) verwenden.
    Hier müssen 2 Package erstellt werden.
    • Das Runtimepackage, das ausschließlich die Teile der Komponente beinhaltet. Es darf keine Unit enthalten sein die Teile der ToolsAPI (z.B. DsgnIntf) benutzt!!!
    • Das Designtimepackage, das das Runtimepackage einbeindet (requires) und nur die Dinge beinhaltet die die ToolsAPI benutzen. (Komponenten-Editoren, Property-Editoren, ...)
    Falls keine ToolsAPI verwendet wird kann natürlich auch ein kombiniertes Laufzeit- und Entwurfszeit Package erstellt werden.
  • Welche Dateien entstehen beim Kompilieren der Packages. und wozu sind diese gut?
    • *.bpl Dateien: BPL steht für Borland Package Library.
      Das ist eigentlich nur eine umbenannte *.dll Datei, die die eingebundenen Komponenten enthält.
      Diese Dateien sollten im Systempfad stehen. (%PATH%)
    • *.dcp Dateien: DCP steht für Delphi Compiled Package.
      In dieser Datei sind die kompilierten Informationen für den Compiler enthalten, um das Package in die Anwendung einzubinden.
      Diese Dateien sollten im Suchpfad von Delphi stehen.
      (Menü -> Tools -> Umgebungsoptionen... -> Bibliothek -> Bibliothekspfad)
    • *.dcu Dateien: Das sind die einzelnen kompilierten Units (*.pas Dateien).
      In dieser Datei sind die kompilierten Informationen für den Compiler enthalten, um die Unit in die Anwendung einzubinden.
  • Folgende Verzeichnisstruktur hat sich in der Praxis bewährt:
    Code:
    Komponentenname
    +--Source      <- hier ist der Quelltext enthalten
    !                  (z.B. MyComp_D7.dpk, MyComp_D2006.dpk, *.pas, *.res, *.dfm, ...)
    !
    +--Packages    <- hier werden die *.bpl Dateien abgelegt
    !                  (z.B. MyComp_D7.bpl, MyComp_D2006.bpl, ...)
    !
    +--LibD7        <- hier werden die kompilierten Delphi 7 Dateien
    !                  (z.B. MyComp_D7.dcp, *.dcu)
    !                  sowie eine Kopie aller verwendeten Resourcen abgelegt.
    !                  (z.B. *.dfm, *.res, *.dcr)
    !
    +--LibD2006     <- hier werden die kompilierten Delphi 2006 Dateien
    !                  (z.B. MyComp_D2006.dcp, *.dcu)
    !                  sowie eine Kopie aller verwendeten Resourcen abgelegt.
    !                  (z.B. *.dfm, *.res, *.dcr)
    !
    +--Help        <- hier liegt die Hilfe zu den Komponenten
                       (z.B. *.pdf, *.txt, *.hlp, ...)
    In der obigen Verzeichnisstruktur muß dann das Packages Verzeichnis in den Systempfad und das Lib Verzeichnis in den Delphi Suchpfad.
    Wichtig ist nur, das die *.bpl im Systempfad stehen und die *.dcu, *.dfm, ... im Delphi Suchpfad.
Ich hoffe, dass diese weiteren Informationen Euch helfen die Probleme zu meistern.

Viel Spaß
MaBuSE

MarcRB1975 19. Aug 2006 13:49

Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
 
Hallo Dr. Mabuse , :hi:

ich hab jetzt mein Tutorial fertig. Wie versprochen! :dancer:

Naja... Tutorial ist vielleicht nicht das richtige Wort. Ich habe halt alle Auszüge in eine PDF-Datei zusammengefasst, wie man vorgehen muss, damit das endlich klappt.

Eins bischen hab ich schon auch was geschrieben. :wink:

Was mich persönlich noch interessieren würde ist, wie kann man eigentlich, wenn man eine Komponente entwickelt, auf andere Zugreifen.

Also.. zum Beispiel:
Ich habe 5 Editfelder. In jedem Edit steht als Text etwas drin.

Mit einer erstellten Komponente möchte ich nun eine Listbox erzeugen, in der alle Texte der Edit´s drin stehen. In meiner Komponente, also (OI) möchte ich dann aus dieser erzeugten Listbox einen Text daraus auswählen können.
Aber irgendwie komm ich da nicht drauf.
Muss ich property als String? Edit? Listbox? festlegen? Irgendwie schaff ichs nicht.
Muss die Listbox (Createt) werden? mhhh...
:roll:

MaBuSE 21. Aug 2006 08:38

Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
 
Zitat:

Zitat von MarcRB1975
Was mich persönlich noch interessieren würde ist, wie kann man eigentlich, wenn man eine Komponente entwickelt, auf andere Zugreifen.

neues Thema -> neuer Thread
auf Komponente aus Komponente zugreifen

mandoki 10. Okt 2006 19:31

Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

habe für ein früheres Projekt die D5 Komponente ALSTipDialog verwendet. Leider gelingt es mir nicht, trotz ausführlichen Lesens der Tipps hier und des Tutorial, diese für D7 entsprechend anzupassen (Trennung des Design). Hatte mich leider nie mit der Komponentenentwicklung auseinandergesetzt (was sich nun wohl rächt). :wall:

Hier mal der erste Teil der Unit:

Delphi-Quellcode:
unit ALSTDlg;

interface

uses
  {$IFDEF WIN32}Windows,{$ELSE}WinTypes, WinProcs,{$ENDIF}
  Messages, SysUtils, Classes, Graphics, Controls, Forms,
  DesignIntf, DesignEditors, Dialogs, INIFiles{$IFDEF WIN32}, Registry{$ENDIF};

type
  TALSShowPos = (posScreenCenter, posFormCenter);
  TTipLocation = (locEmbeded, {$IFDEF WIN32}locRegistry,{$ENDIF} locINIFile);
  TRegRoot = (CURRENT_USER,LOCAL_MACHINE,CURRENT_CONFIG);

  TTipDialogEditor = class(TDefaultEditor)
  public
    procedure ExecuteVerb(Index : Integer); override;
    function GetVerb(Index : Integer): string; override;
    function GetVerbCount : Integer; override;
    procedure Edit; override;
  end;

  TAbout = class(TPropertyEditor)
  public
    procedure Edit; override;
    function GetAttributes: TPropertyAttributes; override;
    function GetValue: string; override;
  end;

  TFileNameProperty = class (TStringProperty)
  public
      function getattributes: TPropertyattributes; override;
      procedure Edit; override;
  end;


  TALSTipDlg = class(TComponent)
  private
    FAbout       : TAbout;
    FDlgCaption  : string;
    FTipTitle    : string;
    FTips        : TStrings;
    FTipTitleFont : TFont;
    FTipFont     : TFont;
    FRegRoot     : TRegRoot;
    FRegKey      : string;
    FINIFile     : string;
    FINISection  : string;
    FTipsLocation : TTipLocation;
    FPanelColor  : TColor;
    FCRLFSubst   : string;
    FRandomTips  : boolean;
    FShowAtStartup: boolean;
    FPosition    : TALSShowPos;
  protected
    {$IFDEF WIN32}
    function ReadFromRegistry : boolean;
    {$ENDIF}
    function ReadFromINIFile : boolean;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure SetTipValues(Value: TStrings);
    procedure SetTitleFont(Value: TFont);
    procedure SetTipFont(Value: TFont);
    function Execute : boolean;
  published
    property About: TAbout read FAbout write FAbout;
    property DlgCaption: string read FDlgCaption write FDlgCaption;
    property TipTitle: string read FTipTitle write FTipTitle;
    property Tips: TStrings read FTips write SetTipValues;
    property TipTitleFont: TFont read FTipTitleFont write SetTitleFont;
    property TipFont: TFont read FTipFont write SetTipFont;
    {$IFDEF WIN32}
    property RegistryRoot: TRegRoot read FRegRoot write FRegRoot default CURRENT_USER;
    property RegistryKey: string read FRegKey write FRegKey;
    {$ENDIF}
    property INIFile: string read FINIFile write FINIFile;
    property INISection: string read FINISection write FINISection;
    property TipsLocation: TTipLocation read FTipsLocation write FTipsLocation default locEmbeded;
    property PanelColor: TColor read FPanelColor write FPanelColor default
                         {$IFDEF VER120}clInfoBk {$ELSE} TColor($00E1FFFF){$ENDIF};
    property CRLFSubstitute : string read FCRLFSubst write FCRLFSubst;
    property RandomTips: boolean read FRandomTips write FRandomTips default False;
    property ShowAtStartup: boolean read FShowAtStartup write FShowAtStartup default True;
    property Position: TALSShowPos read FPosition write FPosition;
  end;

procedure Register;

implementation

uses TipFrm;
{$IFDEF WIN32}
  {$R ALSTDLG.R32}
{$ELSE}
  {$R ALSTDLG.R16}
{$ENDIF}

procedure Register;
begin
  RegisterComponents('Samples', [TALSTipDlg]);
  RegisterComponentEditor(TALSTipDlg, TTipDialogEditor);
  RegisterPropertyEditor(TypeInfo(TAbout), TALSTipDlg, 'ABOUT', TAbout);
  RegisterPropertyEditor(Typeinfo(string), TALSTipDlg, 'INIFile', TFileNameProperty);
end;
Welche Teile müssten den nun in den dsgn teil ausgelagert werden? :gruebel:

Habe 3 andere Free 'Tip of the Day' Komponenten getestet, aber leider waren diese alle nicht so funktionell und flexibel wie die ALSTipDialog.

Hat die vielleicht mal jemand bereits für Delphi 7 angepasst?
Oder kennt jemand eine ähnlich gute Komponente (keine jv,lmd,max)?


Hänge den Sourcecode der ALSTipDialog mal dran..

Gruß mandoki


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 Uhr.
Seite 4 von 5   « Erste     234 5      

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