2009-02-26 11 views
6

Ogni tanto quando modifico le mie classi TFrame (aggiungendo proprietà, metodi, ecc.), L'IDE si confonde e agisce come se pensasse che il frame sia una forma, completo di intestazione/didascalia, bordi, ecc. Tuttavia, chiaramente la classe è dichiarata come TFrame discendente. Qualche idea su cosa causa questo, come prevenire e come risolvere?IDE Delphi che tratta TFrame come se fosse un modulo

Sto usando Delphi 2007 Pro. Nota anche (se è importante), i discendenti TFrame sono tipicamente registrati con l'IDE (cioè sulla tavolozza) tramite un pacchetto in fase di progettazione.


tardi: Aggiuntive "specificità": La cornice che sto avendo questo problema con al momento è, visivamente, un TFrame molto semplice (cambiano solo dal nuovo TFrame è la dimensione e il colore di sfondo).

Ecco la sua dichiarazione di classe:

TBasePanel = class(TFrame) 
    private 
    FPanelManager: TPanelManager; 
    procedure SetPanelManager(const Value: TPanelManager); 
    protected 
    procedure Connect; virtual; abstract; 
    procedure Disconnect; virtual; abstract; 
    procedure Refresh; virtual; 
    procedure Requery; virtual; abstract; 
    published 
    property PanelManager: TPanelManager read FPanelManager write 
     SetPanelManager; 

Questo telaio è utilizzata come classe base per un certo numero di altri. Di solito lo modifica direttamente dal progetto BPL a cui appartiene (perché tutti questi frame vengono installati nella tavolozza), anziché come parte di un progetto EXE, con i relativi moduli aperti ecc.

Inoltre, "Designer incorporato" è selezionato in Strumenti -> Opzioni.

Sto salvando tutti i file DFM come testo piuttosto che binario (se questo è importante).

+1

Solo un aggiornamento su questo: la risposta sembra essere una combinazione di risposta di birger sotto PLUS che crea una "Base Frame Class" che NON ha modifiche dal normale TFrame, e THEN eredita da quello prima di aggiungere proprietà, metodi, ecc. Sembra stabilizzare in qualche modo l'ereditarietà. – Jamo

risposta

8

Ho riscontrato lo stesso problema. Le seguenti operazioni risolto il problema per noi, potrebbe anche funzionare per voi:

  1. nell'IDE: chiudere tutte le forme che utilizzano il telaio
  2. aprire il telaio, vista come testo (* DFM)
  3. il DFM probabilmente inizia con oggetto MyFrame: TMyFrameClass
  4. cambiamento che questo MyFrame ereditato: TMyFrameClass

non so cosa ha causato il problema.

+0

Sembra che funzioni sulle classi antenate, ma a volte ho ancora problemi con la classe "root" (quella che discende da TFrame). Quel "Primo" DOVREBBE essere "oggetto", giusto? – Jamo

+0

Non sono sicuro, nel progetto in cui ho avuto questo problema, tutti i frame iniziano con 'inherited MyFrame: TMyFrame'. Il primo discendente di TFrame che usiamo non ha un dfm, quindi non posso controllare cosa ci dovrebbe essere nel dfm lì. – Birger

+0

Interessante! Non avrei mai pensato di avere quella "prima" TFrame discendente senza una DFM del tutto. Questo potrebbe eliminare i problemi di "base TFrame" che sospetto. Hmmm ... Grazie per queste informazioni. Sperimenterà con questo approccio! – Jamo

0

Per quanto ne so, è necessario avere sia il modulo che il frame aperti nell'editor quando si modifica il frame. Altrimenti ci possono essere problemi di aggiornamento. Anche se non ho visto questo.

Ma ho rinunciato ai fotogrammi molto tempo fa perché non li trovavo molto affidabili.

In questo momento li uso solo per la prototipazione, creando un componente personalizzato (derivato da un pannello con i controlli appropriati su di esso).

1

Forse hai deselezionato la casella di controllo 'Progettista incorporato'? (Strumenti | Opzioni | Opzioni ambiente | Progettazione VCL). Quindi, in effetti, la cornice viene mostrata in fase di progettazione come modulo (con didascalia, bordo, ecc.). Anche un codice concreto del tuo discendente TFrame problematico o maggiori dettagli sul tuo caso potrebbero aiutare.

0

You may have to register custom module to the IDE Ma le proprietà aggiuntive non funzioneranno bene a meno che non siano nella classe di antenato.

+0

Hai ancora bisogno di farlo, anche se l'intero componente basato su frame è registrato tramite un pacchetto di progettazione? Si presenta bene sulla tavolozza e le proprietà pubblicate vengono visualizzate nell'ispettore. Fa "perdere il suo comportamento di frame", ma in realtà è quello che voglio. Non seguire ciò che fa. – Jamo

+0

Non si tratta di registrarlo come componente normale. Potrebbe essere necessario registrare un modulo personalizzato al fine di ottenere il corretto comportamento specifico del progettista. Ancora non sono sicuro perché il modo in cui ide gestisce Tframe in fase di progettazione non è trasparente per i programmatori. Ma vale la pena provare secondo me. – Serguzest

0

Ho incontrato un sacco di problemi con TFrame e alla fine sono arrivato a una soluzione che risolve tutti i miei problemi: creo e disegno fotogrammi visivamente, ma li uso solo con la codifica manuale.

Come effetto collaterale le mie applicazioni sono diventate più piccole, a causa della minore dfm-s.

Problemi correlati