Newsgroup: it.comp.lang.delphi
Titolo: Access Violation : Mi aiutate a capire ?

Buongiorno,
ho 1 Form che richiamo da un menu ma che NON funziona coma al solito....mi
da un AV quando tento di inizializzare una mia variabile.
Applico lo stesso metodo su altre form e va tutto a meraviglia...non ho
proprio idea cosa c'è che non va su questa form...
Ho già provato a fare di tutto taglia copia incolla rinomina...ma mi sto
girando intorno...
Mi aiutate a capire ?
PS. Ho risolto scrivendo in un'altra maniera la creazione della form ma mi
piacerebbe sapere perchè si comporta così...
...Così funziona.....
srcGruppo := TSrcGruppo.Create( nil );
srcGruppo.Operazione := cEDIT;
srcGruppo.TipoUtente := cTIPO_GRUPPO;
srcGruppo.Anagrafica := StrToIntDef( lvUtenti.Selected.SubItems[nCODICE],
0 );
srcGruppo.ShowModal;
srcGruppo.Free;
...Così no.....
with TSrcGruppo.Create(Nil) do
try
   Operazione := cEDIT;
   TipoUtente := cTIPO_GRUPPO;
   Anagrafica := StrToIntDef( lvUtenti.Selected.SubItems[nCODICE], 0 );
<-------------ACCESS VIOLATION
   ShowModal;
finally
   Free;
end;
la form implementata è
  TsrcGruppo = class(TtplRoot) <----ereditata da una mia form base
      .
      .
      .
  private
    { Private declarations }
    FTipoUtente : Integer;
    FOperazione : Integer;
    FAnagrafica: Integer;
   .
   .
   .
   procedure SetTipoUtente(const Value: Integer);
    procedure SetOperazione(const Value: Integer);
    procedure SetAnagrafica(const Value: Integer);
  public
    { Public declarations }
    property Operazione : Integer read FOperazione Write SetOperazione;
    property TipoUtente : Integer read FTipoUtente Write SetTipoUtente;
    property Anagrafica : Integer read FAnagrafica Write SetAnagrafica;
  end;
-- 
Alberto Menghini

    Anagrafica := StrToIntDef( lvUtenti.Selected.SubItems[nCODICE], 0 );
IMHO, mentre nel primo caso il riferimento è certo nel secondo può essere
ambiguo, cioè fa riferimento ad un'altra Anagrafica e non a quella di
SrcGruppo.
-- 
Ciao, Anto', [37, 143, AQ] 
MB C SC 220 CDI Magma Rot
"Di sempre cio' che senti e fai cio' che pensi."
    G.G. Màrquez

 SrcGruppo.
Anche secondo me deve essere successo qualcosa del genere.
Di seguito del codice che può aiutare Alberto a capire cosa succede. Anche
se i due blocchi sembrano uguali in realtà non lo sono. Se usi il debugger
e prendi come esempio la proprietà Name vedrai che nel primo caso assume
valore di default Form1 mentre nel secondo Frame2. 
Ciao
Antonio
procedure TForm1.Button1Click(Sender: TObject);
begin
  Inc(i);
  LockWindowUpdate(Handle);
  with TFrame2.Create(self) do
  try
    Name := Format('Frame%d',[i]);
    Parent := Self;
    Top := 200;
    Left := 200;
  finally
    LockWindowUpdate(0);
  end;
  LockWindowUpdate(Handle);
  MyFrame := TFrame2.Create(Self);
  try
    MyFrame.Name := Format('Frame%d',[i]);
    MyFrame.Parent := Self;
    MyFrame.Top := 200;
    MyFrame.Left := 200;
  finally
    LockWindowUpdate(0);
  end;
end;



Scusa ma il tipo TFrame2 esiste in Delphi6?
Io ho provato a sostituire con "TFrame", poi ho anche aggiunto una
Inc(i) dopo la prima istruzione "Format('Frame%d',[i])" altrimenti il
pgm va in errore tentando di assegnare lo stesso nome a due frame.
A questo punto le cose funzionano normalmente, il codice postato da
Alberto a me sembra in realtà privo di errori.
Cosa volevi evidenziare con il tuo esempio?
Magari non ho capito qualcosa...
Ciao 

 Cosa volevi evidenziare con il tuo esempio?
Volevo evidenziare che l'uso del with, ancorché utile, alcune volte può
essere insidioso. Nel blocco di codice dove viene usato, infatti, si può
essere convinti di assegnare la proprietà Name al frame, ma in realtà si
assegna la proprietà Name della form.
Antonio

 realtà si assegna la proprietà Name della form.
Questo invece, nell'esempio, è falso ;-)) L'esempio non è calzante, mi
sono lasciato fuorviare dal debugger :( Chiedo venia.
Antonio