type
TEditCompiler = class(TForm)
MainMenu1: TMainMenu;
Compile1: TMenuItem;
Breakpoint1: TMenuItem;
Label1: TLabel;
ImageList1: TImageList;
Run1: TMenuItem;
Step1: TMenuItem;
TraceInto: TMenuItem;
Warning: TMemo;
Save: TMenuItem;
GoApplication1: TMenuItem;
Search1: TMenuItem;
Find1: TMenuItem;
FindNext1: TMenuItem;
Gocursor1: TMenuItem;
Splitter1: TSplitter;
Save1: TMenuItem;
Savecode1: TMenuItem;
Exit1: TMenuItem;
ViewLogic: TMenuItem;
constructor Create(AOwner: TComponent);
procedure Compile1Click(Sender: TObject);
procedure Breakpoint1Click(Sender: TObject);
procedure SaveClick(Sender: TObject);
Function SaveAlgorithm(FileName:String):boolean;
procedure Run1Click(Sender: TObject);
procedure Step1Click(Sender: TObject);
procedure GoApplication1Click(Sender: TObject);
procedure Find1Click(Sender: TObject);
procedure FindNext1Click(Sender: TObject);
procedure Gocursor1Click(Sender: TObject);
procedure TraceIntoClick(Sender: TObject);
procedure Savecode1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure ViewLogicClick(Sender: TObject);
private
ProgMarker:Word;
ProgMarkerVisible:Boolean;
ErrorMarker:Word;
ErrorMarkerVisible:Boolean;
CountLast:Word;
BreakWindow:TBreakWindow;
EditCompilerSearch:TEditCompilerSearch;
procedure ShowVariable;
public
Variable:TMemoColor;
{ Public declarations }
end;
procedure TEditCompiler.ShowVariable;
var Counter,Counter1:Word;
Temp,Temp1,Temp2:String;
begin
Variable.Lines.Clear; //bład access violation
end;
constructor TEditCompiler.Create(AOwner: TComponent);
var Counter:Word;
begin
Inherited;
Variable:=TMemoColor.Create(Self,505,16,280,249);
Variable.Anchors:= [akTop, akRight, akBottom];
Variable.Lines.Sorted:= true;
InsertControl(Variable);
end;
constructor TMemoColor.Create(AOwner:TComponent;ALeft,ATop,AWidth,AHeight:Word);
begin
ColorTab[ 1].Name:='Black'; ColorTab[ 1].cl:=clBlack;
ColorTab[ 2].Name:='Blue'; ColorTab[ 2].cl:=clBlue;
ColorTab[ 3].Name:='DarkGray'; ColorTab[ 3].cl:=clDkGray;
ColorTab[ 4].Name:='Fuchsia'; ColorTab[ 4].cl:=clFuchsia;
ColorTab[ 5].Name:='Gray'; ColorTab[ 5].cl:=clGray;
ColorTab[ 6].Name:='Green'; ColorTab[ 6].cl:=clGreen;
ColorTab[ 7].Name:='Limegreen'; ColorTab[ 7].cl:=clLime;
ColorTab[ 8].Name:='LightGray'; ColorTab[ 8].cl:=clLtGray;
ColorTab[ 9].Name:='Maroon'; ColorTab[ 9].cl:=clMaroon;
ColorTab[10].Name:='Navy blue'; ColorTab[10].cl:=clNavy;
ColorTab[11].Name:='Olive green'; ColorTab[11].cl:=clOlive;
ColorTab[12].Name:='Purple'; ColorTab[12].cl:=clPurple;
ColorTab[13].Name:='Red'; ColorTab[13].cl:=clRed;
ColorTab[14].Name:='Silver'; ColorTab[14].cl:=clSilver;
ColorTab[15].Name:='Teal'; ColorTab[15].cl:=clTeal;
ColorTab[16].Name:='White'; ColorTab[16].cl:=clWhite;
ColorTab[17].Name:='Yellow'; ColorTab[17].cl:=clYellow;
ColorTab[18].Name:='Aqua'; ColorTab[18].cl:=clAqua;
Lines:=TStringList.Create;
Lines.OnChange:=ListChange;
Inherited Create(AOwner);
Top:=ATop;
Left:=ALeft;
Height:=AHeight;
Width:=AWidth;
BevelKind:=bkSoft;
TabStop:=False;
Canvas.Font.Color:= clBlack;
Canvas.Font.Height:= 15;
Canvas.Font.Name:= 'Fixedsys';
Canvas.Brush.Color:= clSilver;
ScrollBar:=TScrollBar.Create(Self);
ScrollBar.Left:=0;
ScrollBar.Top:= 0;
ScrollBar.Width:=AHeight-4;
ScrollBar.Height:=AWidth-4;
ScrollBar.Anchors:= [akTop, akRight, akBottom];
ScrollBar.Kind:= sbVertical;
ScrollBar.PageSize:= 0;
ScrollBar.OnChange:=ScrollBarChange;
ScrollBar.TabStop:=False;
InsertControl(ScrollBar);
ScrollTopButtom:=false;
OnResize:=ListChange;
DoubleBuffered:=true;
end;
type TMemoColor = class (TCustomControl)
constructor Create(AOwner:TComponent;ALeft,ATop,AWidth,AHeight:Word);
procedure Paint; override;
public
Lines:TStringList;
ScrollBar:TScrollBar;
ScrollTopButtom:Boolean;
ColorTab: array[1..18] of record
name:string[20];
cl:longword;
end;
procedure ListChange(Sender: TObject);
procedure ScrollBarChange(Sender: TObject);
end;
No to może łaskawie podasz treść tego błędu?
Variable.lines.clear błąd access violation
Coś krótka treść tego błędu...
Obstawiam, że w momencie wywołania metody Variable.Lines.Clear
zmienna nie zawiera referencji do utworzonego w pamięci obiektu - AV
to wyjątek tworzony podczas dostępu do niezarezerwowanej pamięci; Sprawdź debugerem co siedzi w zmiennej podczas wywołania tej metody;
Innym powodem może być jakiekolwiek odwołanie do niezarezerwowanej pamięci wewnątrz klasy TMemoColor
; Jeżeli jest to Twój komponent (czy tam klasa) to przedebuguj także jego kod.
procedure TEditCompiler.ShowVariable;
var Counter,Counter1:Word;
Temp,Temp1,Temp2:String;
begin
if Assigned(Variable) then
Variable.Lines.Clear;
end;
constructor TEditCompiler.Create(AOwner: TComponent);
var Counter:Word;
begin
Inherited Create(AOwner);
Variable:=TMemoColor.Create(Self,505,16,280,249);
Variable.Anchors:= [akTop, akRight, akBottom];
Variable.Lines.Sorted:= true;
InsertControl(Variable);
end;
Przypuszczam, że tak jak @furious programming napisał, jednakże bez całego kodu ciężko to stwierdzić.
Dodałem brakujący kod
W podanym kodzie nigdzie nie wywołujesz tej metody, więc to nie jest cały brakujący kod.
Mogł byś jasniej napisac?
@piter2004 - czego nie rozumiesz? Nie podałeś fragmentu kodu, w którym wywołujesz metodę ShowVariable
; To co dodałeś do pierwszego posta nic nie zmienia - nadal widzimy jedynie deklarację i definicję tej metody;
Więc podaj kod, w którym tę metodę wywołujesz.
procedure TEditCompiler.Compile1Click(Sender: TObject);
var r:longint;
temp:integer;
y,z:word;
ErrorPos:Word;
temp1:TPoint;
Counter:Word;
begin
ErrorRecord.Text:='';
BodyAlgorithm.Clear;
for Counter:=0 to Body.Lines.Count do BodyAlgorithm.Add(Body.Lines.Strings[Counter]);
CompileAlgorithm;
ShowVariable;
End;
Więc szukaj gdzie wpisujesz do Variable
wartość nil
lub wywołujesz obiekt TEditCompiler
bez konstruktora.
@piter2004 - a czy w kodzie komponentu TMemoColor
odwołujesz się do zmiennej Variable
? To ostatni mój pomysł - albo odwołujesz się, albo wpisujesz do zmiennej nil
a, gdzieś po drodze (przed wywołaniem metody rzucającej wyjątek).
Dziękuje, faktycznie wpisywałem nil.