Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц, летом дешевле!

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2008, 21:11   #1
NeiL
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 49
По умолчанию Ошибка при присваивании

Помогите разобрать почему возникает ошибка при присваивании переменной класса (F: Boolean) какого-либо значения (Project Test.exe raised exception class EAccessViolation with message 'Access violation at address 004FD000 in module 'Test.exe').

Вот код:

Код:
unit NieL_Tree;

interface

uses
  SysUtils, Classes, anvil_Nodes, anvil_Objs, StdCtrls;

type
  TNieL_Tree = class(TObject)
  private
    B: Boolean;
  public  
    procedure LLastConf(
      FileName: String; Ctrl: Tanvil_TreeView);
  end;

implementation

{ TNieL_Tree }

procedure TNieL_Tree.LLastConf(FileName: String; Ctrl: Tanvil_TreeView);
var
  L: TIntegerList;
  F: TFileStream;
  Cur: TTreeItem;
  i: Integer;
begin
  B := True { ОШИБКА ПОЯВЛЯЕТСЯ ЗДЕСЬ }
  if FileExists(FileName) then
  begin
    F := TFileStream.Create(FileName, fmOpenRead);
    try
      if F.Size > 0 then
      begin
        L := TIntegerList.Create;
        try
          L.Read(F);
          Cur := Ctrl.Items[0];
          repeat
            Cur := Cur.Next;
            for i := 0 to L.Count - 1 do
              if Cur.Tag = L[i] then
              begin
                Cur.CheckState := cbChecked;
                if Cur.CheckState <> Cur.Parent.CheckState then
                  ClickItem(Ctrl, Cur);
              end;
          until
            Cur = Ctrl.Items.GetLast;
        finally
          L.Free;
        end;
      end else
        DefaultItemChecked(
          Ctrl, cbChecked);
    finally
      F.Free;
    end;
  end else
    DefaultItemChecked(
      Ctrl, cbChecked); 
end;

Последний раз редактировалось Stilet; 17.04.2008 в 08:20.
NeiL вне форума Ответить с цитированием
Старый 16.04.2008, 21:21   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
type
TNieL_Tree = class(TObject)
private
B: Boolean;
public
procedure LLastConf(
FileName: String; Ctrl: Tanvil_TreeView);
end;

implementation
переделываем:
Цитата:
type
TNieL_Tree = class(TObject)
private

public
procedure LLastConf(
FileName: String; Ctrl: Tanvil_TreeView);
end;

var B: Boolean;

implementation
mihali4 вне форума Ответить с цитированием
Старый 16.04.2008, 21:30   #3
NeiL
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 49
По умолчанию

Фишка том, что переменная должна быть объявлены внутри именно этого класа и варианты перенести ее куда-либо не рассматриваются.
NeiL вне форума Ответить с цитированием
Старый 16.04.2008, 21:32   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от NeiL Посмотреть сообщение
Помогите разобрать почему возникает ошибка при присваивании переменной класса (F: Boolean) какого-либо значения (Project Test.exe raised exception class EAccessViolation with message 'Access violation at address 004FD000 in module 'Test.exe').
.........................
begin
B := True { ОШИБКА ПОЯВЛЯЕТСЯ ЗДЕСЬ }
То, что access violation появляется на первом же обращении к члену класса заставляет предположить, что под объект не выделена/неправильно выделена память.
B_N вне форума Ответить с цитированием
Старый 16.04.2008, 21:52   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Однако вы оригинал, батенька!
Класс-то вы объявили. А кто будет создавать экземпляр класса?
А как обращаются к свойству класса, вы подзабыли?
Вот примерчик:
Код:
var tn: TNieL_Tree;
begin
tn:=TNieL_Tree.Create;
tn.b:=True;
tn.Free;
end;
mihali4 вне форума Ответить с цитированием
Старый 16.04.2008, 22:24   #6
NeiL
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 49
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Однако вы оригинал, батенька!
Класс-то вы объявили. А кто будет создавать экземпляр класса?
А как обращаются к свойству класса, вы подзабыли?
Вот примерчик:
Код:
var tn: TNieL_Tree;
begin
tn:=TNieL_Tree.Create;
tn.b:=True;
tn.Free;
end;
Большое спасибо. Че-то голова под вечер совсем не варит.
NeiL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц, летом дешевле!

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чем ошибка ? Droid Общие вопросы Delphi 13 03.05.2008 18:17
В чем ошибка!!! juden Общие вопросы Delphi 12 10.03.2008 08:53
ОШИБКА YLIANOVA83 Microsoft Office Word 5 07.03.2008 15:02
Что за ошибка??? Rembo Свободное общение 2 08.01.2008 14:34
в чем ошибка? Lonix Общие вопросы Delphi 2 24.03.2007 09:41