Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Applicazione Delphi basata su packages

    Problema:

    Sottopongo all'attenzione della comunità di sviluppatori Delphi presente in questo forum i quesiti a seguire:

    Il problema verte essenzialmente sulla possibilità di utilizzare librerie a caricamento dinamico (package run-time) nelle quali è suddivisa la mia applicazione. Questo in sé non rappresenterebbe un problema.
    Ma purtroppo una delle caratteristiche salienti della mia applicazione (originariamente costituita da un unico progetto privo del supporto dei package a run-time) è quella di essere costituita da numerose forms tutte derivate da tre forms di base (ereditarietà applicata all'interfaccia utente).
    Non potendo inserire direttamente nei package destinati al caricamento dinamico le tre unit contenenti le forms di base, incorrendo così in un conflitto di nome, ho optato per la creazione di un package a design-time (che ho regolarmente installato nell'IDE) nel quale ho collocato le tre unit anzidette provvedendo, quindi, alla loro rimozione dai singoli packages run-time (per ribadire quelli dove sono contenute le forms derivate dalle tre di base).
    Allo stato non sussistono problemi per quanto attiene alla compilazione dei package run-time, ma il tentativo di apertura di una delle forms in esso contenuta viene bloccato da un messaggio di errore che mi avverte dell'assenza della classe base all'interno del package e che quindi Delphi non può visualizzarla con conseguente impossibilità di applicare modifiche.
    In via del tutto accidentale ho scoperto che è sufficiente tenere aperto il package design-time (quello contenente le forms di base) unitamente a quelli run-time per ovviare al problema: posso quindi sia compilare/costruire la libreria (run-time), sia visualizzare le forms ereditate da quelle base.
    Desidererei quindi sapere se esiste una strada alternativa per pervenire allo stesso risultato o se devo considerare questa come unica soluzione.
    A questo aggiungo che ho effettuato tutto quanto sopra-descritto sia su Delphi 2006 che 2007 ottenendo il medesimo risultato e mi domando altresì se tale comportamento sia ascrivibile a dei bugs "resistenti" in entrambe le versioni o se lo si possa considerare conforme all'ambiente, magari in ragione di regole a me ignote.

    Ringrazio ed attendo suggerimenti. Cosimo.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Per quanto ne so, l'uso della VFI (Visual Form Inheritance) "cross package" è una funzionalità che viene un po' ostacolata ed è senz'altro poco agevole rispetto a come dovrebbe realmente essere nel cosiddetto "mondo ideale".

    Il fatto che sia basata sul DFM consente di lavorare agevolmente rispetto ad altri ambienti, ad esempio quelli ".NET based", in cui è necessaria una compilazione per poter ereditare gli elementi di un progetto, ma tuttavia questo ne limita l'uso in certi casi quando un Form o un Frame devono essere ereditati da progetti differenti (package, applicazioni, ecc.) che si referenziano a vicenda.

    Non ho ben compreso, nel quadro che hai descritto, la necessità di utilizzare package di tipo designtime, che dovrebbero essere impiegati solo quando ci sono classi che devono essere caricate dall'IDE di Delphi, come i Component Editor, i Property Editor, ecc.

    In merito all'ereditarietà "cross package" tra Form e Frame, l'unico espediente che ho trovato per ottenere questo effetto è quello di
    [list=1][*]aggiungere il Form da ereditare, presente nel package di base, nell'Object Repository di Delphi;[*]aggiungere un nuovo Form nel package discendente ereditando dalla classe del repository;[*]rimuovere la classe base duplicata da Delphi nel package discendente al termine delle operazioni.[/list=1]

    Non so se il panorama che ho descritto è lo stesso che riscontri nel tuo caso.

    Eventualmente, possiamo vedere di esaminarlo per capirne qualcosa di più, visto che mi trovo spesso nella situazione di dover implementare architetture simili a quella che hai descritto, ma non ho ancora trovato un modo agevole per realizzarle senza incorrere in "escamotage" vari.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.