Win32 вопросы

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Win32 вопросы

Post by Lavr »

Зафиксировать размеры List View control

Я тут, работая над 4bit CPU, при каждом изменении схемы вынужден вручную
редактировать вот такую таблицу:

Image

А потом я её превращаю в *.bin-прошивку двух ПЗУ микрокоманд посредством
WinHex-a.

Но поскольку сейчас изменения пошли чаще, я решил, что подготовку прошивки
надо бы автоматизировать, и с этой целью надумал написать визуальный
bin-редактор, где щёлкая мышью по полю единиц и ноликов можно было бы
оперативно прошивку поменять...

Я решил сделать рабочее поле редактора на основе List View control-а с сеткой:

Image

Я с ним работал и он весьма удобный...

Но выяснилась очень неприятная вещь - я не знаю, как зафиксировать
размеры столбцов этой таблицы. :(

Это порой очень удобно, что ширину столбцов можно оперативно менять мышью...

Но не в этом же случае! :wink:

Я погуглил - в интернете вопрос "как зафиксировать размеры List View control" -
весьма популярен... Но ответа нигде нет... :(
Может кто из наших гуру посоветует решение?



PS. Ну вот эта мысль наконец-то реализовалась... :wink:

Image
Скачать

Окончательно собирал под Вендой 7, которая неслабо проклевала мне мозг...
Но все опции вроде работают правильно, а окончательно все глюки выяснятся
при эксплуатации.
Last edited by Lavr on 14 Feb 2014 10:04, edited 1 time in total.
iLavr
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

В крайнем случае, всегда есть один радикальный метод: перехват windowproc. После создания listview можно найти в нём окно заголовка (оно там единственное), и подставить свою процедуру, которая будет обрабатывать только WM_NCHITTEST (возвращая HTNOWHERE), а остальные события переадресовывать старой windowproc.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Ну временно я сделал вот что - в конце процедуры обработки сообщений
от List View control я поставил восстановление размеров.

Но получилось несколько смешно: "дрыгающаяся таблица"... :wink:

Но я имел ввиду вот что - нет ли у List View control такого свойства - не изменять
размер?
Или может ему можно такой сендмессэдж послать?

Есть же у обычного окна возможность - не изменять размер...
iLavr
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Можно лочить constaints. Или нет?
User avatar
VituZz
God
Posts: 1343
Joined: 13 Nov 2010 04:06

Post by VituZz »

Lavr wrote:List View control
Сменить инструмент не предлагать?
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

VituZz wrote:
Lavr wrote:List View control
Сменить инструмент не предлагать?
Выслушаю любые советы... я как-то не рассчитывал завязнуть на
написании bin-редактора...


PS. Если ты мне хочешь сказать - плюнь на контрол и напиши в ДОС - я уже тоже
к этой мысли склоняюсь...
Но если ты имеешь в виду - написать на "Специалисте" - это уж слишком...
:lol:


HardWareMan wrote:Можно лочить constaints. Или нет?
Скажи - что конкретно... так абстрактно я тебя не понял.
iLavr
User avatar
VituZz
God
Posts: 1343
Joined: 13 Nov 2010 04:06

Post by VituZz »

Lavr wrote:
VituZz wrote:
Lavr wrote:List View control
Сменить инструмент не предлагать?
Выслушаю любые советы...
Мне кажется, твою задачу можно довольно просто решить при помощи Tcl/Tk. В Tk есть компонент entry, возможно, это то, что тебе нужно.
Tcl/Tk работает под Windows, Linux, Mac (как бы намёк :).
User avatar
ALS
Senior
Posts: 123
Joined: 07 Aug 2012 11:11
Location: Севастополь

Post by ALS »

В свойствах Columns для каждой колонки выставить MaxWidth=30, MinWidth=30 и Width=30 (ну или любое другое значение).
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

VituZz wrote:Мне кажется, твою задачу можно довольно просто решить при помощи Tcl/Tk.
В Tk есть компонент entry, возможно, это то, что тебе нужно.
Tcl/Tk работает под Windows, Linux, Mac (как бы намёк :).
Так-тиклем я, к сожалению, не владею в такой степени, чтобы быстро написать приложение. :(
И инструментов у меня сейчас под него практически никаких нет.

Да, я потратил достаточно много времени однажды, чтобы выяснить, как реализованы
некоторые, интересующие меня фичи в программе на Tcl/Tk (DeckIT), но не более того.

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

Да, впрочем, эту разовую поделку можно и под ДОС-ом написать. Я уже прикидывать
начал.
iLavr
bar
Senior
Posts: 185
Joined: 07 Aug 2006 10:18

Post by bar »

Lavr wrote:
VituZz wrote:
Lavr wrote:List View control
Сменить инструмент не предлагать?
Выслушаю любые советы...
Может я не совсем понимаю задачу, но я бы, пожалуй, в такой ситуации вообще не трогал бы программирование UI. Взял бы Excel и загнал бы табличку в него. Редактируя в нём не bin-форматы, а просто табличку из единичек и нуликов. Вопросы импорта/экспорта можно решить csv форматом. CSV полный единичек и ноликов перегнать в bin формат можно пользуясь любым языком программирования по вкусу. Обратное преобразование из bin в csv не сложнее.


Правда при таком подходе после цикла экспорт-импорт, будет пропадать форматирование ячеек. Но если это важно, то можно пользуясь функцией record macro записать последовательность действий для форматирования (табличка ведь константного размера? значит даже не придётся править результат record macro, сворачивая макрос в цикл и обучая его выяснять необходимое количество итераций) и потом импортируя данные в Excel из csv накладывать сверху форматирование, вызывая записанный макрос.

В OpenOffice, насколько я помню, для импорта/экспорта в текстовый формат есть куча опций, то есть можно заменить запятую на какой-нибудь другой разделитель полей, скажем на пробел или табуляцию. Но, по-моему, скриптинг в OpenOffice требует большего терпения, поскольку там документация не дотягивает до MSOffice. Да и record macro более урезанный, по сравнению с MSOffice. По-крайней мере так было, несколько лет тому назад, когда я писал злые скрипты для OpenOffice, для работы со школьным расписанием в виде таблички.

И если все эти проблемы решить так или иначе, то дальше можно писать макросы на VBA, которые будут автоматизировать процесс внесения изменений.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

bar wrote:Может я не совсем понимаю задачу, но я бы, пожалуй, в такой ситуации вообще не трогал бы программирование UI. Взял бы Excel и загнал бы табличку в него. Редактируя в нём не bin-форматы, а просто табличку из единичек и нуликов.
До сих пор я это делал с помощью Ворда, калькулятора и WinHex-a...
Но т.к. я устал это делать в Ворде - я хочу, ткнув мышью в "0" превращать
его в "1" (и наоборот), и сразу на выходе получать bin-файл прошивки ПЗУ.
iLavr
bar
Senior
Posts: 185
Joined: 07 Aug 2006 10:18

Post by bar »

Lavr wrote:
bar wrote:Может я не совсем понимаю задачу, но я бы, пожалуй, в такой ситуации вообще не трогал бы программирование UI. Взял бы Excel и загнал бы табличку в него. Редактируя в нём не bin-форматы, а просто табличку из единичек и нуликов.
До сих пор я это делал с помощью Ворда, калькулятора и WinHex-a...
Но т.к. я устал это делать в Ворде - я хочу, ткнув мышью в "0" превращать
его в "1" (и наоборот), и сразу на выходе получать bin-файл прошивки ПЗУ.
Как я понимаю, при том подходе который ты эксплуатировал до сих пор, тебя утомляло именно общение с GUI: в ворде внести изменения, затем экспортировать из ворда в файл, затем импортировать в WinHex, и опять же экспортировать.
Но ворд -- это не excel. В excel'е можно, по-крайней мере, обойтись без калькулятора, чтобы те hex'ы в хвостах строк высчитывались бы автоматически. WinHex'а тоже можно избежать самописным конвертером из csv в bin. И тогда экспорт будет сводится к выбору пункта export в менюшке excel и дабл-клику по .bat файлу, который сделает bin из csv. Оно конечно нельзя назвать "сразу на выходе", но тут ведь нужно не тотальное решение проблемы, а компромиссное. Это оптимизационная задача: надо минимизировать суммарное время потраченное на кодинг и на работу с результатом кодинга. И именно поэтому я не предлагаю писать на VBA экспорт из excel'я непосредственно в bin файл. Мне кажется, что перерывать документацию выясняя как из VBA открыть файл и как писать в файл бинарные значения -- это слишком много времени потраченного на кодинг.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

А ещё я хочу, чтобы по щелчку мыши все "1" заменились на "█", а "0" - на "__"

И я сразу бы увидел что то типа: _█___███_█_█__██_ во всей таблице...

Excel мне в этом не поможет, а визуально глянуть - для дела очень полезно!
iLavr
bar
Senior
Posts: 185
Joined: 07 Aug 2006 10:18

Post by bar »

Lavr wrote:А ещё я хочу, чтобы по щелчку мыши все "1" заменились на "█", а "0" - на "__"

И я сразу бы увидел что то типа: _█___███_█_█__██_ во всей таблице...

Excel мне в этом не поможет, а визуально глянуть - для дела очень полезно!
Это делается элементарно.
1. Нажимаем кнопку record macro, меняем фон какой-нибудь ячейки на, допустим, синий. Останавливаем запись макро.
2. Нажимаем кнопку record macro, меняем фон какой-нибудь ячейки на, допустим, красный. Останавливаем запись макро.
3. Имеем два примера кода, которые меняют цвет фона. Глядя в эти примеры пишем макрос, который перебирает все ячейки таблички и меняет в них цвет фона на синий или красный в зависимости от значения ячейки.
4. Кидаем на лист кнопку и вешаем на неё вызов макроса.

UPD. что-то мне смутно вспоминается про какое-то "условное форматирование". Вероятно можно обойтись даже без кнопок: чтобы цвет фона менялся бы сразу после завершения ввода нового значения.
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

А на JS не проще будет такое накодить и повесить где-нить у нас на недопц? ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net