Toon posts:

[Delphi] Nieuw component gebruiken zonder installatie?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil graag voor een programma een nieuw component maken, in dit geval bv

TMyEdit = class(TEdit)

Dit kan echter problemen geven als ik de source van het gehele project aan iemand anders geef. Bij het openen van projecten die gebruik maken van zo'n vreemd component krijgt hij meldingen als:

WARNING:
TMyEdit not found... etc

IGNORE CANCEL OK (ofzo)

(Als dat 'vreemde' component bij hem niet is geinstalleerd. Diezelfde ervaring heb ik bij freeware/shareware componenten).

Hij zal dan eerst het TMyEdit component moeten compileren en installeren in een package.

Kan dat niet wat handiger :? Dus gewoon mijn source aan iemand geven. Die drukt op RUN en klaar??? (zoals dat bij gewone units wel kan).

Tot nu toe zie ik overal die stappen van compileren an installeren (wat onhandig is en ook nogal eens fout gaat).

[ Voor 4% gewijzigd door Verwijderd op 25-04-2004 18:16 ]


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Als je wil dat iedereen met jouw component aan de gang kan gaan zonder iets van installatie kun je er toch een dll van maken ofzoiets in die geest.

Anders ontkom je denk ik niet eraan om te gaan compilen. (Eventueel kun je de zooi pre-compilen en meedistribueren.)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 01-04 18:12

Creepy

Tactical Espionage Splatterer

Als je je gehele source geeft, inclusief de unit waarin die class staat, is er niks aan de hand.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Creepy schreef op 25 april 2004 @ 19:20:
Als je je gehele source geeft, inclusief de unit waarin die class staat, is er niks aan de hand.
Ja en Nee.

Het compileren gaat inderdaad zonder problemen.

Maar als iemand het Formulier met zo'n 'vreemd' component wil wijzigen, dan moet ie eerst dat component apart installeren.

Neem bv: http://www.torry.net/pages.php?id=126 het component
Shape Label v.1.02 (3de van boven).

Als je het meegeleverde voorbeeldproject opent en probeert het formulier te openen dan krijg je:

-------------------------------------------------
ERROR READING FORM
Class TGraphLabel not found. Ignore the error and continue? NOTE: Ignoring the error may cause components to be deleted or property values to be llost.

IGNORE CANCEL IGNORE ALL
-------------------------------------------------

