UserControl и макросы

Место, где разработчики плагинов могут поделиться своим опытом.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

UserControl и макросы

Post by Max Rusov »

Во многих плагинах используется элемент диалога типа UserControl, который представляет собой суть список или таблицу разной степени навороченности. Делается это, отчасти, по причине бедности возможностей стандартного LISTBOX, но сейчас - не о том. Такой элемент, внешне выглядя как обычный список, никак не поддается автоматизации с помощью макросов, потому что в нем не работают макрофункции ItemCount/CurPos. Предлагаю устранить этот недостаток. Для этого можно добавить коды нотификации, например DN_GETITEMCOUNT/DN_GETCURPOS, которые будут посылаться UserControl'у при вызове соответствующих макрофункций. Если контрол их не обрабатывает, то функции вернут 0, если разработчик позаботился об их обработке, то контрол будет работать как полноценный ListBox.
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Re: UserControl и макросы

Post by zg »

ну список или таблица, это узко :)
а вообще, я когда-то предлагал валентину добавить в макроязык функцию, которая посылала бы строку и если в диалоге есть обработчик, он мог вернуть строку. но как-то не прижилось.
User avatar
DrKnS
Posts: 6121
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 433 times

Re: UserControl и макросы

Post by DrKnS »

А давайте лучше листбокс допилим, чем вот такие костыли?
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: UserControl и макросы

Post by Max Rusov »

DrKnS wrote:А давайте лучше листбокс допилим, чем вот такие костыли?
Листбокс, конечно, можно улучшать, но это не отменяет UserControl. Мы никогда не предусмотрим в ListBox всех возможностей, которые могут понадобиться в тех или иных случаях. И я, например, по любому не стану переводить все свои плагины на ListBox, даже улучшенный, потому что это очень большой труд, а UserControl меня на 99% удовлетворяет - вот за исключением несовместимости с макросами.

Согласен, что Список/Таблица это частные случаи, но они покрывают довольно большое количество ситуаций, возникающих в макросах, например:

http://forum.farmanager.com/viewtopic.p ... 396#p84396
http://forum.farmanager.com/viewtopic.p ... 041#p85041

И да, желательно чтобы еще поддерживалось dlg.getvalue
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: UserControl и макросы

Post by Skirda »

zg wrote:а вообще, я когда-то предлагал валентину добавить в макроязык функцию, которая посылала бы строку и если в диалоге есть обработчик, он мог вернуть строку. но как-то не прижилось.
видимо потерялось.
напомни
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: UserControl и макросы

Post by Skirda »

Max Rusov wrote:И да, желательно чтобы еще поддерживалось dlg.getvalue
и че юзерконтрол будет тебе возвращать в dlg.getvalue ?
We are the Borg. You will be assimilated.
So Say We All!
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: UserControl и макросы

Post by Max Rusov »

Skirda wrote:и че юзерконтрол будет тебе возвращать в dlg.getvalue ?
Например: плагин нолучает нотификацию DN_GETVALUE и значение Type в Param2. При:
Type = 0 - плагин должен вернуть указатель на строку, которая обычно интерпретируется как "Значение текущего элемента списка", но для разных usercontrol интерпретация может меняться.
Type = 7 - плагин должен вернуть число, которая обычно интерпретируется как "Текущая позиция в списке", но... см 1.
ну и все остальные значения Type ( >= 10) можно отдать на усмотрения разработчику, чтобы вытащить в макрос любые другие внутренние состояния контрола, например - текущую колонку в гриде.

Возможо, правильнее Param2 использовать как указатель на структуру, типа:


Кстати не нашел - а макрос как то может узнать количество элементов в списке, если список не текущий элемент?...

Вероятно, предлагаемые в первом посте DN_GETITEMCOUNT/DN_GETCURPOS можно свести к одному DN_GETVALUE, если потребовать, что при таком-то Type нужно возвращать число, интерпретируемое, как количество элементов списка
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: UserControl и макросы

Post by Skirda »

Max Rusov wrote:Type = 7 - плагин должен вернуть число, которая обычно интерпретируется как "Текущая позиция в списке", но... см 1.
ну и все остальные значения Type ( >= 10) можно отдать на усмотрения разработчику, чтобы вытащить в макрос любые другие внутренние состояния контрола, например - текущую колонку в гриде.
Бред. У одного плагина это будет "какого цвета итем", у друго тоже значение "колонка в гриде"... - "как будем делиться?"
Max Rusov wrote:Кстати не нашел - а макрос как то может узнать количество элементов в списке, если список не текущий элемент?...
Добавить для Dlg.GetValue тип 11?
We are the Borg. You will be assimilated.
So Say We All!
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: UserControl и макросы

Post by Max Rusov »

Skirda wrote:Бред. У одного плагина это будет "какого цвета итем", у друго тоже значение "колонка в гриде"... - "как будем делиться?"
Никак, а зачем? Макросы работают с конкретным контролом, они будут знать какой код что обозначает (из документации). В том что в разных контролах одинаковые коды возвратят разные по смыслу данные - нет никакой проблемы. Аналог: WM_USER+N. Когда ты используешь пользовательское сообщение в Windows тебя же не заботит что другой программист в своих окнах этот же код поиспользовал в других целях - они просто не пересекаются...
Kildor
Posts: 1515
Joined: Wed 16 Mar, 2005 06:26
Location: Новосибирск
Been thanked: 1 time
Contact:

Re: UserControl и макросы

Post by Kildor »

Поддерживаю идею Макса.

Универсальных макросов не существует всё-равно, каждый макрос идёт для конкретного диалога/меню/сущности. И если я буду знать, что сущность выдаёт, то я подстрою свой макрос.

Макрос запрашивает какой-то dlg.getValue, фар обращается к плагину, и передаёт сообщение. Плагин выдаёт нужное значение. Фар передаёт значение в макрос, все рады и щастливы.
Ты мне не выкай!
«ФарФорум не для пользователей!»
Upd:
P.S. Я просто поддерживаю беседу.» © Народ.

xmpp:kildor@jabber.ru
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: UserControl и макросы

Post by Alexey Samlyukov »

Max Rusov wrote: по причине бедности возможностей стандартного LISTBOX
вставлю своих 5 коп., я использую стандартные листбоксы, возможностей хватает... кроме одной... пользовательской раскраски элементов списка, этого да, оччень нехватает.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: UserControl и макросы

Post by Max Rusov »

Ну мне лично необходимы минимум 2 вещи:
1. Owner Draw
2. Virtual data - чтобы не запихивать данные в ListBox, а он сам их у меня запрашивал, через Callback.
Но, повторюсь, всего не предусмотришь - так что развитие ListBox и данный топик - не связанные темы.
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: UserControl и макросы

Post by Skirda »

Так кто мешает продумать протоколы (и грамотно описать ТЗ на Землю) на раскраску, овнердрав и чего-то там?
We are the Borg. You will be assimilated.
So Say We All!
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: UserControl и макросы

Post by Max Rusov »

Вердикт? Намантис или нунах?
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: UserControl и макросы

Post by Skirda »

На мантис, но с нормальным описанием. (ну или с патчем, если есть :-))
We are the Borg. You will be assimilated.
So Say We All!
Post Reply

Return to “Разработка плагинов”