Уроки Iczelion'а



         

Урок 35. Подсветка синтаксиса в RichEdit - часть 3


&nbsp Память для связанного списка занимается из кучи программы по умолчанию, поэтому очищать ее легко и быстро: никакой чистки не требуется вообще.

&nbsp Список слов сохраняется в файле под названием "wordfile.txt", я получаю к нему доступ через API-функцию GetPrivateProfileString. Есть десять различных подсветок символов, начинающиеся с C1 до C10. Массив цветов называется ASMColorArray. Поле pColor каждой структуры WORDINFO указывает на один из элементов ASMColorArray. Поэтому можно легко изменять подсветку синтаксиса на лету: вам всего лишь нужно изменить dword в ASMColorArray и все слова, которые используют этот цвет, будут использовать новое значение.

ПРИМЕР

Здесь исходник. Возмите его из архива ;)

АНАЛИЗ

&nbsp Первое действие, совершаемое до вызова WinMain, это вызов FillHiliteInfo. Эта функция считывает содержимое wordfile.txt и обрабатывает его.

FillHiliteInfo proc uses edi LOCAL buffer[1024]:BYTE LOCAL pTemp:DWORD LOCAL BlockSize:DWORD invoke RtlZeroMemory,addr ASMSyntaxArray,sizeof ASMSyntaxArray

Initialize ASMSyntaxArray to zero. invoke GetModuleFileName,hInstance,addr buffer,sizeof buffer invoke lstrlen,addr buffer mov ecx,eax dec ecx lea edi,buffer add edi,ecx std mov al,"\" repne scasb cld inc edi mov byte ptr [edi],0 invoke lstrcat,addr buffer,addr WordFileName

&nbsp Создаем путь до wordfile.txt: я предполагаю, что он всегда находится в той же папке, что и сама программа.

invoke GetFileAttributes,addr buffer .if eax!=-1

&nbsp Я использую этот метод как быстрый путь для проверки, существует ли файл.

mov BlockSize,1024*10 invoke HeapAlloc,hMainHeap,0,BlockSize mov pTemp,eax

&nbsp Резервируем блок памяти, чтобы сохранять слова. По умолчанию - 10 килобайт. Память занимаем из кучи по умолчанию.

@@: invoke GetPrivateProfileString,addr ASMSection, addr C1Key,addr ZeroString,pTemp, BlockSize,addr buffer .if eax!=0

&nbsp Я использовал GetPrivateProfileString, чтобы получить содержимое каждого ключевого слова в wordfile.txt, начиная с C1 и до C10.




Содержание  Назад  Вперед