Lekker vriendelijk dit (NOT :( ).

Als iemand mijn programma in de toekomst moet aanpassen dan krijg je dit soort meldingen bij het openen van een formulier.

Kan je dit soort meldingen voorkomen, zonder eerst allerlei componenten te moeten installeren? :?

  • schoene
  • Registratie: Maart 2003
  • Laatst online: 21:45
je kan dit volgens mij alleen maar als je je componenten niet at-design-time op je form plaatst. Je moet dan je componenten aanmaken in je code, at-runtime

  • Domokoen
  • Registratie: Januari 2003
  • Laatst online: 23-03 14:02
Als je de component .PAS file toevoegt aan het project, dan krijg je dit niet. Niet echt een nette oplossing, maar werkt wel.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23:30

Tomatoman

Fulltime prutser

Als je een source wilt compileren, moet alles wat wordt meegecompileerd in die source aanwezig zijn. Zo niet, dan kan de source uiteraard niet gecompileerd worden. At runtime is dat heel eenvoudig. Lever gewoon alle sourcebestanden mee of de gecompileerde versies (de .dcu's). Dat kan ook in de vorm van een runtime package zijn.

In design time blijft het principe gelijk. Ook dan moeten de sources of .dcu's voor Delphi beschikbaar zijn (normaliter in de vorm van een design-time package). Het package wordt dan gecompileerd, zodat Delphi in design-time de - gecompileerde - code in het package kan uitvoeren. Als je een form waar een TGraphLabel op staat in design-time bewerkt, moet Delphi de code uitvoeren waarin de TGraphLabel class gedefinieerd is (hoe zou Delphi anders moeten weten hoe het een TGraphLabel op het form moet toveren?).

Stel nu dat je van een form alleen een gecompileerd bestand zou aanleveren. Hoe zou Delphi dan de TGraphLabel moeten weergeven als dat form wordt geopend? Daarvoor zou een design-time package geladen moeten zijn waar TGraphLabel in gedefinieerd is. Maar dat is nou juist wat jij níet hebt gedaan. Er is nu geen enkele mogelijkheid voor Delphi om het form correct weer te geven, vandaar dat je foutmeldingen krijgt.

Wil je dat het form in design-time (dus in de IDE van Delphi) geopend kan worden, dan zul je een design-time package moeten installeren. Doe je dat niet, dan kan het form niet worden bewerkt. Conclusie: wat jij wilt, is niet mogelijk.

[ Voor 4% gewijzigd door Tomatoman op 25-04-2004 20:41 ]

Een goede grap mag vrienden kosten.


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Nee, Delphi moet wel weten welke componenten er zijn en moet de code hebben, want ze worden designtime ook gewoon echt gecreerd en op het form gezet. Geen geregistreerd en geladen component in Delphi is geen designtime ondersteuning ervoor en als gevol die meldingen. De melding vind ik vrij duidelijk en ik zie niet waarom het niet vriendelijk is. Welke button je ook kiest, er wordt geen code aangepast. Pas als je het form weer opslaat ben je afhankelijk van de keuze je gegevens van de missende componenten kwijt.

Ik zie ook het probleem niet echt. Natuurlijk is het even wat werk en is het vervelend als je pas later merkt dat je nog een component mist, maar je moet gewoon altijd de code die je nodig hebt voor je programma bijelkaar houden en goed documenteren wat van welke versie je nodig hebt. Nog makkelijker is gewoon niet zoveel extra componenten gebruiken.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Mr.Chinchilla schreef op 25 april 2004 @ 20:38:
Als je de component .PAS file toevoegt aan het project, dan krijg je dit niet. Niet echt een nette oplossing, maar werkt wel.
Helaas dit werkt niet. Ik heb het geprobeerd, maar krijg dezelfde foutmelding (Class TGraphLabel not found).

Leek me op zich wel een aardige oplossing.

Verwijderd

Topicstarter
tomatoman schreef op 25 april 2004 @ 20:39:
...
Wil je dat het form in design-time (dus in de IDE van Delphi) geopend kan worden, dan zul je een design-time package moeten installeren. Doe je dat niet, dan kan het form niet worden bewerkt. Conclusie: wat jij wilt, is niet mogelijk.
Kan ik volgen, echter ik had gehoopt dat Delphi zou 'zien' dat ik het vreemde component in de source heb bijgesloten. En het dan bv automatisch zou installeren/gebruiken.

Dus ik voeg het vreemde component toe aan mijn project. Bij het openen van het formulier verwacht ik op z'n minst een melding van:

----------------------
Class TGraphLabel not found: do you want to use Unit GraphLabel.pas for this?

YES NO
----------------------

Verwijderd

Topicstarter
LordLarry schreef op 25 april 2004 @ 20:41:
...
Ik zie ook het probleem niet echt. Natuurlijk is het even wat werk en is het vervelend als je pas later merkt dat je nog een component mist, maar je moet gewoon altijd de code die je nodig hebt voor je programma bijelkaar houden en goed documenteren wat van welke versie je nodig hebt.
Ok, mijn fout, misschien had ik iets meer over de achtergrond moeten vertellen. Het punt is dat in de toekomt ook anderen aan deze code zullen sleutelen. Dat zijn mensen die wel enige programeerervaring hebben en dus de code kunnen lezen en hier en daar wat kunnen aanpassen.

Maar het is goed mogelijk dat ze de Delphi omgeving niet precies kennen. Dus ik wil ze met dit soort Delphi specifieke zaken niet lastig vallen. Als je Delphi niet kent, vind ik de melding toch wat verontrustend overkomen.

Bovendien merk ik zelf ook dat ik het irritant vind dat ik eerst weer diverse componenten moet installeren voordat ik de code op een andere computer kan bewerken. Bijvoorbeeld omdat die computer een schone Delphi installatie bevat. 8)7
LordLarry schreef op 25 april 2004 @ 20:41:
...
Nog makkelijker is gewoon niet zoveel extra componenten gebruiken.
Tsja, dit is een interessant punt.

Ik dacht altijd: Borland heeft een prachtige object georienteerde boom neergezet. Met polymorphism en overervings mogelijkheden. Zodat je je eigen componenten kunt bouwen. Dat zou nou juist het grote voordeel van OOP moeten zijn ;) .

Dus als je zegt: "niet zoveel extra componenten gebruiken", denk ik: Ja dat gevoel krijg ik nu ook, maar dat was niet het idee achter OOP :) .

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Je kunt toch ook gewoon in de code het componentje opbouwen. :?

Delphi:
1
2
3
4
5
Component1:= TComponent.Create(Self);
Component1.Left:= 100;
Component1.Top:= 100;
Component1.Height:= 200;
etc....

Dan moet die .pas in het project zetten wel helpen denk ik.

[ Voor 14% gewijzigd door eghie op 26-04-2004 15:25 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 01-04 18:12

Creepy

Tactical Espionage Splatterer

eghie schreef op 26 april 2004 @ 15:13:
Je kunt toch ook gewoon in de code het componentje opbouwen. :?

Delphi:
1
2
3
4
5
Componen1:= TComponent.Create(Self);
Componen1.Left:= 100;
Componen1.Top:= 100;
Component1.Height:= 200;
etc....

Dan moet die .pas in het project zetten wel helpen denk ik.
Maar dan kan je dus niet meer visueel je form bewerken, de lay-out van je form snel bewerken etc. Dan moet je echt alles in de code doen.

Voor een ontwikkelaar lijkt het me een kleine moeite om componente te installeren alvorens het project te gaan bewerken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Te snel...

[ Voor 98% gewijzigd door Verwijderd op 26-04-2004 16:23 ]


Verwijderd

Topicstarter
Creepy schreef op 26 april 2004 @ 15:18:
[...]

Maar dan kan je dus niet meer visueel je form bewerken, de lay-out van je form snel bewerken etc. Dan moet je echt alles in de code doen.

Voor een ontwikkelaar lijkt het me een kleine moeite om componente te installeren alvorens het project te gaan bewerken.
Conclusie voor mij is tot nu toe:
1. Om 'vreemde' (GUI) componenten (zoals bv TMyEdit) op een formulier te kunnen bewerken (bv verslepen) moet je ze eerst (handmatig) installeren in de IDE van Delphi. Anders krijg je foutmeldingen bij het openen van het formulier.

2. Als je het formulier niet opent of bewerkt in de IDE, maar gewoon het project opent en compileert hoeft je de componenten niet te installeren. Je krijgt dan ook geen foutmeldingen. Delphi vind de componenten dan via de 'Uses statements'.

3. Misschien zie ik te veel beren op de weg >:) . Het leek me alleen dat er meer mensen zijn die die foutmeldingen vervelend vinden. Zeker als je bv 10 Custom made componenten gebruikt. Moet je de 10 Units gaan zoeken waar die componenten precies inzitten. En deze 10 handmatig installeren (Ok, ok dit kan 1x ;) ).

4. Principieel begrijp ik (nog steeds) niet waarom Delphi die componenten niet automatisch installeert als:
- ik een TMyEdit component bouw of download van elders.
- De unit van TMyEdit in het project opneem.
- Vervolgens het Formulier open dat een TMyEdit box bevat.
Dan kan Delphi de unit van TMyEdit gewoon vinden en installeren lijkt me. Delphi kan het project namelijk wel gewoon compileren.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 01-04 18:12

Creepy

Tactical Espionage Splatterer

Nee.

Je kan bijv. bepalen in welke DCU of project je je gedownloade component wilt hebben. Dit kan Delphi niet automatisch voor je bepalen.

Als je een project hebt met 3rd party componenten, dan weet je dat. Dit documenteer je inclusief installatie procedure, en elke Delphi devver kan aan de slag.

Ja, je ziet teveel beren op de weg. Als dit een probleem is voor een delphi devver: Ontslaan dat figuur. Als dit een principieel probleem is: geen 3rd party componenten gebruiken.

Ik ken de foutmeldingen, ik vind ze niet erg en vindt ze ook logisch.

