Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#35

Re: .dcu Datei aus .pas erstellen

  Alt 8. Jan 2007, 21:43
Zitat von Yheeky:
Hi jbg,
wow, super Beschreibung...danke, dass du dir soviel Zeit genommen hast.
Klingt auch alles logisch, nur leider wird immer noch die Proxies.dcu vermisst
Hallo, ich habe Deine PN erhalten und antworte hier:

jbg hat Recht! So wie er es beschrieben hat funktioniert es.

Es gibt nur eine kleine Tücke, die der Programmierer eingebaut hat.
Er verwendet den Property Editor in der Komponente.
So was macht man nicht !!!

Es gibt wie immer im Leben mehrere Lösungen.
Ich stelle hier 2 Lösungen vor.
  1. Quick and Dirty
  2. So wird's richtig gemacht
Beim Ansehen des Quelltextes sieht man es geht eigentlich "nur" um den About Box Dialog der Komponente.

Im Property Editor steht bei About nur ein "(About)", wenn man in die Property geht, erscheint ein Button mit 3 Punkten [...].
Wird auf diesen Button gedrückt, erscheint ein Dialog in dem die Versionsnummer und das Copyright des Autors zu lesen ist.
  • Lösung 1: Quick and Dirty
    • Ansatz: "Wozu brauch ich einen About Dialog. Ist mir ja egal, wer die Komponente programmiert hat."
    • Vorgehensweise wie bei jbg:
      Entferne alles, was der Compiler anmeckert.
      Ich habe es durch Voranstellen eines "//" auskommentiert.
    • nur ein Package, das kann ein Entwurfs- und Laufzeitpackage sein.
    • -> Datei: "Quick and Dirty.zip" im Anhang
  • Lösung 2: So wird's richtig gemacht
    • Ansatz: "Ich möchte die Funktion des About Dialogs erhalten."
    • Vorgehensweise wie bei jbg:
      Entferne alles, was der Compiler anmeckert.
      Ich habe es durch Voranstellen eines "//" auskommentiert.
    • Ausnahmen:
      Delphi-Quellcode:
      ...
      type
        TSmartListView = class(TListView)
        private
      // FAbout: TAboutButtonProperty;
      // neues About Property
          FAbout: string;
      //--
      ...
      published
      ...
      // property About: TAboutButtonProperty read FAbout write FAbout;
      // neues About Property
          property About: string read FAbout write FAbout;
      //--
        end;
      ...
      Zusätzlich wird die komplette Register Procedure entfernt.
      Das Ganze wird in ein Package gepackt, was in den Optionen als "Laufzeitpackage" gekennzeichnet wird.
      Das Package kompiliert -> fertig mit dem Laufzeitpackage.
    • Nun brauchen wir ein Entwurfszeitpackage.
      In das Entwurfszeitpackage fügen wir nun die auskommentierten Stellen des Quelltextes ein.
    • Wichtig: Die Unit mit der Komponente muss natürlich in der uses Zeile eingebunden werden.
    • Wichtig: Die Zeile mit dem RegisterPropertyEditor muss geändert werden.
      Da die Eigenschaft About in der Komponente nun vom Typ string ist, muss beim Zuweisen des PropertyEditor natürlich auch string angegeben werden. -> TypeInfo(string)

      Das Package wird als Entwurfszeitpackage gekennzeichnet und lässt sich nun kompilieren.
    • -> Datei: "So wirds richtig gemacht.zip" ist im Anhang
    • Installation:
      1. Laufzeitpackage kompilieren. (Installieren geht nicht, da es nix zu installieren gibt.)
      2. Entwurfszeitpackage kompilieren
      3. Entwurfszeitpackage installieren -> Fertig

    Delphi-Quellcode:
    ...
    unit SmartListView_AboutDialog;

    interface

    uses
      Forms, Classes, Windows, SysUtils, SmartListView, DesignIntf, DesignEditors;

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

    procedure Register;

    implementation

    procedure Register;
    begin
      RegisterComponents('Samples', [TSmartListView]);
      RegisterPropertyEditor(TypeInfo(string), TSmartListView, 'ABOUT', TAboutButtonProperty);
    end;

    procedure TAboutButtonProperty.Edit;
    var
       AboutTitle,
       AboutDesc: String;
    begin
       AboutTitle := 'About TSmartListView';
       AboutDesc := 'TSmartListView (Version 1.01)'+
       ^M^M+'Copyright © 1999 by Fabio De Pasquale'+
       ^M+ '<depa@pronet.it>'+
       ^M+ '<mes@freemail.it>' +
       ^M+ 'Check "http://members.xoom.com/MadElectron"'+
       ^M+ 'for latest version.';

       Application.MessageBox(PChar(AboutDesc), PChar(AboutTitle), MB_OK+ MB_ICONINFORMATION);
    end;

    function TAboutButtonProperty.GetAttributes: TPropertyAttributes;
    begin
        Result := [paMultiSelect, paDialog, paReadOnly];
    end;

    function TAboutButtonProperty.GetValue: string;
    begin
       Result := '(About)';
    end;


    end.
Angehängte Dateien
Dateityp: zip so_wirds_richtig_gemacht_955.zip (9,7 KB, 8x aufgerufen)
Dateityp: zip quick_and_dirty_954.zip (6,4 KB, 6x aufgerufen)
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat