Wednesday, January 03, 2007

RISOLTO!

Dopo una quindicina di giorni di lavoro ho risolto, con l'aiuto di tutta la famiglia Mystery Case Files - Prime Suspects. Grande e coinvolgente gioco!
Divertentissimo il finale.

Monday, January 01, 2007

Cast e ListView in Delphi

In molte applicazioni si ha la necessità di dare all'utente la possibilità di creare più oggetti della stessa classe. Questi oggetti hanno una propria vita e l'utente deve poterli selezionare per lavorare su di essi.
Una situazione classica è quella di avere una lista di tali oggetti da cui selezionare quello su cui si vuole lavorare. Sorge il problema di passare dalla selezione sulla lista all'oggetto associato.
In Win32 una lista ha una sua rappresentazione come ListView. Una riga della ListView (ListItem) è un oggetto che ha, tra le proprietà, un puntatore (Data). Questo puntatore consente di memorizzare, tra le altre cose, il riferimento all'oggetto che noi associamo alla riga della lista.
L'uso del cast consente di "leggere" il puntatore come l'oggetto che abbiamo associato alla riga.

Ecco un esempio:

Creazione dell'oggetto

var
lv:TListItem;
p:TOggetto;
begin
lv:=lvElenco.Items.add;
lv.Caption:='Oggetto '+inttostr(lvElenco.Items.Count);
//creazione dell'oggetto
p:=TOggetto.create;
//associazione dell'oggetto all'Item appena creato
lv.Data:=p;
end;

Recupero dell'oggetto associato alla riga della lista (Item):

var
obj:TOggetto;
begin
//recupero l'oggetto tramite il casting
obj:=TOggetto(Item.Data);
...
end;

Felix Colibri: Documentazione su Delphi

Ulteriore documentazione sull'uso di Delphi.
Molto ben fatta la gestione delle basi dati.