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

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

Invalid pointer operation


Страницы:   1 2

Garacio ©   (2007-01-22 22:43:00) 

Прочитав статью про файловые операции средствами, я решил использовать описанный там код для копирования файлов:
procedure TForm4.ButtonCopyClick(Sender: TObject);
var Dir1, Dir2: string;
begin
DirCopy := ExcludeTrailingPathDelimiter(DirCopy);
if RadioGroup1.ItemIndex = -1 then
 begin
    Exit;
 end;
Form4.Hide;
if RadioGroup1.ItemIndex = 0 then
 begin
  if  Copy(Dir1, Length(Dir1) - 2, 3) = 'LOG'
   then begin
    CopyFiles( Handle, [ Dir1 ], DirCopy, False, False ); //ошибка!!!
   end
   else begin
    ShowMessage('Выберите папку LOG!');
    Form4.Show;
    Exit;
   end;
 end;
if RadioGroup1.ItemIndex = 1 then
 begin
  Dir2 := DirCopy +'\Tools';
  CopyFiles( Handle, [ Dir1 ], Dir2, False, False );
 end;
if RadioGroup1.ItemIndex = 2 then
 begin
  Dir2 := DirCopy +'\Tools';
  CopyFiles( Handle, [ Dir3 ], Dir2, False, False );
 end;
Form4.Show;
end;

RadioGroup1 я использую для выбора каталога-назначения. При ItemIndex = -1, 1, 2 всё работает как часы, но при ItemIndex = 0 появляется ошибка "Invalid pointer operation."
Помогите разобраться!


Garacio   (2007-01-23 12:17:00) [21]

Попробую!


clickmaker   (2007-01-23 12:15:00) [22]


> почему после Form4.
> Show форма появляется в панели задач и не разворачивается?

SetForegroundWindow(Form4.Handle)


Garacio   (2007-01-23 12:14:00) [23]


> Игорь Шевченко ©   (23.01.07 12:08) [17]


>  var Dir2: string;

Dir1 я убрал из var

> C:\Temp\LOG

И проблема ни в этих мелочах, я их уже давно все исправил, переисправил!

> Garacio ©   (23.01.07 11:52) [11]
> Т.е. сейчас вопрос сводится к тому - почему после Form4.
> Show форма появляется в панели задач и не разворачивается?
>
> В результате чего это может быть?
> И как отследить теперь ошибку, если сообщений об ошибке
> нет?


Игорь Шевченко   (2007-01-23 12:08:00) [24]


> но при ItemIndex = 0 появляется ошибка "Invalid pointer
> operation."


> var Dir1, Dir2: string;
> begin
> DirCopy := ExcludeTrailingPathDelimiter(DirCopy);
> if RadioGroup1.ItemIndex = -1 then
>  begin
>     Exit;
>  end;
> Form4.Hide;
> if RadioGroup1.ItemIndex = 0 then
>  begin
>   if  Copy(Dir1, Length(Dir1) - 2, 3) = 'LOG'
>    then begin
>     CopyFiles( Handle, [ Dir1 ], DirCopy, False, False );
>  //ошибка!!!
>    end
>    else begin
>     ShowMessage('Выберите папку LOG!');
>     Form4.Show;
>     Exit;
>    end;
>  end;


И чему равен Dir1 перед Copy ?


ЮЮ   (2007-01-23 12:06:00) [25]


> При ItemIndex = -1, 1, 2 всё работает как часы,


Т.к. Dir1 = Dir3 = '', то при  ItemIndex =  1, 2 выполняется ожно и то же
При  ItemIndex = 0 должно быть только ShowMessage('Выберите папку LOG!'), но никак не "после успешного копирования, значок формы появляется в панели задач и не разворачивается!"

Так что ставь бряк в реальном кде и пройди пошагово. Искать же ошибку в другом коде, глядя на приседенный, невозможно. Тем более, если она и есть, то скорее в CopyFiles, чем  TForm4.ButtonCopyClick.

З.Ы. Неужели в широко растиражированных статьях так нелепо пишут, как в   TForm4.ButtonCopyClick?


TRUNK   (2007-01-23 12:05:00) [26]


> Garacio ©  [11]
> форма появляется в панели задач

Вообще-то в панели задач появляется не окно формы,
а окно приложения (если его можно назвать окном).


Garacio   (2007-01-23 12:05:00) [27]


> А чего ты при креации или при показе прописал?

При показе - ничего,
При креации - чтение из ini


Garacio   (2007-01-23 12:02:00) [28]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=91
+ там-же комментарии
И затем загляни http://prog-gate.pp.ru/fido7.ru.delphi/12930.html


Elen   (2007-01-23 11:54:00) [29]


> Код я использовал из широко растиражированной статьи "Файловые
> операции средствами ShellAPI."

Мона ссылочку, ато искать ленька.

> Т.е. сейчас вопрос сводится к тому - почему после Form4.
> Show форма появляется в панели задач и не разворачивается?
>

А чего ты при креации или при показе прописал?


Garacio   (2007-01-23 11:52:00) [30]

Т.е. сейчас вопрос сводится к тому - почему после Form4.Show форма появляется в панели задач и не разворачивается?
В результате чего это может быть?
И как отследить теперь ошибку, если сообщений об ошибке нет?


Garacio   (2007-01-23 11:49:00) [31]

Код я использовал из широко растиражированной статьи "Файловые операции средствами ShellAPI."


Garacio   (2007-01-23 11:45:00) [32]

Извиняюсь, это Dir1 !
DirCopy - всегда одно и то-же: D:\Soft\New\


Elen   (2007-01-23 11:44:00) [33]


> [  ] - я убрал;

И тоже скомпилилось? Что за CopyFiles? Где выдрал?


Garacio   (2007-01-23 11:42:00) [34]

C:\Temp\LOG
[  ] - я убрал;
Меня больше всего беспокоит, что отсутствует закономерность происходящего (то с первого раза виснет то нет)


Elen   (2007-01-23 11:37:00) [35]


> Garacio

А при ошибке чему равен DirCopy?


> Eraser ©   (22.01.07 22:49) [1]
>
> > CopyFiles( Handle, [ Dir1 ], DirCopy, False, False );
> //ошибка!
> > !!
>
> странная конструкция )
> неужели скомпилилось?

Почему нет - похоже там в параметрах массив


Garacio   (2007-01-23 11:23:00) [36]

добавь проверку на существование папки

- имеется такая!
За время мего отсутствия на форуме, я поискал похожие случаи на других сайтах, советы- как это исправить. В результате я исправил появление ошибок "Invalid pointer operation" редактированием function CreateBuffer.
Теперь:         :-)
При ItemIndex = -1, 1, 2 всё работает как часы, но при ItemIndex = 0, после успешного копирования, значок формы появляется в панели задач и не разворачивается! Помогает только Alt+F4. Иногда такое "зависание в панели" происходит после первого копирования, иногда после второго.

P.S. Код я использовал из широко растиражированной статьи "Файловые операции средствами ShellAPI."


Ksan   (2007-01-23 10:08:00) [37]

IncludeTrailingPathDelimiter(DirCopy); на сколько я помню ... а вообще по хорошему добавь проверку на существование папки куда копируешь файл


Loginov Dmitry   (2007-01-23 07:50:00) [38]

Как объявлено DirCopy? Есть ли для этой переменной присвоение константы, типа
DirCopy := 'C:\Windows\System32';
Если да, то после DirCopy := ExcludeTrailingPathDelimiter(DirCopy); попробуй сделать
UniqueString(DirCopy);


Garacio   (2007-01-22 23:01:00) [39]

Да! И, как я сказал, работает по большей части!


Eraser   (2007-01-22 22:49:00) [40]

> CopyFiles( Handle, [ Dir1 ],DirCopy, False, False ); //ошибка!
> !!

странная конструкция )
неужели скомпилилось?


Страницы:   1 2

Наверх

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