Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

В чём может быть дело???


Страницы:   1 2

Ega23 ©   (2005-01-13 14:32:00) 

Есть такая процедура:

procedure BtnClearClick(Sender:TObject);
var
i:Integer;
begin
if (Sender is TForm) then
 begin
  With TForm(Sender) do
   begin
    for i:=0 to ComponentCount-1 do
     if (Components[i] is TMemo) then
      if UpperCase(TMemo(Components[i]).Name)=UpperCase('memSQLLogMonitor') then
       begin
        TMemo(Components[i]).Lines.Clear;
        //Showmessage(aFileName);
        TMemo(Components[i]).Lines.SaveToFile(aFileName);
        Break;
       end;
   end;//With TForm(Sender) do
 end;//if (Sender is TForm) then
end;//procedure BtnClearClick(

на TMemo(Components[i]).Lines.SaveToFile(aFileName); получаю
Access violation at address 77F8FFDE in module 'ntdll.dll'.
В чём может быть дело????


Александр Иванов   (2005-01-13 14:56:00) [21]


>                   begin
>                    TMemo(Components[i]).Lines.Clear;
>                    //Showmessage(aFileName);
>                    
>TMemo(Components[i]).Lines.SaveToFile(aFileName);
>                    Break;
>                    end;

Странная последовательность


Anatoly Podgoretsky   (2005-01-13 14:53:00) [22]

Расскоментируй строчку и скажи имя в момент ошибки. Кроме того проверь, что файл именно в этот момент не занят.


Ega23   (2005-01-13 14:51:00) [23]

2 Anatoly Podgoretsky ©   (13.01.05 14:43) [5]
Неизвестное значение глобальной переменной aFileName, зря закоментировал Showmessage(aFileName);

По-идее aFileName должна быть видна... Или я ошибаюсь?


Ega23   (2005-01-13 14:50:00) [24]

Вот полный код процедуры:


function ShowTexLogFile(const aFileName:String):Boolean;
           procedure BtnClearClick(Sender:TObject);
           var
            i:Integer;
           begin
            if (Sender is TForm) then
             begin
              With TForm(Sender) do
               begin
                for i:=0 to ComponentCount-1 do
                 if (Components[i] is TMemo) then
                  if UpperCase(TMemo(Components[i]).Name)=UpperCase('memSQLLogMonitor') then
                   begin
                    TMemo(Components[i]).Lines.Clear;
                    //Showmessage(aFileName);
                    TMemo(Components[i]).Lines.SaveToFile(aFileName);
                    Break;
                   end;
               end;//With TForm(Sender) do
             end;//if (Sender is TForm) then
           end;//procedure BtnClearClick(
var
aForm:TForm;
aPanel:TPanel;
OnClearClick:TMethod;
List:TStringList;
i:Integer;
begin
Result:=False;
//if not FileExists(aFileName) then Exit;
try
 Application.CreateForm(TForm, aForm);
 try
  With aForm do
   begin
    Caption:=aFileName;
    BorderStyle:=bsSingle;
    Height:=500;
    Width:=750;
    Position:=poScreenCenter;
   end;
  With TMemo.Create(aForm) do
   begin
    Parent:=aForm;
    Name:='memSQLLogMonitor';
    Align:=alClient;
    ScrollBars:=ssBoth;
    //Height:=440;
    Clear;
    List:=TStringList.Create;
    if FileExists(aFileName) then
     begin
      List.LoadFromFile(aFileName);
      for i:=List.Count-1 downto 0 do Lines.Add(List.Strings[i]);
     end;
    List.Free;
   end;
  aPanel:=TPanel.Create(aForm);
  With aPanel do
   begin
    Parent:=aForm;
    Height:=45;
    Align:=alBottom;
   end;
  With TButton.Create(aPanel) do
   begin
    Parent:=aPanel;
    Cancel:=True;
    Height:=25;
    Width:=100;
    Font.Size:=10;
    Top:=10; //aPanel.ClientHeight-10;
    Left:=aPanel.Width-110;
    Anchors:=[akTop, akRight];
    Caption:='Çàêðûòü';
    ModalResult:=mrOK;
   end;
  With TButton.Create(aPanel) do
   begin
    Parent:=aPanel;
    Height:=25;
    Width:=100;
    Font.Size:=10;
    Top:=10; //aPanel.ClientHeight-30;
    Left:=aPanel.Width-220;
    Anchors:=[akTop, akRight];
    Caption:='Î÷èñòèòü';
    OnClearClick.Code:=@BtnClearClick;
    OnClearClick.Data:=aForm;
    OnClick:=TNotifyEvent(OnClearClick);
   end;
  aForm.ShowModal;
 finally
  aForm.Free;
 end;
except on E:Exception do
 raise Exception.Create('ShowTexLogFile '+E.Message);
end;
end;


Семен Сорокин   (2005-01-13 14:46:00) [25]

на TMemo(Components[i]).Lines.Clear;
может у него (TMemo) на событие  OnChange стоит что-то что меняет index в Components (например создание/удаление компонента), попробуй так:

procedure BtnClearClick(Sender:TObject);
var
i:Integer;
_memo: TMemo;
begin
if (Sender is TForm) then
begin
 With TForm(Sender) do
  begin
   for i:=0 to ComponentCount-1 do
    if (Components[i] is TMemo) then
     if UpperCase(TMemo(Components[i]).Name)=UpperCase('memSQLLogMonitor') then
      begin
        _memo := TMemo(Components[i]);      _memo.Lines.Clear;
       //Showmessage(aFileName);
        _memo.Lines.SaveToFile(aFileName);
       Break;
      end;
  end;//With TForm(Sender) do
end;//if (Sender is TForm) then
end;//procedure BtnClearClick(


Ega23   (2005-01-13 14:46:00) [26]

Ты уверен, что доступ к твоему файлу с именем aFileName разрешен? Какой имя, кстати?

Имя вполне нормальное, файл существует, параллельно могу открыть notepad'ом, всё стереть, сохранить и закрыть.
Exception летит даже если "отковычить" ShowMessage(aFileName), т.е. сразу после TMemo(Components[i]).Lines.Clear; При этом, на экране мемо действительно очищается. Но всё, что дальше - аллес.


Anatoly Podgoretsky   (2005-01-13 14:43:00) [27]

Неизвестное значение глобальной переменной aFileName, зря закоментировал Showmessage(aFileName);


Neznaika   (2005-01-13 14:43:00) [28]

>> TMemo(Components[i]).Lines.SaveToFile(aFileName);

aFileName - это что, стесняюсь спросить.


Анонимщик   (2005-01-13 14:41:00) [29]

Ты уверен, что доступ к твоему файлу с именем aFileName разрешен? Какой имя, кстати?


Ega23   (2005-01-13 14:37:00) [30]

2 арапор   (13.01.05 14:34) [1]
может
for i:=1 to ComponentCount


"Это врад-ли..." (с) Товарищ Сухов.


арапор   (2005-01-13 14:34:00) [31]

может

for i:=1 to ComponentCount


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо