Newsgroup: it.comp.lang.delphi
Titolo: Errore con TCheckListView

Nell'esecuzione della seguente form, alla pressione del tasto del mouse,
dovrebbe comparire un messaggio che riporta il valore dell'oggetto (in
questo caso una stringa) della riga selezionata nella tlistcheckbox.
Invece salta fuori un errore: Exception in module ntdll.dll.
Access violation at address 77F5ACD7 in module 'ntdll.dll'. Write of address
00405269.
Che può essere? il vettore dei valori è pieno e di conseguenza anche la
listbox.
Ciao Claudio
procedure TFormMagazEsistenzeFiltroArticoli.FormShow(Sender: TObject);
  Var I:Integer;
      S:String;
begin
  CLBGruppiMerc.Items.Clear;
  For I:=0 To High(ElencoGruppiMercArticoliAcquisti) Do
  Begin
    S:=ElencoArticoliAcquisti[I].CodGruppoMerc;
    CLBGruppiMerc.Items.AddObject(ElencoGruppiMercArticoliAcquisti[I].Cod+' -
'+ElencoGruppiMercArticoliAcquisti[I].Descrizione,TObject(S));
  End;
end;
procedure TFormMagazEsistenzeFiltroArticoli.CLBGruppiMercClick(Sender:
TObject);
begin
  ShowMessage(String(CLBGruppiMerc.Items.Objects[CLBGruppiMerc.ItemIndex]));
end;
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

> '+ElencoGruppiMercArticoliAcquisti[I].Descrizione,TObject(S));
Delphi supporta boxing e unboxing solo dalla versione 8 in quanto 
caratteristica legata strettamente a .Net.
Ergo, un cast del tipo TObject(s) dove s è una stringa dovrebbe 
scatenare non pochi fuochi artificiali, imho....
A

 caratteristica legata strettamente a .Net.
scusa l'ignoranza, ma cosa intendi per "boxing e unboxing "?
Claudio



wrote:

Pur essendo un casting "estremo" , è permesso (mi è capitato di
usarlo) in quanto la AnsiString di fatto è un puntatore e di
conseguenza il casting a TObject è solo un trucco per far sì che
AddObject accetti la stringa stessa.
Tra l'altro ho provato il codice in questione e a me funziona senza
problemi, quindi presumo che il problema sia da cercare altrove.
Saluti.
-- 
"La velocità luce non è sufficiente Comandante Nunziatella, 
dobbiamo passare alla velocità smodata!"


il problema è che nella form non c'è altro di codice.
Non vorrei che sia un problema nella versione del tchecklistbox su delphi 7.
Magari un bug.


> scusa l'ignoranza, ma cosa intendi per "boxing e unboxing "?
http://search.microsoft.com/search/results.aspx?qu=boxing&View=msdn&st=b&c=0&s=1&swc=0
A

Magari un bug.
Prova questo codice semplificato. Se non funziona prova (se non lo hai
già fatto) a patchare D7, se funziona ... boh
var Valori : array[0..3] of string;
procedure TForm1.FormShow(Sender: TObject);
var
  I: Integer;
  S: String;
begin
  Valori[0] := 'UNO';
  Valori[1] := 'DUE';
  Valori[2] := 'TRE';
  Valori[3] := 'QUATTRO';
  CLBGruppiMerc.Items.Clear;
  for I := 0 to High(Valori) do begin
    S := Valori[I];
    CLBGruppiMerc.Items.AddObject(' VALORE: '  + Valori[i],
TObject(S));
  end;
end;
procedure TForm1.CLBGruppiMercClick(Sender: TObject);
begin
ShowMessage(String(CLBGruppiMerc.Items.Objects[CLBGruppiMerc.ItemIndex]));
end;


 Tra l'altro ho provato il codice in questione e a me funziona 
suggerisco di confrontare, oltre alle versioni di delphi e di os, le 
opzioni di compilazione.
A

 già fatto) a patchare D7, se funziona ... boh
Il codice che mi hai postato funziona. Non capisco dov'era il problema.
per la legge di murphy sarà sicuramente una cavolata bestiale! eheheh
Grazie mille
Ciao
