Newsgroup: it.comp.lang.delphi
Titolo: Componenti DELPHI = ETA' della PIETRA

Per chiarire meglio vi faccio un esempio di come dovrebbe essere un
componente di nuova generazione:
Esempio: StringGrid (apro un Object Inspector);
AREA 1 - Area dei Flag e delle assegnazioni
Font ....
BorderStyle... etc.
AREA 2 - Disegno dell'ambiente (qui tutto codice)
var x,y : integer; 
property LarghezzaColonna(Colonna,Spessore : integer);
begin
if Spessore < DefaultColWidth then Spessore:=DefaultColWidth
Col[Colonna].Width:=Spessore;
TreeView1.FullExpand;
end;
property GraficaCelle(X,Y : integer; Colore : TColor; Immagine:TImage);
begin
if Y=-1 then begin Col[X].Color:=Colore; Col[X].Image:=Immagine; end;
if X=-1 then Row[Y].Color:=Colore;
if (X+Y<>-2) then begin Cells[X,Y].Color:=Colore; 
                        Cells[X,Y].Image:=Immagine; end;
end;
QUI TUTTO IL CODICE DI GESTIONE DEL COMPONENTE RIMANE DENTRO NEL
COMPONENTE.... ESCO E VADO AL CODICE
if TreeView1.Items.AbsoluteIndex = 3 then
StringGrid1.GraficaCelle(1,1,clRed,nil);
StringGrid1.x:=10;
Poco codice, poche variabili di scambio per gestire il componente?. Per
settare il componente si apre la scheda?.
Tutta la gestione rimane nella scheda componente?. Fuori il codice del
programma e non 50% di codice per gestire i componenti nel programma?
--- posted by geoForum on 
http://www.delphiedintorni.it

 programma e non 50% di codice per gestire i componenti nel programma?
Speriamo che non li scriva tu questi componenti di nuova generazione, 
altrimenti siamo fritti...
Io non c'ho capito una fava di quello che hai detto.
-- 
Jax

Ciao Jax,
Supponiamo di inserire un nuovo componente, definiamo un'evento. Si apre
una procedura nel listato generale del programma... Alla fine le procedure
sono tutte mischiate nel listato, più quelle scritte ad hoc per gestire i
componenti stessi...
procedure Componente 1
procedure Componente 2
procedure AlgoritmiProgramma 1
procedure Componente 1
procedure Componente 2
procedure AlgoritmiProgramma 2
I componenti di nuova generazione eliminano dal listato le procedure dei
componenti che vengono inserite nel Object Inspector. Più la possibilità
di gestire l'ereditarietà in modo semplice e la possibilità di definire
proprietà e metodi internamente. 
Quindi avrei
procedure AlgoritmiProgramma 1
procedure AlgoritmiProgramma 2
e i due Object Inspector
Le stampe del listato sono anche più semplici, viene stampato il listato
MAIN e inoltre l'object inspector dei componenti richiesti (Tutto l'object
Inspector)...


Ciao Jax,

procedure Componente 1
procedure Componente 2
procedure AlgoritmiProgramma 1
procedure Componente 1
procedure Componente 2
procedure AlgoritmiProgramma 2

Quindi avrei



--- posted by geoForum on 
http://www.delphiedintorni.it

 componente di nuova generazione [...]
Tralascio le tue elucubrazioni mentali e commento semplicemente dicendo 
che, se Delphi ti sembra così arretrato, usa un altro linguaggio.
Non entro nel merito dei problemi che hai posto perché ho sempre di più 
il sospetto che tu non abbia la seria intenzione di capirci qualcosa o 
di ottenere la risoluzione ad un problema...
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)
     Non hai la possibilità di scaricare Turbo Delphi Explorer?
     Te lo spedisco io!! [
http://www.marco.breveglieri.name/?p=48
]

Ribadisco inoltre la necessità di definire 2 strati delle proprietà e dei
metodi... Main e "di sviluppo"... Il primo gruppo gestisce funzioni di
alto livello, semplici e intuitive come ad esempio
StringGrid1.Cells[x,y].Color:=clRed etc... (Tutto quello che ha a che fare
con lo sviluppo va messo in un secondo strato)..


 programma e non 50% di codice per gestire i componenti nel programma?
Quando leggo icld mi capita di imbattermi in messaggi di cui capisco poco 
...
Tu meriti i miei complimenti: hai scritto il primo messaggio di cui non ho 
capito proprio una mazza (oltre a quando leggo i forum cinesi, ovviamente).
-- 
- Carlo - 

No comment a TALI AFFERMAZIONI... Magari capirai tra qualche anno...


 No comment a TALI AFFERMAZIONI... Magari capirai tra qualche anno...
Se sarò colpito da senilità precoce, può darsi... :-D


 ha scritto nel messaggio:
Marco detto in soldoni ... ti sei pure preso del pirla :-)
-- 
- Carlo - 

Ti chiedo solo un'ultima cosa... Come mai compare il TAG in ogni componente ? 
Buona Giornata :-)
Matteo


 componente ?
Riporto dalla guida:
"Stores an integer value as part of a component.
property Tag: Longint;
Description
Tag has no predefined meaning. The Tag property is provided for the 
convenience of developers. It can be used for storing an additional 
integer value or it can be typecast to any 32-bit value such as a 
component reference or a pointer."
---
Ryo GQI 

eh si ....


 Marco detto in soldoni ... ti sei pure preso del pirla :-)
Sono i rischi che si corrono... :-)
...ma credo sopravviverò. ;-)


...sembra proprio essere una piccola porticina che qualcuno di Borland non
ha messo lì a caso....


Type
  TTrollManager = class
  public
      property Troll: TTroll read FTroll write SetTroll;
      function PeekLaxative(): integer;
      function DoPooh(): integer;
  end;
implemetation
..
With TTrollManager.Create do
begin
try
  Troll := Matteo;
  try
    PeekLaxative();
    DoPohh():
  except
  on E:Exception do
  begin
     case CurrentLCID of
       LCID_NEAPOLITAN: Troll.MAVANFANCULO_VA;
     else
       LCID_ENGLISH: Troll.GoAway();
  end; 
finally
  free;
end; 
A.

  TTrollManager = class
[..]
hihihihi
spetta che finisco di ridere...
...
...
fatto...
propongo il tuo codice come il più chiaro, conciso e privo di qualsivoglia 
bug che sia stato pubblicato nel nostro amatissimo it.comp.lang.delphi
ora scusami...me lo rileggo
:-)))
V.

In un momento di menzogna universale dire la verità è un atto
rivoluzionario. G.Orwell


Mi viene più da ridere per chi dice non ci sono abbastanza esempi e va a
scaricarsi i componenti freeware... Hi,hi,hi... ;-)


Scusate, programmo in Delphi da 8 anni e mi pare che nessuno abbia capito
il post di Matteo.
Probabilmente chi ha risposto al post programma solo i componenti per fare
i soldatini di piombo, quindi non capisce l'esigenza di rinnovare
l'architettura di 10 anni fa per Windows95. Certo Non mi aspetto che
Borland butti tutto nel cesso, ma alla fine la mancanza di rinnovamento
dell'architettura è davvero incomprensibile. Spesso l'importante è COME si
fa una cosa, cioè il metodo. 
Mi sembra il linciaggio dei grandi professoroni della Casa nella Prateria...
Luca


 il post di Matteo.
Perché non siamo troll... ;-)


Mavafanculo, va....
A.

 
secondo me e' perche' c'era in VB, alcune volte e' comodo, Borland l'ha 
inserito anche in Delphi.
Se ne servono altri, basta poco per inserirli in un componente.
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
to reply remove "1975nosp"

 programma e non 50% di codice per gestire i componenti nel programma?
