![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Invalid pointer operation
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 ); //ошибка!
> !!
странная конструкция )
неужели скомпилилось?