|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Зафиксировать размеры List View control
Я тут, работая над 4bit CPU, при каждом изменении схемы вынужден вручную
редактировать вот такую таблицу:
А потом я её превращаю в *.bin-прошивку двух ПЗУ микрокоманд посредством
WinHex-a.
Но поскольку сейчас изменения пошли чаще, я решил, что подготовку прошивки
надо бы автоматизировать, и с этой целью надумал написать визуальный
bin-редактор, где щёлкая мышью по полю единиц и ноликов можно было бы
оперативно прошивку поменять...
Я решил сделать рабочее поле редактора на основе List View control-а с сеткой:
Я с ним работал и он весьма удобный...
Но выяснилась очень неприятная вещь - я не знаю, как зафиксировать
размеры столбцов этой таблицы.
Это порой очень удобно, что ширину столбцов можно оперативно менять мышью...
Но не в этом же случае!
Я погуглил - в интернете вопрос " как зафиксировать размеры List View control" -
весьма популярен... Но ответа нигде нет...
Может кто из наших гуру посоветует решение?
PS. Ну вот эта мысль наконец-то реализовалась...
Скачать
Окончательно собирал под Вендой 7, которая неслабо проклевала мне мозг...
Но все опции вроде работают правильно, а окончательно все глюки выяснятся
при эксплуатации.
_________________ iLavr
Last edited by Lavr on 14 Feb 2014 10:04, edited 1 time in total.
|
03 Sep 2012 21:05 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 864
|
В крайнем случае, всегда есть один радикальный метод: перехват windowproc. После создания listview можно найти в нём окно заголовка (оно там единственное), и подставить свою процедуру, которая будет обрабатывать только WM_NCHITTEST (возвращая HTNOWHERE), а остальные события переадресовывать старой windowproc.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
03 Sep 2012 23:14 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну временно я сделал вот что - в конце процедуры обработки сообщений
от List View control я поставил восстановление размеров.
Но получилось несколько смешно: "дрыгающаяся таблица"...
Но я имел ввиду вот что - нет ли у List View control такого свойства - не изменять
размер?
Или может ему можно такой сендмессэдж послать?
Есть же у обычного окна возможность - не изменять размер...
_________________ iLavr
|
03 Sep 2012 23:33 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Можно лочить constaints. Или нет?
|
04 Sep 2012 00:56 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
Сменить инструмент не предлагать?
|
04 Sep 2012 02:38 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Выслушаю любые советы... я как-то не рассчитывал завязнуть на написании bin-редактора... PS. Если ты мне хочешь сказать - плюнь на контрол и напиши в ДОС - я уже тоже к этой мысли склоняюсь... Но если ты имеешь в виду - написать на "Специалисте" - это уж слишком...
Скажи - что конкретно... так абстрактно я тебя не понял.
_________________ iLavr
|
04 Sep 2012 04:49 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
Мне кажется, твою задачу можно довольно просто решить при помощи Tcl/Tk. В Tk есть компонент entry, возможно, это то, что тебе нужно.
Tcl/Tk работает под Windows, Linux, Mac (как бы намёк .
|
04 Sep 2012 07:03 |
|
|
ALS
Senior
Joined: 07 Aug 2012 11:11 Posts: 123 Location: Севастополь
|
В свойствах Columns для каждой колонки выставить MaxWidth=30, MinWidth=30 и Width=30 (ну или любое другое значение).
|
04 Sep 2012 08:11 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Так-тиклем я, к сожалению, не владею в такой степени, чтобы быстро написать приложение.
И инструментов у меня сейчас под него практически никаких нет.
Да, я потратил достаточно много времени однажды, чтобы выяснить, как реализованы
некоторые, интересующие меня фичи в программе на Tcl/Tk ( DeckIT), но не более того.
И я бы не хотел юзать чужой компонент - если погуглить, под Венду тоже много "сеток"
(grid) кто предлагает, но я как-то не люблю черных ящиков.
Да, впрочем, эту разовую поделку можно и под ДОС-ом написать. Я уже прикидывать
начал.
_________________ iLavr
|
04 Sep 2012 08:18 |
|
|
bar
Senior
Joined: 07 Aug 2006 10:18 Posts: 185
|
Может я не совсем понимаю задачу, но я бы, пожалуй, в такой ситуации вообще не трогал бы программирование UI. Взял бы Excel и загнал бы табличку в него. Редактируя в нём не bin-форматы, а просто табличку из единичек и нуликов. Вопросы импорта/экспорта можно решить csv форматом. CSV полный единичек и ноликов перегнать в bin формат можно пользуясь любым языком программирования по вкусу. Обратное преобразование из bin в csv не сложнее.
Правда при таком подходе после цикла экспорт-импорт, будет пропадать форматирование ячеек. Но если это важно, то можно пользуясь функцией record macro записать последовательность действий для форматирования (табличка ведь константного размера? значит даже не придётся править результат record macro, сворачивая макрос в цикл и обучая его выяснять необходимое количество итераций) и потом импортируя данные в Excel из csv накладывать сверху форматирование, вызывая записанный макрос.
В OpenOffice, насколько я помню, для импорта/экспорта в текстовый формат есть куча опций, то есть можно заменить запятую на какой-нибудь другой разделитель полей, скажем на пробел или табуляцию. Но, по-моему, скриптинг в OpenOffice требует большего терпения, поскольку там документация не дотягивает до MSOffice. Да и record macro более урезанный, по сравнению с MSOffice. По-крайней мере так было, несколько лет тому назад, когда я писал злые скрипты для OpenOffice, для работы со школьным расписанием в виде таблички.
И если все эти проблемы решить так или иначе, то дальше можно писать макросы на VBA, которые будут автоматизировать процесс внесения изменений.
|
04 Sep 2012 09:07 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
До сих пор я это делал с помощью Ворда, калькулятора и WinHex-a...
Но т.к. я устал это делать в Ворде - я хочу, ткнув мышью в "0" превращать
его в "1" (и наоборот), и сразу на выходе получать bin-файл прошивки ПЗУ.
_________________ iLavr
|
04 Sep 2012 09:14 |
|
|
bar
Senior
Joined: 07 Aug 2006 10:18 Posts: 185
|
Как я понимаю, при том подходе который ты эксплуатировал до сих пор, тебя утомляло именно общение с GUI: в ворде внести изменения, затем экспортировать из ворда в файл, затем импортировать в WinHex, и опять же экспортировать.
Но ворд -- это не excel. В excel'е можно, по-крайней мере, обойтись без калькулятора, чтобы те hex'ы в хвостах строк высчитывались бы автоматически. WinHex'а тоже можно избежать самописным конвертером из csv в bin. И тогда экспорт будет сводится к выбору пункта export в менюшке excel и дабл-клику по .bat файлу, который сделает bin из csv. Оно конечно нельзя назвать "сразу на выходе", но тут ведь нужно не тотальное решение проблемы, а компромиссное. Это оптимизационная задача: надо минимизировать суммарное время потраченное на кодинг и на работу с результатом кодинга. И именно поэтому я не предлагаю писать на VBA экспорт из excel'я непосредственно в bin файл. Мне кажется, что перерывать документацию выясняя как из VBA открыть файл и как писать в файл бинарные значения -- это слишком много времени потраченного на кодинг.
|
04 Sep 2012 09:26 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А ещё я хочу, чтобы по щелчку мыши все "1" заменились на "█", а "0" - на "__"
И я сразу бы увидел что то типа: _█___███_█_█__██_ во всей таблице...
Excel мне в этом не поможет, а визуально глянуть - для дела очень полезно!
_________________ iLavr
|
04 Sep 2012 09:50 |
|
|
bar
Senior
Joined: 07 Aug 2006 10:18 Posts: 185
|
Это делается элементарно.
1. Нажимаем кнопку record macro, меняем фон какой-нибудь ячейки на, допустим, синий. Останавливаем запись макро.
2. Нажимаем кнопку record macro, меняем фон какой-нибудь ячейки на, допустим, красный. Останавливаем запись макро.
3. Имеем два примера кода, которые меняют цвет фона. Глядя в эти примеры пишем макрос, который перебирает все ячейки таблички и меняет в них цвет фона на синий или красный в зависимости от значения ячейки.
4. Кидаем на лист кнопку и вешаем на неё вызов макроса.
UPD. что-то мне смутно вспоминается про какое-то "условное форматирование". Вероятно можно обойтись даже без кнопок: чтобы цвет фона менялся бы сразу после завершения ввода нового значения.
|
04 Sep 2012 09:56 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22616 Location: Silicon Valley
|
А на JS не проще будет такое накодить и повесить где-нить у нас на недопц?
|
04 Sep 2012 09:59 |
|
|
Who is online |
Users browsing this forum: No registered users and 72 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|