Vero, ed e' per questo che esistono componenti di terze parti, perche' 
non sempre quelli forniti assieme a Delphi soddisfano.


 il post di Matteo.
Neanche Matteo.
-- 
- Carlo - 

Grazie Luca, arriva la cavalleria !
Il componente porta con se il codice.... Ha variabili e procedure da
utilizzare nel corpo del programma!!! E tre.. Ma il suo codice non ne fa
parte.... Inoltre ci sono i due famosi strati (utilizzo) e (sviluppo)....
Guardate che questa roba non l'ho mica inventata io !
Foooorrrzzzaaaaa  Milan... Buona serata :-D


 Foooorrrzzzaaaaa  Milan... Buona serata :-D
Siete apposto cosi' primi in europa :-)
Dal vangelo secondo Zio Fester.


Prendiamo come esempio StringGrid.
Il primo strato riguarda proprietà del tipo:
SG1.Cells[x,y]
SG1.Cells.Color
qui ci deve essere la possibilità di utilizzare il componente ad alto
livello. Deve essere tutto utilizzabile in modo veloce con la minima
stesura di codice. (per intendersi nessun algoritmo o sequenza di chiamate)
Esempio:
SG1.Cells.Image:='C:\MyImage.jpg';
quindi il componente viene usato in modo STANDARD. (Facendo le cose
standard che i componenti freeware ci danno).
Il secondo strato riguarda un utilizzo non STANDARD 
Es. SG1.Canvas.Brush.Color etc. verso i meandri delle funzionalità
derivate.. Questo strato offre la possibilità di effettuare le
personalizzazioni più varie a un livello più basso.
Veniamo al Object Inspector:
Qui dentro ci sono due AREE, l'area della parametrizzazione (che è per
intendersi l'object inspector attuale) e la seconda Area dove si fanno le
dichiarazioni e si gestiscono gli eventi. Qui si definiscono tra l'altro
le proprietà (lasciamo stare i metodi).
Esempio di AREA2
var x,y : integer;
property RidmesionaCarattere(x:Integer);
begin
Font.Size:=Font.Size-1;
end;
procedure onclick;
begin
TreeView1.FullCollapse;
showmessage('Hello!');
end;
OK tutto questo codice non si vede nel programma e neanche gli eventi,
però ne fanno parte. Ma per vederli devo aprire l'object inspector.
Andiamo adesso al corpo del programma:
if Ciao=1 then SG1.RidimensionaCarattere(10);
SG1.RidimensionaCarattere:=30;
Ovviamente se faccio click appare il messaggio Hello!


 almeno, io non lo capisco )
Ti sta prendendo in giro, semplicemente.
Lascialo perdere...


 
continuo a preferire il metodo corrente.....


 
Secondo me deriva da qualche ambiente diverso e si trova solo spaesato 
in delphi.
Se ho capito bene vuole inglobare il codice degli eventi nelle 
proprieta' e toglierlo dal programma, qualcosa di simile l'ho visto anni 
fa in una demo di non ricordo cosa.
Se non ricordo male, selezionavi il componente, avevi la lista di 
proprieta'/eventi e li potevi mettere il codice di quello che ti serviva.
Personalmente preferisco il metodo standard alla delphi ( come e' ora ).


Non ho parole... Posso solo augurare una buona serata... Probabilemnet le
cose più semplici sono le più difficili a capirsi ....
Ciao :-D


Ci rinuncio... Tra 5 anni ricondatevi di me..
Buona serata . Matteo


 bug
COME? Privo di bug?
Il codice non compila, delphi mi segnala un errore:
DoPohh(): Identifier not matching previous declaration (DoPooh);
:-)
-- 
Linux Counter 367009
Windows message: You have moved your mouse. Please reboot 
to make this change take effect.

 DoPohh(): Identifier not matching previous declaration (DoPooh);
ti sei dimenticato di dichiarare la unit...suvvia
:-)

 
Hai provato con (DoNomadi) :-)
