|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.10.2018, 20:41 | #21 | ||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
А какая разница? Код один и тот же.
Цитата:
При изменении своих размеров он сверяет свои размеры с окном и при необходимости у полос прокрутки выставляет и снимает флаг Visible. Цитата:
Какой объект? Если контрл, то у него несколько виджетов и он сам проверяет какой из них виден. К примеру полоса прокрутки состоит из 2-х кнопок и ползунка. А так как операция проверки однотипная у разных контролов, то используют оргонайзеры в QT: QGridLayout, QHBoxLayout и QVBoxLayout. Оргнонайзер проверяет видимость виджетов и вызывает для них Draw. Они считывают свои Pen и Brush и засылают указатель на них в холст (canvas). Так же передают свои размеры в качестве ViewFrame. Далее вызывают отрисовку примитива. Которая проверяет попадания частей примитива в ViewFrame. canvas тут не добавлял но он просто добавляется. Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
||
30.10.2018, 23:13 | #22 | |||||||||
Форумчанин
Регистрация: 17.10.2018
Сообщений: 184
|
Цитата:
С Зэд-80 не знаком, даташит говорит одна инструкция занимает 10-16 тактов, это 200-350тыс. операций в секунду – Ооочень медленно, особенно учитывая отсутствие аппаратного умножения и деления, на одну команду которого придётся до пары сотен инструкций. Похоже Ваш выбор: Асм, Си, Паскаль. На ассемблере я вижу препятствие с MUL, DIV, MOD... числа с плав.запятой, их вывод в 10-ю систему и т.п. Чистый Си не поддерживает ООП, либо с++ либо костыли. Значит паскаль: Цитата:
* Цитата:
GetMem(Buffer, Width*Height); И только самый верхний контейнер (РабочийСтол) не выделяет памяти. Код:
Цитата:
Цитата:
Как-то так Код:
Цитата:
Цитата:
Цитата:
Если качественно - ООП, иначе с морганием и дикими тормозами, как от автора BSS на кубэйсике. Цитата:
В общем это только лёгкая верхушечка, дальше будут заморочки с метками фокуса, активных, выбранных эл-в. Так что за платформа? Своя собственная или ретро из 80-х? Последний раз редактировалось jillitil; 30.10.2018 в 23:16. |
|||||||||
31.10.2018, 06:02 | #23 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Держи Turbo Vision. Использовать совместно с Turbo Pascal 6.0
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
31.10.2018, 13:18 | #24 | |||||
Форумчанин
Регистрация: 02.02.2009
Сообщений: 844
|
Клон Спектрума - Spectrum Profi. Разрабатывался с 1991 в Москве. Последняя официальная версию 5.03. Особенность, состоит из двух плат: плата процессора и плата периферии.
В 2016 Solegstar (Харьков) подготовил новую версию обеих плат 5.06 (плата процессора и плата периферии). Исправил известный проблемы, добавил выход SVGA, "стандартные" мышь и клаву, винт по двух схема, 5 разных музыкальных расширений (19 независимых каналов) и т.п. В тот же год Вадим Чертков (Курган) выпустил новую версию своей ОС PQ-Dos, она основана на одной из последних версий CP/M с добавлением возможностей MSX-dos и MSX-dos2 (получив частичную совместимость с ними). Итоговый вариант можно назвать MS-DOS на z80. На винте FAT32, размер раздела до 2 терабайт, файлы до 4 Гб, каталоги, понятие процесс, весь код был переписан, что позволило его резко ускорить и пр. Параллельно с текущей темой прорабатываю "Менеджер переменных", который позволит создавать и работать с переменными в верхней (страничной) памяти. В том числе планируется работа со свапом, тогда максимальный объем общей памяти под переменные будет 1Гб и до 4гб на переменную в случае её выгрузки в отдельный файл. Всё это явно превосходит любые потребности. Он пока так же на стадии проработки идеи, остались не понятны буквально 2-3 момента. Цитата:
Для режима Спектрум базовая частота 3.5Мгц, в режиме Profi обязателен турбо режим (на разных машинах 7 или 14Мгц). Цитата:
Цитата:
У контейнера можно выделить две особенности: 1) Его физический размер (физический, логический) зависит от элементов его наполняющих. То есть в начале обработке не известен и может быть больше рабочего размера окна. 2) У него могут быть пустые места, не заполненные элементами, которые нужно (в будущем) залить фоном. Цитата:
Так размеры контейнера заранее неизвестны и зависят от размеров наполняющих его элементов, а они в свою очередь зависят от своего содержимого и от размеров окружающих элементов, то придется делать двух проходную обработку. На первом проходе независимо обработать те элементы размеры которых зависят только от содержимого и учесть координаты их размещения, на втором проходе обработать сам контейнер и элементы размеры которых зависят от размера контейнера и окружающих элементов. А может второй проход разделить на два: для элементов и для контейнера. Если графика храниться на уровне контейнера, в ней учитывается и "пустые" места. Почему нельзя хранить графику на уровне элементов? Тогда заливку пустых мест можно не хранить, а переложить на программу отрисовки. Так же хотел передавать "на верх" только размеры буфера ширина/высота (для их учета в буфере родителя) и ссылку на него (по ней можно забрать информацию). Это позволит хранить информацию о буфере один раз и не перекидывать информацию с места на место. Или предполагается, что после вставки в родительский буфер, буфер контейнера удалятся? Цитата:
По этому я предполагал логическую прорисовку (создания образа экрана), а потом физическую только тех частей что видно. Это не избавляет от затрат памяти на полного хранения в графике всех окон, что видны на экране. Ну, "за что купил, за то и продаю". Проверить возможности пока нет. Для Спектрума разница есть. Экран у него имеет не линейную структуру, а буфера нужно делать линейными. Не всегда можно определить внешний вывод виджета/элемента без его полной перестройки. Не всё можно решить примитивами. Предположим создали кнопку с надписью "Отмена". Размер кнопки может быть фиксированный (больше/меньше размера надписи) или произвольный (заполоняем всё свободное пространство) надпись по центру/слева/справа. И мы видим либо только правую часть кнопки или только середину. Как вывести графику без полной прорисовки кнопки? Да рамки выводим примитивам, но как быть с текстом или иконкой? А ведь есть более сложные объекты, например таблицы с выводом графики в ячейки. Да лишние расходы. С памятью ни чего сделать нельзя (только удалять информацию у объектов которые ушли с экрана). Времяные расходы оптимизировать тем, что прорисовывать объекты при первом выводе и при обновлении самого объекта (и только той информации, которая была изменена). Решение одно - разумное проектирование данных для вывода. Спасибо, за иллюстрацию, она поможет. Спасибо, но только я могу воспользоваться максимум Turbo Pascal 3.0
С уважением, Алексей.
|
|||||
31.10.2018, 16:33 | #25 | |||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
Поэтому размеры всегда известны и этим и пользуются. Если они неизвестны, то они вычисляются по мере необходимости. Приходит сигнал(событие) вызывается метод он вызывает алгоритм вычисления. Допустим, пришёл сигнал на максимизации окна идёт пересчёт размера и положения контролов. А те в свою очередь пересчитывают размеры виджетов. Цитата:
Основная проблема в вашем методе в том, что если делать один буфер для контрла, а потом внём рисовать а потом его выводить. То пользователь будет долго ждать пока вы весь его заполните. Это очень долго. Допустим вы это решите при помощи псевдомногозадачности и флагов которые будут показывать готовность строки-буфера. Так вот останется вторая проблема это то, что такие буферы потребуются для всех контролов, а их у вас много и весят они у вас постоянно в памяти. Цитата:
Так вот после того как видимые строки определены проходят по ним определяют видимые ячейки. Ячейки выводят DrawCell либо DrawVirtualCell. Перед от рисовкой каждой ячейки в canvas.ClipRect заносится размеры и положения этой самой ячейки, её Frame. При выводе текста в ячейку если текст моноширинный, то берут длину самой большой буквы "W" и вычисляют количество видимых символов. Их и рисуют. Если есть автоперенос слов, то продолжают рисовать с новой строчки. Если нету то выходят из метода. При выводи буквы canvas.ClipRect применяется для расчёта отсечения.Как было ранее показано на примере с ViewFrame.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 31.10.2018 в 16:36. |
|||
31.10.2018, 17:03 | #26 | |||||
Форумчанин
Регистрация: 17.10.2018
Сообщений: 184
|
Вопрос: ООП реализован? Карты таро говорят нет, значит дальше продолжать обсуждать в этом направлении не стоит.
По прежнему паскаль предоставляет работу с кучей, так что надежда ещё есть. Придётся мутить с типизированными данными и массивами для хранения элементов/компонентов. ***************************** Цитата:
Код:
Owner, Next: PComponent; Цитата:
Cм. рис. Цитата:
Цитата:
Вопрос был про "из чего состоит окно". Так вот именно в окне есть особый элемент ClientArea, именно он умеет расширятся если у него есть элементы за границами. Да, придётся перерисовывать дважды или трижды или много раз, если элементы на нём за границей. Тут ответственность на дизайнере. Цитата:
На практике каждый контейнер имеет флаг выделен ли у него буфер, если нет, то передает наверх .... |
|||||
31.10.2018, 17:40 | #27 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 844
|
Спасибо!
Я возьму не много времени, что бы всё обдумать.
С уважением, Алексей.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание графического интерфейса drag'n'drop | genaveng | WPF, UWP, WinRT, XAML | 5 | 06.07.2013 21:58 |
Инструменты изменения графического интерфейса контролов | Smogg | Win Api | 6 | 24.12.2012 07:42 |
Какую библиотеку графического интерфейса выбрать? | demigod82 | Visual C++ | 3 | 22.04.2012 12:24 |
Тормоза при отработке графического интерфейса | sergey113 | Помощь студентам | 10 | 23.03.2011 12:51 |
Написание графического интерфейса | zhuravlov | Фриланс | 3 | 04.01.2011 21:54 |