Не знаю относится ли к глубоким знаниям апи то, что поля left и top здесь всегда будут нулю равны: Код (Text): GetClientRect(View.Handle, ClientRect); Result := (ClientRect.Right - ClientRect.Left - LEFT_MARGIN - SCROLLBAR_WIDTH) div CHAR_WIDTH; Никогда не устану удивляться крутизне этого компилера, он буквально вычитает сначала LEFT_MARGIN, затем SCROLLBAR_WIDTH: Код (Text): 00408452 E8 21C6FFFF call <JMP.&GetClientRect> 00408457 8B4424 08 mov eax,dword ptr ss:[esp+8] 0040845B 2B0424 sub eax,dword ptr ss:[esp] 0040845E 83E8 32 sub eax,32 00408461 83E8 14 sub eax,14 RGB это вызов процедуры. Константа? Хреностанта! Работает лучший и самый скорострельный компилер современности, ему лучше знать: Код (Text): SetBkColor(dc, RGB(255, 255, 255)); Код (Text): 00408DEC B1 FF mov cl,FF 00408DEE B2 FF mov dl,FF 00408DF0 B0 FF mov al,FF 00408DF2 E8 1DBDFFFF call <main.sub_404B14> 00408DF7 50 push eax 00408DF8 55 push ebp 00408DF9 E8 1ABCFFFF call <JMP.&SetBkColor> Классика, два соседних паттерна. Даже лишний префикс в предыдущей инструкции не повод не пихнуть еще одну, обрубив старшие поля еще раз для надежности: Код (Text): 004078CD 8BD0 mov edx,eax 004078CF 66:81E2 FF03 and dx,3FF 004078D4 0FB7D2 movzx edx,dx 004078D7 8915 40B74000 mov dword ptr ds:[40B740],edx Тут просто немая сцена: Код (Text): 0040933B 33C0 xor eax,eax 0040933D A3 A0B74000 mov dword ptr ds:[40B7A0],eax 00409342 33C0 xor eax,eax 00409344 A3 A4B74000 mov dword ptr ds:[40B7A4],eax 00409349 33C0 xor eax,eax 0040934B A3 B4B74000 mov dword ptr ds:[40B7B4],eax 00409350 33C0 xor eax,eax 00409352 A3 B8B74000 mov dword ptr ds:[40B7B8],eax --- Сообщение объединено, 17 июн 2026 --- Точно помню, что студия еще в начале десятых видела константы например, закостыливая их всячески. Стык между паттернами конъюнкции и преобразования типов тоже отработала бы как надо. Так что нет, с нормальным компилером такого не надо делать.
Я предполагаю что это демка а не готовый проект в прод. Код (Pascal): array[0..MAX_LINES - 1, 0..MAX_COLS - 1] Такие вещи динамически создаются в той же scintill'e. Ты прав. В этой паскалевой демке даже выделения текста нет. И .asm файлы она не компилирует в отличии от vscode. Нормальные люди такие вещи на асме пишут(на том же фасме), чтобы не было такого вопиющего фуфла в инструкциях. P. S. лично мне понятно, что имел в виду автор улетевший в бан.
Точно помню, что студия еще в начале десятых нормально костылила константы, что в выражениях, что пропуская вызовы функций. И стык между паттернами конъюнкции и преобразования типа тоже отработала бы правильно. Так что нет, с нормальным компилятором такого не надо делать.
Может какую нибудь демку сам напишешь? Чтобы быстрее свою мысль донести? Не нужен будет бред из булевой логики и портянки .асм листингов.
Судя по всему есть, но вот такой слабенький. Прямо мешанины из паттернов как у gcc там нету. Какую демку ты хочешь? Показать как вычитать одним приемом сумму из двух констант? Или как вызвать SetBkColor(dc, 0x00FFFFFF)?
Не тупи. Понятно же какую демку. Покажи как правильно то же самое сделать, не стенаниями и нытьем про недостатки компилятора а в виде кода. Не нравится паскаль, можно на си без разницы. Только чтобы именно твой код был. А не копипаста. Можешь даже llm заюзать. Отправная точка я думаю здесь:
Не знаю где ты увидел стенания и нытье, но я как добрый джинн одно твое желание могу исполнить в обмен на душу: Код (Text): call <JMP.&GetClientRect> mov eax,dword ptr ss:[esp+8] sub eax,0x32+0x14 Код (Text): push 0xFFFFFF push ebp call <JMP.&SetBkColor> Код (Text): mov edx,eax and edx,3FF mov dword ptr ds:[40B740],edx Код (Text): xor eax,eax mov dword ptr ds:[40B7A0],eax mov dword ptr ds:[40B7A4],eax mov dword ptr ds:[40B7B4],eax mov dword ptr ds:[40B7B8],eax
Хорошо. Сделай то же самое, но правильно. И так как он свой код уже опубликовал(там понятна идея), реализуй в редакторе выделение текста, копирование-вставка. Так будет честно что ты понимаешь о чем пишешь. Все то же самое, минимальная демка.
Этот баран даже имея готовый пример не осилит ) Пример был в контексте: Ну типа чел может только чужие компоненты пuздить. Код (C): #include <windows.h> #define MAX_LINES 100 #define MAX_COLS 100 typedef struct { char Ch; unsigned char Attr; } TCell; typedef struct { TCell Cells[MAX_LINES][MAX_COLS]; int LineCount; int CurLine; int CurCol; } TEditorModel; typedef struct { HWND Handle; HWND VScroll; HWND HScroll; int ScrollLine; int ScrollCol; int MaxScrollLine; int MaxScrollCol; int Width; int Height; } TEditorView; В коде для каждого символа добавлялись атрибуты, это нужно в будущем для подсветки синтаксиса. Пусть покажет как правильно надо делать.
Я не знаю, что именно ты вычитываешь тут, как и чем это было собрано, в общем сраче это не понятно. Но просто напомню, что в мире "однопроходных цешников" если код компилируется без оптимизации, то код компилируется без оптимизации. Это, в частности, может быть необходимо для удобств отладки и тому подобного, чтобы, например, точку останова поставить на понятную человеку "с высокоуровневым мышлением" строчку асм кода. Если этот код сгенерирован с включенной оптимизацией, то да, это плохо, если это версия предназначенная для откладки, это нормально.
Иными словами твое возражение состоит в том, что если это с оптимизацией код так выглядит, то это плохо, а если без - то нормально. А как оно на самом деле хз, но баба яга против. Вот например публичная версия тоталцмд, а не на колене за пару минут написанная нейросетью демка, с той же шляпой на борту. Давай попробуем предположить с какими параметрами оно скомпилено. --- Сообщение объединено, 18 июн 2026 --- Просто занятное наблюдение. Последний пост 8 июня. Бан. Первый пост 8 июня. Бан. Первый пост аж с 22 мая и какое совпадение прямо сегодня. --- Сообщение объединено, 18 июн 2026 --- Да, именно эта ссаная манера удалять посты через минуту, штирлица и подвела кстати.
Забавное наблюдение, как задача построения визуального редактора(text editing and display) решалась в microsoft аж с 1995 года.