nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 10:04



Reply to topic  [ 67 posts ]  Go to page 1, 2, 3, 4, 5  Next
Win32 вопросы 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Зафиксировать размеры List View control

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

Image

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

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

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

Image

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

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

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

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

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



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

Image
Скачать

Окончательно собирал под Вендой 7, которая неслабо проклевала мне мозг...
Но все опции вроде работают правильно, а окончательно все глюки выяснятся
при эксплуатации.

_________________
iLavr


Last edited by Lavr on 14 Feb 2014 10:04, edited 1 time in total.



03 Sep 2012 21:05
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
В крайнем случае, всегда есть один радикальный метод: перехват windowproc. После создания listview можно найти в нём окно заголовка (оно там единственное), и подставить свою процедуру, которая будет обрабатывать только WM_NCHITTEST (возвращая HTNOWHERE), а остальные события переадресовывать старой windowproc.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


03 Sep 2012 23:14
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Ну временно я сделал вот что - в конце процедуры обработки сообщений
от List View control я поставил восстановление размеров.

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

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

Есть же у обычного окна возможность - не изменять размер...

_________________
iLavr


03 Sep 2012 23:33
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Можно лочить constaints. Или нет?


04 Sep 2012 00:56
Profile
God
User avatar

Joined: 13 Nov 2010 04:06
Posts: 1345
Reply with quote
Post 
Lavr wrote:
List View control

Сменить инструмент не предлагать?


04 Sep 2012 02:38
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
VituZz wrote:
Lavr wrote:
List View control

Сменить инструмент не предлагать?

Выслушаю любые советы... я как-то не рассчитывал завязнуть на
написании bin-редактора...


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



HardWareMan wrote:
Можно лочить constaints. Или нет?

Скажи - что конкретно... так абстрактно я тебя не понял.

_________________
iLavr


04 Sep 2012 04:49
Profile
God
User avatar

Joined: 13 Nov 2010 04:06
Posts: 1345
Reply with quote
Post 
Lavr wrote:
VituZz wrote:
Lavr wrote:
List View control

Сменить инструмент не предлагать?

Выслушаю любые советы...

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


04 Sep 2012 07:03
Profile
Senior
User avatar

Joined: 07 Aug 2012 11:11
Posts: 123
Location: Севастополь
Reply with quote
Post 
В свойствах Columns для каждой колонки выставить MaxWidth=30, MinWidth=30 и Width=30 (ну или любое другое значение).


04 Sep 2012 08:11
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
VituZz wrote:
Мне кажется, твою задачу можно довольно просто решить при помощи Tcl/Tk.
В Tk есть компонент entry, возможно, это то, что тебе нужно.
Tcl/Tk работает под Windows, Linux, Mac (как бы намёк :).

Так-тиклем я, к сожалению, не владею в такой степени, чтобы быстро написать приложение. :(
И инструментов у меня сейчас под него практически никаких нет.

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

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

Да, впрочем, эту разовую поделку можно и под ДОС-ом написать. Я уже прикидывать
начал.

_________________
iLavr


04 Sep 2012 08:18
Profile
Senior

Joined: 07 Aug 2006 10:18
Posts: 185
Reply with quote
Post 
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, которые будут автоматизировать процесс внесения изменений.


04 Sep 2012 09:07
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
bar wrote:
Может я не совсем понимаю задачу, но я бы, пожалуй, в такой ситуации вообще не трогал бы программирование UI. Взял бы Excel и загнал бы табличку в него. Редактируя в нём не bin-форматы, а просто табличку из единичек и нуликов.

До сих пор я это делал с помощью Ворда, калькулятора и WinHex-a...
Но т.к. я устал это делать в Ворде - я хочу, ткнув мышью в "0" превращать
его в "1" (и наоборот), и сразу на выходе получать bin-файл прошивки ПЗУ.

_________________
iLavr


04 Sep 2012 09:14
Profile
Senior

Joined: 07 Aug 2006 10:18
Posts: 185
Reply with quote
Post 
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 открыть файл и как писать в файл бинарные значения -- это слишком много времени потраченного на кодинг.


04 Sep 2012 09:26
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
А ещё я хочу, чтобы по щелчку мыши все "1" заменились на "█", а "0" - на "__"

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

Excel мне в этом не поможет, а визуально глянуть - для дела очень полезно!

_________________
iLavr


04 Sep 2012 09:50
Profile
Senior

Joined: 07 Aug 2006 10:18
Posts: 185
Reply with quote
Post 
Lavr wrote:
А ещё я хочу, чтобы по щелчку мыши все "1" заменились на "█", а "0" - на "__"

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

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

UPD. что-то мне смутно вспоминается про какое-то "условное форматирование". Вероятно можно обойтись даже без кнопок: чтобы цвет фона менялся бы сразу после завершения ввода нового значения.


04 Sep 2012 09:56
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
Post 
А на JS не проще будет такое накодить и повесить где-нить у нас на недопц? ;)

_________________
:dj: https://mastodon.social/@Shaos


04 Sep 2012 09:59
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 67 posts ]  Go to page 1, 2, 3, 4, 5  Next

Who is online

Users browsing this forum: Shaos and 18 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.