Ik ben bezig als klein onderdeeltje voor mijn afstudeer stage met een component wat directories scant op veranderingen. Niet zo bijzonder, en dat deel was dan ook vrij snel klaar.
Echter, het component moet zowel voor de VCL als voor de CLX bruikbaar zijn. Normaal geen probleem, zolang je geen dingen gebruikt die specifiek voor 1 van die twee libraries is geimplementeerd. En dat is dus wel het geval.
Ik maak intern in het component gebruik van een TTimer object, die elke seconde een functie in mijn component aanroept. Dat werkt prima. Het probleem is echter dat TTimer voor de VCL in ExtCtrls zit en voor de CLX in QExtCtrls, dus in beide gevallen heb ik een andere uses clause nodig. Ik kan dit niet compile time bepalen door te kijken of het platform MSWINDOWS of LINUX is, aangezien onder windows ook gewoon van de CLX versie gebruik gemaakt moet kunnen worden.
Om dit op te lossen was mijn idee om 2 packages te maken, 1 voor de VCL en 1 voor de CLX. Hierbij zou Delphi dan zelf wel zorgen dat de juist versie op het componenten tabblad verschijnt.
Om dit een beetje fatsoenlijk voor elkaar te krijgen heb ik dus een 3 tal files aangemaakt, op de onderstaande manier:
VCL:
CLX:
Globaal:
Hierbij zijn de VCL en de CLX unit dus beide opgenomen in een aparte package.
Ik kan beide packages ook prima compileren, en dan werken ze ook.
Het probleem komt echter wanneer ik beide packages wil installeren, dus gaat dus niet. Bij de 2e package die ik wil installen klaagt delphi dat er al een component met dezelfde naam aanwezig is. Opzich logisch, maar in dit geval wil ik dat dus juist wel voor elkaar krijgen omdat het om 2 verschillende versies gaat, elk afhankelijk van een andere library.
Ik ben al flink aan het zoeken geweest naar een oplossing hiervoor, o.a. in de sources van bijvoorbeeld die TTimer zelf maar daar kan ik dus nergens een Register functie van vinden. Dus ik vermoed dat ze voor de eigen grafische componenten een andere methode gebruiken om de component te registreren op het Componenten tabblad.
Iemand die enig idee heeft hoe ik dit het beste kan aanpakken of me in ieder geval de juiste richting op kan sturen?
Het gaat hier overigens om Delphi 6 waar ik gebruik van maak.
Echter, het component moet zowel voor de VCL als voor de CLX bruikbaar zijn. Normaal geen probleem, zolang je geen dingen gebruikt die specifiek voor 1 van die twee libraries is geimplementeerd. En dat is dus wel het geval.
Ik maak intern in het component gebruik van een TTimer object, die elke seconde een functie in mijn component aanroept. Dat werkt prima. Het probleem is echter dat TTimer voor de VCL in ExtCtrls zit en voor de CLX in QExtCtrls, dus in beide gevallen heb ik een andere uses clause nodig. Ik kan dit niet compile time bepalen door te kijken of het platform MSWINDOWS of LINUX is, aangezien onder windows ook gewoon van de CLX versie gebruik gemaakt moet kunnen worden.
Om dit op te lossen was mijn idee om 2 packages te maken, 1 voor de VCL en 1 voor de CLX. Hierbij zou Delphi dan zelf wel zorgen dat de juist versie op het componenten tabblad verschijnt.
Om dit een beetje fatsoenlijk voor elkaar te krijgen heb ik dus een 3 tal files aangemaakt, op de onderstaande manier:
VCL:
Delphi:
1
2
3
4
5
6
7
8
| unit untDirectoryMonitor; interface uses Classes, ExtCtrls; {$INCLUDE 'untDirectoryMonitorShared.pas'} |
CLX:
Delphi:
1
2
3
4
5
6
7
8
| unit untQDirectoryMonitor; interface uses Classes, QExtCtrls; {$INCLUDE 'untDirectoryMonitorShared.pas'} |
Globaal:
Delphi:
1
2
3
4
| type TDirectoryMonitor = class(TComponent) ... end; |
Hierbij zijn de VCL en de CLX unit dus beide opgenomen in een aparte package.
Ik kan beide packages ook prima compileren, en dan werken ze ook.
Het probleem komt echter wanneer ik beide packages wil installeren, dus gaat dus niet. Bij de 2e package die ik wil installen klaagt delphi dat er al een component met dezelfde naam aanwezig is. Opzich logisch, maar in dit geval wil ik dat dus juist wel voor elkaar krijgen omdat het om 2 verschillende versies gaat, elk afhankelijk van een andere library.
Ik ben al flink aan het zoeken geweest naar een oplossing hiervoor, o.a. in de sources van bijvoorbeeld die TTimer zelf maar daar kan ik dus nergens een Register functie van vinden. Dus ik vermoed dat ze voor de eigen grafische componenten een andere methode gebruiken om de component te registreren op het Componenten tabblad.
Iemand die enig idee heeft hoe ik dit het beste kan aanpakken of me in ieder geval de juiste richting op kan sturen?
Het gaat hier overigens om Delphi 6 waar ik gebruik van maak.
[ Voor 2% gewijzigd door CyeZ op 04-03-2003 19:43 . Reden: toevoeging delphi versie ]
[18:54] <Prammenhanger> |HunterPro|eet
[18:55] <Prammenhanger> lijkt best op
[18:55] <Prammenhanger> |HunterProFeet