Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Баги в Windows7


Автор: Михалыч 5.8.2009, 21:16
Запустил текстовый редактор написанный на Делфи в Windows7.
Вот несколько багов:
1. Ассоциировать с текстовыми файлами свою программу в реестре не получилось,выдает ошибку что такого пути не существует:
Код

reg.RootKey := HKEY_CLASSES_ROOT; 
reg.OpenKey('.txt',true);
reg.WriteString('', 'Text');
reg.CloseKey;
reg.OpenKey('Text\DefaultIcon',true);
reg.WriteString('', paramstr(0) + ', 0');
reg.CloseKey;
reg.OpenKey('Text\shell\open\command', true);
reg.WriteString('', ParamStr(0) + ' "%1"');
reg.CloseKey;


2. Код для открытия файлов RichEdit  не работает,что он есть ,что его нет. При открытии текстового файла
ни чего не отображается
Код

if (ParamCount > 0) and FileExists(ParamStr(1)) then
RichEdit1.Lines.LoadFromFile(ParamStr(1));


3. Если стоит Border Style := bsNone  а  Position:=poDesigned то окно обрезается с правой стороны и снизу сантиметра
 на два, то есть если были какие нибудь кнопки в этой области , то их уже ни кто не увидет


Если кто то знает еще какие нибудь Баги с Windows7, напишите.
Нужно быть ко всему готовым.

Автор: kami 5.8.2009, 21:25
Я бы не стал так категорично высказываться.
Win7, хоть и бета, но достаточно хорошо продуманная система.

Цитата(Михалыч @  5.8.2009,  21:16 Найти цитируемый пост)
выдает ошибку что такого пути не существует

Первое, что приходит в голову - не хватает прав.

Цитата(Михалыч @  5.8.2009,  21:16 Найти цитируемый пост)
 Код для открытия файлов RichEdit  не работает,что он есть ,что его нет. При открытии текстового файлани чего не отображается

А что мешает посмотреть, почему не отображается? А вдруг действительно такого файла нет. Или процесс запущен без параметров. (самое очевидное, ибо не сказано, какая именно строка "игнорируется").


Цитата(Михалыч @  5.8.2009,  21:16 Найти цитируемый пост)
. Если стоит Border Style := bsNone  а  Position:=poDesigned то окно обрезается с правой стороны и снизу сантиметра на два, то есть если были какие нибудь кнопки в этой области , то их уже ни кто не увидет

Эта проблема, имхо, аналогична проблеме с проблемой отображения 96dpi/120dpi.

Автор: Михалыч 5.8.2009, 22:10
Я это написал не для того что бы совета спрашивать (это будет после), а для того что бы другие заранее об этом подумали
при написании программ для Windows7

Автор: kami 5.8.2009, 23:12
Цитата(Михалыч @  5.8.2009,  22:10 Найти цитируемый пост)
для того что бы другие заранее об этом подумалипри написании программ для Windows7

тогда нужно приводить не следствия ( "не работает" ), а причины - почему так происходит.

Автор: Bose 5.8.2009, 23:15
Михалыч, ты описал симптомы, но не описал причину (которую вероятно и не нашёл). Ты даже не указал с какой версией Delphi получил эти баги, а ведь это очень важно. Какая версия Delphi, какие апдейты установлены, на каком компьютере компилировалась программа, какая версия Windows 7?

Добавлено через 8 минут и 3 секунды
Цитата(Михалыч @  5.8.2009,  20:16 Найти цитируемый пост)
3. Если стоит Border Style := bsNone  а  Position:=poDesigned то окно обрезается с правой стороны и снизу сантиметра
 на два, то есть если были какие нибудь кнопки в этой области , то их уже ни кто не увидет


Покажи скриншот.

Автор: Михалыч 6.8.2009, 09:23
Цитата(kami @  5.8.2009,  23:12 Найти цитируемый пост)
тогда нужно приводить не следствия ( "не работает" ), а причины - почему так происходит.

Причины надо обязательно искать,программу запускал у знакомого на его ПК,поставлю у себя Windows7, и буду прикидывать.

Цитата(Bose @  5.8.2009,  23:15 Найти цитируемый пост)
Покажи скриншот. 

 
Скриншот я не сделал,но примерно вот так, хотелось бы конечно узнать почему так?

Автор: v258 6.8.2009, 11:10
Цитата(Михалыч @  5.8.2009,  21:16 Найти цитируемый пост)
Ассоциировать с текстовыми файлами свою программу в реестре не получилось,выдает ошибку что такого пути не существует

Цитата(kami @  5.8.2009,  21:25 Найти цитируемый пост)
Первое, что приходит в голову - не хватает прав

Однажды открыл для себя такую вещь, как регистрация расширения только для текущего пользователя - с тех пор только так и делаю  smile 
В вашем случае это будет выглядеть так:
Код

reg.RootKey := HKEY_CURRENT_USER; 
reg.OpenKey('Software\Classes\.txt',true);
reg.WriteString('', 'Text');
reg.CloseKey;
reg.OpenKey('Software\Classes\Text\DefaultIcon',true);
reg.WriteString('', paramstr(0) + ', 0');
reg.CloseKey;
reg.OpenKey('Software\Classes\Text\shell\open\command', true);
reg.WriteString('', ParamStr(0) + ' "%1"');
reg.CloseKey;


Кстати, код универсален - если заменить HKEY_CURRENT_USER на HKEY_LOCAL_MACHINE, то расширение будет регистрироваться для всех пользователей (если сможете уговорить UAC не противодействовать  smile  ). Т.е. использование ветки HKEY_CLASSES_ROOT не совсем оправданно, т.к. она является просто зеркалом ключа HKEY_LOCAL_MACHINE\Software\Classes   smile 

Автор: CodeMonkey 6.8.2009, 19:46
Цитата(Михалыч @  5.8.2009,  21:16 Найти цитируемый пост)
1. Ассоциировать с текстовыми файлами свою программу в реестре не получилось,выдает ошибку что такого пути не существует:
код Pascal/Delphi

reg.RootKey := HKEY_CLASSES_ROOT;

За такое, начиная с Win2000, надо бить в лицо резко и сразу, чтоб запомнили ;)


Цитата(v258 @  6.8.2009,  11:10 Найти цитируемый пост)
т.к. она является просто зеркалом ключа HKEY_LOCAL_MACHINE\Software\Classes

Если совсем точнее - комбинацией из подветок HKCU и HKLM.

Автор: Михалыч 6.8.2009, 20:37
Цитата(v258 @  6.8.2009,  11:10 Найти цитируемый пост)
Т.е. использование ветки HKEY_CLASSES_ROOT не совсем оправданно, т.к. она является просто зеркалом ключа HKEY_LOCAL_MACHINE\Software\Classes

Большое спасибо,теперь буду знать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)