Newsgroup: it.comp.lang.delphi
Titolo: Componenti discendenti

Ho la vers. 7 di delphi, mi sono creato un nuovo componente TCalendario
discendente da TCalendar utilizzando lo strumento NEW COMPONENT (component -
new component), mi sono quindi creato un nuovo file Calendario.pas nel quale
mi sono ridefinito gli array che definiscono i nomi della settimana e mesi.
Ho quindi ricompilato la libreria. Il nuovo componente è stato aggiunto
nella paletta Samples e funziona perfettamente, ma c'è un problema: il
componente ancestor TCalendar è diventato uguale a quello nuovo da me
creato!!! come è possibile, dove ho sbagliato?



Mi sembra molto strano; sicuramente, non hai sovrascritto il codice 
della classe TCalendar, ma è probabile che tu abbia ridefinito i nomi 
dei mesi impostando delle costanti, le stesse costanti che vengono 
utilizzate dal TCalendar originale.
In definitiva, il comportamento del Calendar originale non è mutato, ma 
hai ridefinito le costanti su cui esso lavora.
Ad ogni modo, devi postare almeno le porzioni significative del codice 
per poter esaminare meglio la situazione.
Ciao! :-)
-- 
Marco «Alka» Breveglieri
  ABLS Team S.n.c. - Software & Web
  Via De Gasperi, 14
  42019 Scandiano (Reggio Emilia)
 
http://www.abls.it

ti invio il codice usato nel file .pas che ho creato per costruire il
componente, (si tratta di un calendario in lingua sarda), ho provato a
rifare tutto con delphi 3 ma il risultato è identico, forse sbaglio nel modo
in cui creo il componente discendente?
grazie anticipatamente
unit MiuCalendariu;
interface
uses
  SysUtils, Classes, Controls, Grids, Calendar;
type
  TCalendariu = class(TCalendar)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
  end;
procedure Register;
const AbbrevGiorni:array[1..7] of string[3] =
 ('Dom', 'Lun', 'Mar','Mer', 'Gio', 'Cen', 'Sab');
 NomeGiorni:array[1..7] of string[8]=
  ('Dominigu','Lunis','Martis','Merculis','Giobia','Cenabara','Sabudu');
  NomeMesi:array[1..12] of string
[18]=('Gennaxu','Friaxu','Martzu','Abrili','Mayu',
   'Lampadas','Mesi de arjolas','Austu','Cabudanni','Mesi de
Ladamini','Donnya santu','Mesi de Paskixedda');
   var i:byte;
implementation
procedure Register;
begin
  RegisterComponents('Samples', [TCalendariu]);
end;
 begin
 for i:=1 to 7 do ShortDayNames[i] :=AbbrevGiorni[i];
 for i:=1 to 7 do LongDayNames[i]  :=NomeGiorni[i];
 for i:=1 to 12 do LongMonthNames[i] :=NomeMesi[i];
end.
"Marco Breveglieri" <ma...@NOSPAM-abls.it> ha scritto nel messaggio
news:TUHVc.49243$1V3.1...@twister2.libero.it...


  for i:=1 to 12 do LongMonthNames[i] :=NomeMesi[i];
 > [...]
Error found! Come ti avevo predetto nella prima risposta che ti ho dato, 
vai a sovrascrivere le costanti in cui Delphi conserva i nomi dei giorni 
e dei mesi originali, sulle quali si basa anche il Calendar standard (e 
forse anche altre procedure).
Va bene le definizioni delle *tue* costanti, ma l'approccio del loro 
utilizzo deve essere differente: devi fare in modo che il tuo componente 
ridefinisca il metodo di disegno sullo schermo e, in quel momento, 
"mimi" le funzionalità del calendario originale (dai una sbirciata al 
codice sorgente di *TCalendar*, magari, per prendere spunto) ma utilizzi 
le tue costanti come sorgente dalla quale prelevi i nomi di mesi e 
giorni, al posto delle costanti predefinite.


 ha scritto nel messaggio
news:0vIWc.141989$OR2.6...@news3.tin.it...


 componente, naturalmente in progetti diversi. Potrebbe funzionare?
Potresti evitare di duplicare package, unit o altro e utilizzare 
semplicemente il calendario standard TCalendar. Quando hai bisogno, 
nella tua applicazione specifica, di modificare i nomi di mesi e giorni, 
utilizzi il codice che hai postato precedentemente volto a modificare il 
contenuto delle costanti di Delphi, magari inserendolo nel "punto di 
partenza" della tua applicazione.
In questo modo, eviti di installare package che possano sovrascrivere 
queste impostazioni per tutti i progetti, deturpando anche il 
funzionamento dei componenti standard, e fai uso dei nomi modificati 
solo all'interno del progetto specifico.
Che te ne pare? :-)


 ha scritto nel messaggio
news:g7_Wc.145502$OR2.7...@news3.tin.it...


 [...] Come potrei fare? A parte ricaricare Delphi? grazie in anticipo
Purtroppo mi č impossibile capire "al buio" cosa hai combinato con tutto 
quel marasma di file modificati in un modo, poi nell'altro. :-)
Cerca di ripristinare il file Calendar.pas originale; se riesci e 
ottieni ancora comportamenti strani, allora il codice del tuo calendario 
di prova č ancora in funzione. Oltre a rimuoverlo dal package, elimina 
anche il file fisicamente o spostalo...non vorrei che qualche unit vi 
facesse riferimento causandone la compilazione implicita (pur non 
facendo parte del progetto del package).
Ciao! :-)


 ha scritto nel messaggio
news:32mXc.194309$5D1.9...@news4.tin.it...


 Niente da fare, credo che ricarichero delphi. Grazie comunque
Mi dispiace... :-(
P.S.: attenzione a "quotare" i messaggi...
