28/05/11 11:00
rep87
Buongiorno ragazzi...
Vi chiedo aiuto per risolvere un Access Violation che non riesco ad evitare...
Allora, nel mio form8 ho una label con caption "Quante funzioni vuoi disegnare?"
e sotto un'edit per far scrivere il numero desiderato.
Un bottone ha poi questo codice:
All'apertura del Form9, l'applicazione esegue questo codice:
Le procedure LabelCreatClick e EditCreateClick sono praticamente uguali, perciò ve ne mostro una come esempio:
Quando, attraverso un bottone, vado a disegnare le funzione che l'utente ha inserito nelle varie Edit, il programma esegue questo codice:
Dove la procedure Disegna() è
Il problema nasce quando, dopo aver scritto le funzioni, si dà il via al disegno...
Il programma restituisce infatti un numero di Access Violation pari al numero di funzioni disegnate...
Come risolvere questo problema?!
Aiuto...pleaseeee!! ..!
Vi chiedo aiuto per risolvere un Access Violation che non riesco ad evitare...
Allora, nel mio form8 ho una label con caption "Quante funzioni vuoi disegnare?"
e sotto un'edit per far scrivere il numero desiderato.
Un bottone ha poi questo codice:
procedure TForm8.Button1Click(Sender: TObject); begin form8.Close; RegisterClass(TLabel); RegisterClass(TEdit); Application.CreateForm(TForm9, Form9); form9.Show; end;
All'apertura del Form9, l'applicazione esegue questo codice:
procedure TForm9.FormCreate(Sender: TObject); begin LabelCreateClick(sender); EditCreateClick(sender); end;
Le procedure LabelCreatClick e EditCreateClick sono praticamente uguali, perciò ve ne mostro una come esempio:
procedure TForm9.LabelCreateClick(Sender: TOBject); begin SetLength(LabelArray, StrToInt(form8.edit2.Text)); for i:= 0 to High(LabelArray) do begin LabelArray[i]:= TLabel.Create(Form9); LabelArray[i].Parent:= Form9; // Parametri di ogni label LabelArray[i].Top:= 100+30 * i; LabelArray[i].Left:= 10; LabelArray[i].Visible:= True; LabelArray[i].Caption:='Funzione n. '+inttostr(i+1)+':'; LabelArray[i].Font.Name:='Comic Sans MS'; LabelArray[i].Font.Size:=15; end; end;
Quando, attraverso un bottone, vado a disegnare le funzione che l'utente ha inserito nelle varie Edit, il programma esegue questo codice:
procedure tForm10.FormActivate(Sender: TObject); var q:integer; begin SetLength(EditArray,strtoint(form8.Edit2.Text)); for q:=0 to High(EditArray) do begin Assi(); DynaParser.Expression := interpreta(TParser.RemoveBlanks(EditArray[i].Text)); PaintBox1.Canvas.Pen.Color:=random(25); disegna(); end; end;
Dove la procedure Disegna() è
procedure tForm10.disegna(); var I,x1,y1,x2,y2:Integer; begin with PaintBox1.Canvas do begin tacche:=strtoint(form10.Edit1.Text); Unita:=PaintBox1.Height/(2*tacche); for I:= -(PaintBox1.Width div 2) to (PaintBox1.Width div 2 - 1) do begin try DynaParser.Variable['x'] := i/unita; x1:= i +PaintBox1.Width div 2; y1:=round(PaintBox1.Height/2 - DynaParser.Value * unita); DynaParser.Variable['x'] := (i+1)/unita; x2:= x1 +1; y2:= round(PaintBox1.Height/2 - DynaParser.Value * unita); segmento(x1,y1,x2,y2); except Continue; end; end; end; end;
Il problema nasce quando, dopo aver scritto le funzioni, si dà il via al disegno...
Il programma restituisce infatti un numero di Access Violation pari al numero di funzioni disegnate...
Come risolvere questo problema?!
Aiuto...pleaseeee!! ..!
aaa