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.
- Quick and Dirty
- 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:
- Laufzeitpackage kompilieren. (Installieren geht nicht, da es nix zu installieren gibt.)
- Entwurfszeitpackage kompilieren
- 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.