Błąd dostępu do komponentu.

0
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;




0

No to może łaskawie podasz treść tego błędu?

0

Variable.lines.clear błąd access violation

1

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.

0
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ć.

0

Dodałem brakujący kod

1

W podanym kodzie nigdzie nie wywołujesz tej metody, więc to nie jest cały brakujący kod.

0

Mogł byś jasniej napisac?

1

@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.

0
 
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;

0

Więc szukaj gdzie wpisujesz do Variable wartość nil lub wywołujesz obiekt TEditCompiler bez konstruktora.

0

@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 nila, gdzieś po drodze (przed wywołaniem metody rzucającej wyjątek).

0

Dziękuje, faktycznie wpisywałem nil.

1 użytkowników online, w tym zalogowanych: 0, gości: 1