![]() |
Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.dcu
Das leidige Problem mit der DsgnIntf bzw. Proxy.dcu
In Delphi 5 Komponenten wird oft die Unit DsgnIntf verwendet. Damit ist es möglich "Component-" und "Propertyeditoren" zu programmieren, die dann in der IDE ausgeführt werden. Diese Design-Editoren sind ausschließlich für die IDE lizenziert und dürfen nicht in die eigenen Programme, welche außerhalb der IDE laufen eingebunden werden. Da es einige Verstöße (meistens wohl aus Unwissenheit) gab, wurden die Units getrennt und durch "Compiler-Magic" können die Editoren jetzt nicht mehr in Programme außerhalb der IDE eingebunden werden. Wenn keine Laufzeit-BPLs erstellt werden müssen, ist die Lösung relativ einfach: Aus dem Eintrag DsgnIntf in der Uses Anweisung wird einfach DesignIntf, DesignEditors. In das Package wird dann automatisch die teilweise benötigte designide.dcp eingefügt. Und alles läuft wieder. Falls es dennoch zu der Fehlermeldung "DesignIntf.dcu konnte nicht gefunden werden" (oder "DesignEditors.dcu konnte nicht gefunden werden") auftritt, ist der Pfad (C:\Programme\Borland\Delphi7\Source\ToolsAPI)zu den Dateien nicht im Suchpfad. Falls die Meldung "Proxy.dcu konnte nicht gefunden werden" auftritt, muss die designide.dcp dem Package hinzugefügt werden. (requires designide im dpk) Damit sollten sich die Komponenten kompilieren lassen. Abschließend ein Link zum BDN - wo etwas tiefer in die Materie eingegangen wird. (englisch) ![]() Quellcode für D5 und D7 erstellen Mit einer einfachen $IFDEF kann man Quelltext erstellen, der unter Delphi 5 und Delphi 7 kompiliert.
Delphi-Quellcode:
Dieses einfache Verfahren hat aber den Nachteil, dass es nur zwischen Delphi 7 und dem Rest unterscheidet.
{$ifdef ver150}
DesignIntf, DesignEditors, {$else} DsgnIntf, {$endif} Besser ist folgendes Verfahren: Bei der JCL bzw. JVCL gibt es eine JEDI.inc Datei die einfach eingebunden werden kann. Hier werden Symbole definiert. (z.B. DELPHI6_UP bedeutet Delphi 6 oder neuer)
Delphi-Quellcode:
Die JEDI.INC Datei kann hier bezogen werden:
uses unit1;
{$I JEDI.inc} interface uses Unit1, {$IFDEF DELPHI6_UP}DesignIntf, DesignEditors{$ELSE} DsgnIntf{$ENDIF}, Unit3, Unit4; ... ![]() |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Man lese auch hier:
![]() ...:cat:... P.S.: Das Problem ist, dass die Leute die fragen einfach nie suchen :roll: |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
|
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
http://www.delphipraxis.net/images/common/icon_dp.gif ![]() |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
...:cat:... |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
|
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Tolles Tutorial. In Delphi 7 Personal, was ich von der c't-CD habe, ist die DesignIntf aber nicht dabei, glaube ich.
Sie wird nicht gefunden! Ein Verzeichnis "ToolsAPI" existiert garnicht. Edit: Langsam werd ich wahnsinnig. Hab jetz n Delphi 3 Pro installiert um von da die DCU zu nehmen. Aber jetz kanna die PAS nicht kompilieren weil "TDesigner" fehlt... Verdammt nochmal... |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
Aber die Unit sollte es sogar bei der Personal geben... |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Tada. Gibt es sie aber nicht :wall:
|
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Hier eine erweiterte Version, da es noch ein paar Probleme mehr gibt ;-)
Das leidige Problem mit der DsgnIntf bzw. Proxy.dcu In Delphi 5 Komponenten wird oft die Unit DsgnIntf verwendet. Damit ist es möglich "Component-" und "Propertyeditoren" zu programmieren, die dann in der IDE ausgeführt werden. Diese Design-Editoren sind ausschließlich für die IDE lizenziert und dürfen nicht in die eigenen Programme, welche außerhalb der IDE laufen eingebunden werden. Da es einige Verstöße (meistens wohl aus Unwissenheit) gab, wurden die Units getrennt und durch "Compiler-Magic" können die Editoren jetzt nicht mehr in Programme außerhalb der IDE eingebunden werden. Wenn keine Laufzeit-BPLs erstellt werden müssen, ist die Lösung relativ einfach: Aus dem Eintrag DsgnIntf in der Uses Anweisung wird einfach DesignIntf, DesignEditors. In das Package wird dann automatisch die teilweise benötigte designide.dcp eingefügt. Und alles läuft wieder. Falls es dennoch zu der Fehlermeldung "DesignIntf.dcu konnte nicht gefunden werden" (oder "DesignEditors.dcu konnte nicht gefunden werden") auftritt, ist der Pfad (C:\Programme\Borland\Delphi7\Source\ToolsAPI)zu den Dateien nicht im Suchpfad. Falls die Meldung "Proxy.dcu konnte nicht gefunden werden" auftritt, muss die designide.dcp dem Package hinzugefügt werden. (requires designide im dpk) Damit sollten sich die Komponenten kompilieren lassen. Beim Benutzen der Komponenten wird Delphi aber wieder Probleme haben die Property Editoren in die Exe Datei einzubinden. Eine relativ einfache Möglichkeit ist es die Property- bzw. Component Editoren von der Komponente zu trennen. Dazu wird der DesignIntf, DesignEditors Abschnitt, der Quelltext der Property- und Component Editoren einfach aus der Datei entfernt und in eine neue Unit geschrieben. Der Unitname sollte dann unitname_dsgn.pas lauten. Dann ist klar was in der Unit enthalten ist. Es ist ratsam auch die Register Prozedur in die unitname_dsgn zu verschieben. Abschließend ein Link zum BDN - wo etwas tiefer in die Materie eingegangen wird. (englisch) ![]() Quellcode für D5 und D7 erstellen Mit einer einfachen $IFDEF kann man Quelltext erstellen, der unter Delphi 5 und Delphi 7 kompiliert.
Delphi-Quellcode:
Dieses einfache Verfahren hat aber den Nachteil, dass es nur zwischen Delphi 7 und dem Rest unterscheidet.
{$ifdef ver150}
DesignIntf, DesignEditors, {$else} DsgnIntf, {$endif} Besser ist folgendes Verfahren: Bei der JCL bzw. JVCL gibt es eine JEDI.inc Datei die einfach eingebunden werden kann. Hier werden Symbole definiert. (z.B. DELPHI6_UP bedeutet Delphi 6 oder neuer)
Delphi-Quellcode:
Die JEDI.INC Datei kann hier bezogen werden:
uses unit1;
{$I JEDI.inc} interface uses Unit1, {$IFDEF DELPHI6_UP}DesignIntf, DesignEditors{$ELSE} DsgnIntf{$ENDIF}, Unit3, Unit4; ... ![]() Ein vollständiges Beispiel: myLabel.pas:
Delphi-Quellcode:
Das lässt sich nun im Package mit Delphi 7 kompilieren.
unit myLabel;
interface uses {$ifdef ver150} DesignIntf, DesignEditors,{$else} DsgnIntf,{$endif} SysUtils, Classes, Controls, StdCtrls; type TmyLabelCaptionPropEditor = class(TStringProperty) public procedure Edit; override; function GetAttributes: TPropertyAttributes; override; end; TmyLabel = class(TLabel) private { Private-Deklarationen } protected { Protected-Deklarationen } public { Public-Deklarationen } procedure About; published { Published-Deklarationen } end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TmyLabel]); RegisterPropertyEditor(TypeInfo(TCaption), TmyLabel, 'Caption', TmyLabelCaptionPropEditor); end; { TmyLabelCaptionPropEditor } procedure TmyLabelCaptionPropEditor.Edit; begin inherited; SetStrValue(DateTimeToStr(now)); Modified; end; function TmyLabelCaptionPropEditor.GetAttributes: TPropertyAttributes; begin Result:= [paDialog]; end; { TmyLabel } procedure TmyLabel.About; begin MessageDlg('myLabel v1.0 (c) 2004, MaBuSE', mtInformation, [mbOk], 0); end; end. verwendet man nun aber TmyLabel und kompiliert die Anwendung, so gibt es den Fehler Fehlermeldung: [Fataler Fehler] DesignEditors.pas(530): Datei nicht gefunden: 'Proxies.dcu' Die Unit mylabel.pas muss nun in 2 units gesplittet werden: unit myLabel_dsgn.pas:
Delphi-Quellcode:
und myLabel.pas:
unit myLabel_dsgn;
interface uses SysUtils, Classes, Controls, {$ifdef ver150} DesignIntf, DesignEditors,{$else} DsgnIntf,{$endif} myLabel; type TmyLabelCaptionPropEditor = class(TStringProperty) public procedure Edit; override; function GetAttributes: TPropertyAttributes; override; end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TmyLabel]); RegisterPropertyEditor(TypeInfo(TCaption), TmyLabel, 'Caption', TmyLabelCaptionPropEditor); end; { TmyLabelCaptionPropEditor } procedure TmyLabelCaptionPropEditor.Edit; begin inherited; SetStrValue(DateTimeToStr(now)); Modified; end; function TmyLabelCaptionPropEditor.GetAttributes: TPropertyAttributes; begin Result:= [paDialog]; end; end.
Delphi-Quellcode:
Nun funktioniert der Property Editor und das Kompilieren der Anwendung :-)
unit myLabel;
interface uses SysUtils, Classes, Controls, StdCtrls, Dialogs; type TmyLabel = class(TLabel) private { Private-Deklarationen } protected { Protected-Deklarationen } public { Public-Deklarationen } procedure About; published { Published-Deklarationen } end; implementation { TmyLabel } procedure TmyLabel.About; begin MessageDlg('myLabel v1.0 (c) 2004, MaBuSE', mtInformation, [mbOk], 0); end; end. |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Ich hab auch in D7 keinen ToolsAPI-Ordner ...
Da hilft auch das Update nichts :( Brauch doch nur nen gescheiten Unicode-Handler :/ |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
Code:
Das ist der Baum ;-)
C:\Programme\Borland\Delphi7\Source\ToolsAPI>dir
Volume in Laufwerk C: hat keine Bezeichnung. Volumeseriennummer: MAB-USE Verzeichnis von C:\Programme\Borland\Delphi7\Source\ToolsAPI 12.10.2004 09:35 <DIR> . 12.10.2004 09:35 <DIR> .. 23.08.2002 08:00 7.363 ClxDesignWindows.pas 23.08.2002 08:00 24.762 ClxEditors.pas 23.08.2002 08:00 7.904 ClxSprigs.pas 23.08.2002 08:00 1.979 DesignConst.pas 23.08.2002 08:00 90.415 DesignEditors.pas 23.08.2002 08:00 48.713 DesignIntf.pas 23.08.2002 08:00 5.057 DesignMenus.pas 23.08.2002 08:00 6.460 DesignWindows.pas 23.08.2002 08:00 29.968 EditIntf.pas 23.08.2002 08:00 6.534 ExptIntf.pas 23.08.2002 08:00 3.931 FileIntf.pas 23.08.2002 08:00 5.286 IStreams.pas 23.08.2002 08:00 14.609 PropertyCategories.pas 23.08.2002 08:00 26.086 ToolIntf.pas 23.08.2002 08:00 164.917 ToolsAPI.pas 23.08.2002 08:00 70.675 TreeIntf.pas 23.08.2002 08:00 45.121 VCLEditors.pas 23.08.2002 08:00 7.812 VCLSprigs.pas 23.08.2002 08:00 3.539 VcsIntf.pas 23.08.2002 08:00 1.694 VirtIntf.pas 20 Datei(en) 572.825 Bytes 2 Verzeichnis(se), 23.435.892.620.288 Bytes frei
Code:
C:\Programme\Borland\Delphi7>tree /A
Auflistung der Ordnerpfade Volumenummer: MAB:USE C:. +---Bin | +---Netscap3 | +---Netscp35 | +---Netscp36 | \---Netscp41 +---Demos | +---ActionBands | | +---AlphaBlendMenus | | +---DynaActionBands | | \---MRU | +---Actions | +---ActiveX | | +---COM+Event | | | +---Event | | | +---Publisher | | | \---Subscriber | | +---OleAuto | | | +---AutoCtrl | | | +---AutoServ | | | +---SrvComp | | | | +---PowerPoint | | | | \---Word | | | \---Word8 | | +---OleCtnrs | | +---ShellExt | | +---SvrExtra | | \---TRegSvr | +---Ado | | +---AdoTest | | +---Briefcase | | +---Rds | | \---Shape | +---AppEvents | +---Clx | | +---BasicEd | | +---ClxExplorer | | +---QuickStart | | +---StopWatch | | \---TextBrowser | +---ConvertIt | +---CoolStuf | +---Corba | | \---Idl2Pas | | +---Account DOS | | +---Account GUI | | +---Any | | +---Arrays | | +---Attributes | | +---Callbacks | | +---CosNaming40 | | +---EJB | | | \---euroconverter | | | \---Java | | | +---classes | | | | +---currencyconverter | | | | +---dependency cache | | | | \---Generated Source | | | | \---currencyconverter | | | \---src | | | \---currencyconverter | | +---Event Service | | | +---Pull Demo | | | +---Push Demo | | | \---Templates | | +---Exceptions | | +---Midas XML | | +---Multiple Inheritence | | +---NestedModules | | +---Sequences | | +---Single Inheritence | | +---Structs | | \---Unions | +---Cpl | | \---Date | +---CustomDraw | +---Db | | +---BkQuery | | +---CacheDup | | +---CsDemos | | +---CtrlGrid | | +---DbErrors | | +---DbxExplorer | | +---Filter | | +---FishFact | | +---GdsDemo | | +---IBDemo | | +---IBMastApp | | +---IBX | | | +---Admin | | | +---CachedUp | | | +---IBSilentInstall | | | +---IBXEvents | | | +---SQLMonitor | | | \---ThreadedIBX | | +---MastApp | | +---MtsPool | | +---SQLClientDataset | | \---TextData | +---DbClx | | +---fishfact | | +---frames | | \---mybasexplorer | +---Demolbl | +---Doc | | +---Filmanex | | +---Graphex | | \---TextEdit | +---Docking | +---EarthPng | +---Football | +---Frames | | \---Db | +---ImagView | +---Indy | +---Internet | | +---ApacheConfigEditor | | +---ApacheDSO | | | +---Authentication | | | +---Authorization | | | +---DBModule | | | +---Hello | | | +---logging | | | \---ModuleInit | | +---CGIs | | | +---demo_bin | | | +---demo_html | | | \---demo_src | | | +---PageProducerCGI | | | +---PortScanner | | | \---WebRequestCGI | | +---NetChat | | +---rexec | | +---WebServ | | | +---Apache | | | \---IIS | | +---XMLTransform | | +---XMLTransformClient | | +---XMLTransformParam | | \---XMLTransformProvider | +---IntraWeb | | +---Features | | | +---Downloads | | | +---Files | | | \---Templates | | +---FishFact | | +---FishFactDM | | +---FormData | | +---Guess | | +---GuessWB | | +---Phonetics Customer Profiler | | | +---Files | | | \---Templates | | \---WebSnapSurvey | +---Ipcdemos | +---Midas | | +---Activefm | | +---AdHoc | | +---Aggregate | | +---Alchtest | | +---Brfcase | | +---EmpEdit | | +---InternetExpress | | | +---CustomerList | | | +---InetXCenter | | | +---InetXCustom | | | \---TroubleShoot | | +---Intrcpt | | +---Login | | +---MstrDtl | | +---Pooler | | +---SetParam | | \---SharedConn | +---Oracle8 | | \---OrTypes | +---Ownerlst | +---PropEdit | +---Quickrpt | | +---Qr2 | | \---Qr3 | +---ResXplor | +---RichEdit | | +---Deu | | +---Enu | | \---Fra | +---ShellControls | +---Swat | +---TeeChart | +---Threads | +---ToolsAPI | | +---ActionServices | | +---Editor Keybinding | | | \---Emacs | | +---INTAServices | | +---PackageDemo | | \---XPAppWiz | +---Virtual Listview | +---WebServices | | +---DBServer | | +---EchoService | | | +---Client | | | \---Server | | | \---Data | | +---IssuesSample | | +---PostTool | | +---SOAPAttachments | | | +---Client | | | \---Server | | +---SOAPDataModule | | | +---Client | | | +---Data | | | \---Server | | \---SOAPHeaders | | +---client | | \---server | \---WebSnap | +---ActionField | +---ActionFieldTest | +---BioLife | +---CountryEditor | +---CountryReport | +---DBExpress | +---DispHandlers | +---DumpModules | +---Images | +---ImgBtnCountryEditor | +---ImgBtnProducer | +---Include | +---InternetExpress | +---LocateFileService | +---MasterDetail | +---MinApp | +---PhotoGallery | +---ProducerTemplates | +---ScriptObject | +---ScriptObjectTest | +---SessionTest | +---SimpleAdapter | +---TestSvrInfo | +---Tutorials | +---Util | +---WebDispatcher | +---WebMail | +---XMLBiolife | +---XMLBuilder | \---XSLProducer +---Doc +---Help | +---Examples | | +---BatchMv | | +---BatchMv2 | | +---Bitmap | | +---Combobox | | +---Jpeg | | +---Menu | | +---Menu2 | | +---Prgrsbar | | +---RegIni | | +---Scrollba | | +---TabCntrl | | \---Update | +---IntraWeb | \---Tools +---Imports | \---Idl +---Lib | +---Debug | | \---IDL45 | +---Delphi2 | \---IDL45 +---MergeModules +---Objrepos | +---CLXMdiApp | +---IntraWeb | | +---Apache | | +---Apache2 | | +---AppForm | | +---Icons | | +---ISAPI | | +---PageForm | | +---StandAlone | | \---StandAloneDM | +---LogoApp | +---MdiApp | +---SdiApp | \---Win2KApp +---Ocx | +---Chartfx | +---Isp | +---Servers | \---Vci | +---Form1 | +---Impress | \---VSpell +---Projects | \---Bpl +---Rave5 | +---DataLinks | +---Demos | +---Help | +---Lib | \---Server \---Source +---Clx +---Decision Cube +---Indy +---Internet +---IntraWeb +---Property Editors +---Rtl | +---Common | +---Corba45 | +---Sys | \---Win +---Samples +---Soap +---ToolsAPI +---Vcl +---WebMidas +---WebSnap \---Xml |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
das hilft mir nur recht wenig, weil mir das keine ToolsAPI bringt ^^
|
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
Aber evtl findet sich ja jemand, der Deine Komponenten kompiliert. Die erzeugten *.bpl. *.dcu und *.dcp kannst Du dann in Delphi einbinden und benutzen. Das funktioniert! Oder noch besser, schau mal nach, ob Du die Datei designide.dcp hast. Wenn Du die im required bei dem Package einträgst, braucht er die Dateien auch nicht. Siehe Tutorial. ich schrieb im Tutorial In das Package wird dann automatisch die teilweise benötigte designide.dcp eingefügt. Und alles läuft wieder. Probier das mal bitte aus. Ich werde dann das Tutorial anpassen. |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Hey die hab ich. Einfach mit einbinden und dann soll das funzen?!
|
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Ich raff nich wo ich das bei der Komponente eintragen soll...
|
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
die datei hab ich aber das package hat kein requires und ich weiß auch net so recht wohin damit :/
läuft das mit dem ToolsAPI Ordner von D6? |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Liste der Anhänge anzeigen (Anzahl: 3)
Zitat:
Ich habe mal das Beispiel von Oben vervollständigt. Die drei Dateien habe ich unten nochmal als Atachment gepostet. Bitte mit Delphi 6 / 7 Personal ausprobieren und Feedback hier ins Forum. Ich werde dann das Tutorial anpassen. Datei: myLabel.pas (s.o.) Datei: myLabel_dsgn.pas (s.o.) Datei: Package1.dpk (s.u.)
Delphi-Quellcode:
package Package1;
{$R *.res} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS OFF} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$IMPLICITBUILD OFF} requires rtl, designide; contains myLabel_dsgn in 'myLabel_dsgn.pas', myLabel in 'myLabel.pas'; end. |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
Danke. |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
und dann kein Feedback bekommt, ob es geklappt hat :cry: |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Hi!
Zitat:
Ich hoffe Du beobachtest Deinen Thread noch... Grüße von TOC! |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
|
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
@TOC: D7 macht nicht solche Probleme !!! Nur die Personal Edition ist abgespeckt, weil kostenlos. Klappts? |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Hi!
Zitat:
Hab aus versehen die Diskette mit Deiner Label-Komponente gelöscht und konnte es nit Testen :pale: ! Hab´s mir aber grad noch mal runtergeladen. Vielen Dank für Deinen Thread, Du hast mir echt weitergeholfen. Nämlich mit dem Link auf Borlands Erklärung zu dem Thema. Ich hab mir das aufmerksam durchgelesen und nur eine Stunde (!) gebraucht um meine TDataList-Komponente unter D7 zum laufen zu bringen. Aber wer kein English kann hat geloost :oops: ! Demnächst gibts in OpenSource ´nen neuen Thread mit all meinen Komponenten im Packet für Delphi 3.0 oder 7.0 :drunken: ! Danke nochmal :thumb: ! Grüße von TOC |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
Ich habe gar kein Diskettenlaufwerk mehr im Rechner :mrgreen: Zitat:
Zitat:
Dann kann ich dieses Tutorial noch mal in einen Text zusammenfassen. Danke |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Hi Mabuse!
Zitat:
Zitat:
Zitat:
Allerdings mußte ich die Komponente mit 'Komponente/Komponente installieren' einbinden, weil das mit Deinem Package1.dpk nit klappt. Folgendes steht in Deinem Package :
Delphi-Quellcode:
Und das versteh ich nit! Diese Units 1 und 2 fehlen aber. Im Packet sollte aber folgendes stehen:
package Package1;
{$R *.res} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS OFF} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$IMPLICITBUILD OFF} requires rtl; contains Unit1 in 'Unit1.pas', Unit2 in 'Unit2.pas'; end.
Delphi-Quellcode:
So stehts ja auch in Deinem Beispiel. Das sollte funktionieren wenn man einfach doppelt aufs Packet klickt!
requires
rtl, designide; contains myLabel_dsgn in 'myLabel_dsgn.pas', myLabel in 'myLabel.pas'; end. Hast Du vielleicht aus versehen einen Fehler beim UpLoad gemacht? Oder hab ich was falsch verstanden? Grüße von TOC! |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
Ich werde das Tutorial bei Gelegenheit überarbeiten und hier posten. Danke für die Info. |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Hi!
Zitat:
Noch mal Danke für Deine Thread :thumb: ! Grüße von TOC! |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Ich habe alle Tipps in diesem Thread verfolgt, bekomme aber ein Designtime Package (AsyncPro) nicht unter Delphi 2005 Personal zum Laufen. Hat jemand eine Idee, was der Grund sein kann?
DesignIntf, DesignEditors und DsgnIntf gibt's nicht, designide.dcp ist als required eingebunden. Nachdem ich alle Designsachen (außer aus dem required) rausgenommen habe, ist der Compiler bis zu folgender Zeile vorgestoßen: TApdPacketStringProperty = class(TStringProperty) Er findet nun "TStringProperty" nicht. Ideen? |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
Designpackages werden nur von der IDE verwendet. In Designpackages sind z.B. Komponenteneditoren, Eigenschaftseditoren, ... definiert. Designpackages dürfen nicht in Laufzeitprojekte eingebunden sein. Dann lassen sich die Laufzeitprojekte nicht mehr kompilieren. Tip: Schau mal nach, ob Das Package wirklich nur als Designtimepackage definiert ist, oder evtl. als Runtimpackage oder Run- und Desgintimepackage. |
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. |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
Ich habe hier im Moment keine D2005 PE zur Hand |
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. |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
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. |
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. |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
Zitat:
Zitat:
Die PDF einfach als Attachment Deinem Beitrag hinzufügen. (über dem [Absenden] Button im Beitragseditor) |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Hier noch mal ein paar weitere Hinweise zu den Packages und den Units:
Viel Spaß MaBuSE |
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: |
Re: Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.
Zitat:
![]() |
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:
Welche Teile müssten den nun in den dsgn teil ausgelagert werden? :gruebel:
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; 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 16:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz