Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Delphi 7, RX, TDirectoryEdit.

Автор: Sleepwalker
Дата сообщения: 06.08.2004 09:25
бета-тестеры наткнулись на странный баг: если прога стартует с сетевого диска (т.е. типа \\ХХХ\УУУ , то при попытке пробраузить директорию выбрасывает EInOutError 123.
Ошибка стопудово в компоненте (бросил на чистую форму - та же фигня).
Кто-нибудь в курсе, что за ошибка, и что вообще с этим можно сделать?
Как вариант - поставить один из патчей, но... все-таки...
Автор: krast
Дата сообщения: 06.08.2004 09:50
Sleepwalker

Цитата:
Кто-нибудь в курсе, что за ошибка, и что вообще с этим можно сделать?

протрассируй исходники компоненты, посмотри где возникает баг именно, явно дела в какой-то API функции, почитай msdn
Автор: Sleepwalker
Дата сообщения: 06.08.2004 10:14
krast
вах, спасибо ну нашел я, где возникает ошибка... при обработке странного события TRxSpeedButton.Notification. оно крутится несколько раз, а потом выбрасывает тот самый еррор... и чего?
Автор: krast
Дата сообщения: 06.08.2004 10:21
Sleepwalker

Цитата:
при обработке странного события TRxSpeedButton.Notification. оно крутится несколько раз, а потом выбрасывает тот самый еррор

интересно-занятно, вечером дома сам посмотрю
Автор: Sleepwalker
Дата сообщения: 06.08.2004 10:28
krast
обязательные условия:
1. сетевой путь при запуске программы.
2. тип диалога - VCL. c Win32 все работает...
Автор: krast
Дата сообщения: 06.08.2004 11:37
Sleepwalker
сваял пример, запустил - выдает ошибку, тот же пример в шестой Дельфе - все работает. трабла в VCL по сути.
Автор: Sleepwalker
Дата сообщения: 06.08.2004 15:15
krast
ну дык.. понятно, что в VCL, в каком-то вызове...
но не потащишь же FileCtrl из шестерки...
Автор: krast
Дата сообщения: 06.08.2004 18:25
Sleepwalker
Короче, нашел-то место где трабла возникает.

Значит, при создании диалогового окна Select Directory создается комбобокс Drives. Вот его Сreate-функция:


Цитата:
constructor TDriveComboBox.Create(AOwner: TComponent);
var
Temp: ShortString;
begin
inherited Create(AOwner);
Style := csOwnerDrawFixed;
ReadBitmaps;
GetDir(0, Temp);
FDrive := Temp[1]; { make default drive selected }
if FDrive = '\' then FDrive := #0;

ResetItemHeight;
end;


GetDir нам дает текущую директорию (то есть что-то типа '\\server\temp\prog.exe'), а в FDrive (переменная типа char, в которой хранится выбранный диск) запишется #0.

---

Ну а потом в листбох Directories пытаемся открыть диск на просмотр директорий, что получается из этого - очевидно

ЗЫ. Это копался в исходниках VCL седьмого Delphi. Какое отличие от шестого? У меня счас нет времени искать, попытаюсь выцепить время в понедельник, так как дома нет шестерки


не по теме: записывайся в мафию, совсем о нас забыл!
Автор: Delphist
Дата сообщения: 09.08.2004 06:35
Так дело в том что он не предназначался для работы с сетью.
Либо ставь стиль в dkWin32 и юзай современный диалог, либо
просто в коде сделай такю вставку:
DirectoryEdit1.InitialDir := 'C:\';
И никакой ошибки не будет.
Автор: krast
Дата сообщения: 09.08.2004 07:45
Delphist

Цитата:
Так дело в том что он не предназначался для работы с сетью

вопрос-то не был не про то что он не работает с сетью (тут и не надо работать с сетью - просто корректно обработать данную ситуацию), а про то почему и где он выдает ошибку.

зы. Как уже было написано в Delphi 6 все ок
Автор: Delphist
Дата сообщения: 09.08.2004 09:44
Согласен немного прогнал.
Зато дал правильный совет как избавится от ошибки.
Теперь про ее природу.
Возникает в процедуре
procedure ProcessPath (const EditText: string; var Drive: Char;
var DirPart: string; var FilePart: string);
в таком месте
...
try
ChDir(Root);
FilePart := ExtractFileName (DirPart);
...
Потому как в Root = ''
Что в других версиях делфы надо смотреть.
Автор: krast
Дата сообщения: 09.08.2004 09:48
Delphist

Цитата:
Возникает в процедуре

Совершенно точно


Цитата:
Что в других версиях делфы надо смотреть.

Ага, хочу после обеда посмотреть если освобожусь
Автор: Sleepwalker
Дата сообщения: 09.08.2004 13:42
понятно.. ну т.к. перекомпиливать исходники мне че-то не улыбается, осталось только перейти на dkWin32...

спасибо за помощь

Добавлено
krast
кстати, я не понял, как ты дополз до этого кода... у меня до него трэйсер не доходит... ошибка появляется раньше...

Добавлено
Delphist
а ты проверял свой совет-то?
Автор: Delphist
Дата сообщения: 10.08.2004 06:51
Sleepwalker

Проверял и у меня работало как надо!
Автор: Sleepwalker
Дата сообщения: 10.08.2004 14:01
Delphist
у меня не работало... делаем отдельный вызов DE1.initialdir:='c:\', жмем - та же байда...

Страницы: 1

Предыдущая тема: Tooltip в ClistBox (MFC)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.