[ Voor 9% gewijzigd door Creepy op 26-04-2004 17:02 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • schoene
  • Registratie: Maart 2003
  • Laatst online: 21:45
Als je zoveel components hebt, waarom maak je dan niet 1 package die deze verzameling components bevat? dan moet je enkel die package installeren?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ja, veel te veel beren. Je zou zelfs kunnen zeggen dat je een beetje aan het zeuren bent. :)

Delphi heeft een gecompilde package nodig om te laden in de IDE voordat je componenten designtime gebruikt kunnen worden. Delphi zou dan moeten zien dat er in de unit een component zit, moet de unit dan toevoegen aan een bestaande package en die dan compilen en laden. Dat vind ik persoonlijk een beetje teveel gevraagd. Bovendien hebben de grotere componenten packages de runtime en designtime code netjes opgedeelt en de dcu's en pasjes opgedeelt in verschillende directories. Dat maakt het allemaal lastig voor Delphi om dingen automatisch te gaan doen. Bovendien installeren de meeste mensen alleen componenten als ze hun Delphi opnieuw gaan installeren en niet elk uur van de dag. Door het toevoegen van een registry key en het leveren van kant en klare .bpl's kan je het zelfs vanuit een setup doen zonder dat iemand het met de hand aan Delphi toe moet voegen.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Creepy schreef op 26 april 2004 @ 17:00:
Je kan bijv. bepalen in welke DCU of project je je gedownloade component wilt hebben. Dit kan Delphi niet automatisch voor je bepalen.
Ja dit is waar. Hij zou een soort default moeten aannemen. Iets dat je misschien niet altijd wilt.
Ja, je ziet teveel beren op de weg. Als dit een probleem is voor een delphi devver: Ontslaan dat figuur.
Oops, mij ontslaan ?! :)
Punt is ook meer dat in de toekomst mogelijk niet Delphi devvers er mee moeten werken... Tsja een goede install handleiding is misschien voldoende... (alhoewel de helft leest hem niet en probeert eerst... ;)

[ Voor 19% gewijzigd door Verwijderd op 26-04-2004 17:53 ]


Verwijderd

Topicstarter
schoene schreef op 26 april 2004 @ 17:03:
Als je zoveel components hebt, waarom maak je dan niet 1 package die deze verzameling components bevat? dan moet je enkel die package installeren?
Ja dat scheelt idd 8)7

Verwijderd

Topicstarter
LordLarry schreef op 26 april 2004 @ 17:10:
Ja, veel te veel beren. Je zou zelfs kunnen zeggen dat je een beetje aan het zeuren bent. :)
Ah, ik heb al wat beren neergeschoten... :Y)
Delphi heeft een gecompilde package nodig om te laden in de IDE voordat je componenten designtime gebruikt kunnen worden. Delphi zou dan moeten zien dat er in de unit een component zit.
Kijk of er een Registerprocedure in voorkomt zou ik zeggen (is eigenlijk ook geen goede oplossing, want er wordt ook wel eens aangeraden die registerprocedure juist erbuiten te laten en in een aparte pas file te zetten...)
moet de unit dan toevoegen aan een bestaande package
Maak een nieuwe package en gebruik de naam van de unit als default. Eventueel zou Delphi hier nog om bevestiging kunnen vragen.
en die dan compilen en laden.
Dit moet kunnen.
Bovendien hebben de grotere componenten packages de runtime en designtime code netjes opgedeelt en de dcu's en pasjes opgedeelt in verschillende directories. Dat maakt het allemaal lastig voor Delphi om dingen automatisch te gaan doen.
Ja, inderdaad dit soort dingen zie ik ook niet 1-2-3 hoe dit automatisch kan.

Gezien de reacties is het blijkbaar normaal handmatig te installeren. Ik had gehoopt dat dit ergens te automatiseren was (bv in de project definitie). Ik zal eens kijken naar de bpl oplossing van je.
We have to live with it :)

Overigens wil ik o.a. een soort TLabeledEdit Component met 2(!) labels: 1 label ervoor en 1 label erachter.

Met dank voor de reacties _/-\o_
Pagina: 1