IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Написание простого редактора без VCL, Только WinAPI
TarasBer
сообщение 19.03.2010 14:41
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


В общем, меня тоже стал угнетать вид 300-килобайтового екзешника, состоящего из голой формы, поэтому решил и я попробовать себя в более низкоуровневом программировании.
После ковыряний в гугле и долгих блужданий по таинственным и запутаннным лабиринтам VCL я таки родил то, что прикладываю к проекту.
Итак, вопросы.
1. Иногда при запуске выдаёт ошибку 201. Конкретно - в процедуре WinAPI.CreateEdit на строчке, меняющей шрифт.
2. Если в системе поставить галочку "отображать содержимое окна при перетаскивании", то редактор очень мерцает при изменениях размера. Отлов сообщения wm_EraseBkgnd помог не полностью - если в поле ввода ввести много текста, то видно, как текст мигает. Заметил, что в Микрософте при написании Блокнота и Пейнта об этом не парились, а вот с ВордПадом - парились.
3. Как сделать полю ввода стандартную рамочку. Впрочем, та, что вышла, мне нравится гораздо больше.
4. Забавный нюанс - если поле ввода с двумя полосами прокрутки подогнать под размер окна, то в правом нижнем углу сам собой появится треугольничек для изменения размера.
5. ShortCut для главного меню. Если подчёркивания через & ловит система, то F2 итд - нет (как я понял из VCL, обрабтка этих кнопок делает сама программа). Однако, непонятно, какое сообщение ловить. Если перевести фокус на поле ввода и нажать F2, то программа не получает вообще никакого сообщения (как видно по содержимому консоли, введённой тут только для изучения сообщений). Также непонятно, что ловить, чтобы узнать, что "файл *** изменён" (чтобы задавать глупые вопросы пользователю).
6. Диалоги открытия/сохранения (чем они вообще отличаются?). У меня с ними вроде всё хорошо, но галочка "только чтение" мне не нравится, лишняя она там. И я пока ничего не проверял по поводу того, сохраняется ли корневой каталог при их использовании.


Прикрепленные файлы
Прикрепленный файл  NotepadAPI.rar ( 5.04 килобайт ) Кол-во скачиваний: 143


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 19.03.2010 16:30
Сообщение #2


Гость






Цитата
1. Иногда при запуске выдаёт ошибку 201. Конкретно - в процедуре WinAPI.CreateEdit на строчке, меняющей шрифт.
Перед тем, как менять шрифт, неплохо было бы убедиться, что он создан:
    if Font <> 0 then
SendMessage(Handle, wm_SetFont, Font, 0);
Если же Font равен 0, надо смотреть, почему. Используем GetLastError...

Цитата
3. Как сделать полю ввода стандартную рамочку. Впрочем, та, что вышла, мне нравится гораздо больше.
Стандартная как раз и создается WS_BORDER-ом. Какая именно другая нужна?

Цитата
5. ShortCut для главного меню. Если подчёркивания через & ловит система, то F2 итд - нет (как я понял из VCL, обрабтка этих кнопок делает сама программа). Однако, непонятно, какое сообщение ловить.
Еще меньше понятно - зачем ты делаешь такую замороченную систему создания меню, вместо того, чтобы создать его в RC-файле. и там же назначить ему акселераторы, которые потом подгрузить через LoadAccelerators и использовать. Зачем понадобилось выделять массив размера $FFFF, спрашивается?

Цитата
Также непонятно, что ловить, чтобы узнать, что "файл *** изменён"

EN_CHANGE Notification

Цитата
У меня с ними вроде всё хорошо, но галочка "только чтение" мне не нравится, лишняя она там.
Убери ее, для этого Флаги и предназначены - используешь только то, что надо:
  with OpenFN do begin
Flags := OFN_HIDEREADONLY; // <--- Вот здесь
lStructSize := SizeOf(OpenFN);


Цитата
И я пока ничего не проверял по поводу того, сохраняется ли корневой каталог при их использовании.
Меняется...
Цитата(MSDN)
Current Working Directory is altered when a file is opened
When the user selects at least one file and clicks the OK button, the process' current working directory is changed to the directory contain the file(s) being opened.

Для GetSaveFileName Можно поправить это с помощью тех же Флагов, но для GetOpenFileName этот флаг не работает (вот тебе и разница между этими функциями):
Цитата
OFN_NOCHANGEDIR
Restores the current directory to its original value if the user changed the directory while searching for files.
Windows NT 4.0/2000/XP: This flag is ineffective for GetOpenFileName.

Остальное посмотрю чуть позже, тут уже надо Дельфи запускать и тестировать догадку...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 14.07.2025 2:01
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"