Вверх ↑
Этот топик читают: Гость
Ответов: 2236
Рейтинг: 676
#1: 2013-11-26 23:17:17 ЛС | профиль | цитата
Компонент AdjustControls: Настройки интерфейса.
В основном автор nesco ,а также большой вклад внес andrestudio за что им большое спасибо!

Предназначен для изменения и получения свойств интерфейсных элементов.
Возможности компонента
1. Изменения позиции и габаритов: Отступ слева и справа, ширина и высота.
2. Выравнивание элементов.
3. Цвет элементов.
4. Шрифт элементов.
5. Доступность и видимость элементов.
6. Очистка элемента (удаление текста, строк и т.п.)
7. Установка фокуса на элемент.
8. Перенос элемента на задний или передний план.
9. Перерисовка элемента.
10. Текст в элементах: Заголовок в формах, текст в текстовом поле, строки в списке строк.
11. Установка и снятие значения у Checkboxи RadioButton.
12. Установка вкладок в элемент TabControl.
13. Установка цветов в элемент ColorBox.
14. Установка даты в элемент DDatePicker.
15. Установка колонок и строк в таблицы StringTable StringTableMTMTStrTbl
16. Установка текста и строк в ComboBox.
Для каких целей может понадобиться:

-Одной кнопкой можно очистить или выставить по умолчанию несколько интерфейсных компонентов.
-Можно хранить в файлах языковые значения для интерфейса и с помощью AdjustControls менять язык интерфейсных компонентов.
-Изменять внешний вид программы под разные задачи: изменения шрифта, скрытие или блокировка сразу несколько компонентов и т.п.

Скачать последнюю версию элемента 3.66 (обновление 14.11.2023)

(работает под всеми компиляторами)
Распаковать архив, установить элемент (перетащить файл AdjustControl.ini на рабочее поле Hiasm), скопировать файлы (формата pas) в папку с HiAsm Elementsdelphicode, перезапустить HiAsm.


Для удобства редактирования свойств элемента рекомендую воспользоваться редакторами:
Подробно о редакторах

По умолчанию у AdjustControls стандартные редакторы свойств (редактор строк). Все приходиться вписывать в ручную, а значит, не исключены опечатки и как следствие не правильная работа элемента. Да и запомнить правильное написание свойств интерфейсных элементов начинающему не так просто. При использовании усовершенствованных редакторов, добавление нужных имен или свойств сводиться к обычному выбору курсором нужного. Конечно значения придется вписывать вручную, но опечатка в данном случае не так критична.

Для установки редакторов можно воспользоваться схемой InstallRedactors (см. ниже) или проделать следующие:
1. Скопировать в папку с установленным HiAsm в Intedit файлы редакторов (ParametersList.sha, NameList.sha, PropList.sha).
2. Вставить на поле HiAsm элемент AdjustControls Настройки интерфейса, выделить его и нажать Ctrl+G. В открывшемся редакторе файла AdjustControls.ini добавить перед строкой [Property] строки:
#ini
[Handlers]
ParametersList=Parameters
NameList=IncludeNameList,ExcludeNameList
PropList=IncludePropList,ExcludePropList
Нажать иконку сохранить или клавиши Ctrl+S.Перезапустить HiAsm.

InstallRedactors.sha: файл для установки файлов редакторов в HiAsm. Достаточно открыть файл в HiAsm, запустить (кнопкой F9) и в запущенной программе выбрать нужные параметры установки редакторов. Так же при помощи InstallRedactors можно удалить ранее установленные редакторы.

На данный момент есть недостатки, а именно:
1. Редакторы ParametersList и NameList для получения имен интерфейсных элементов вынуждены выделять все элементы на поле HiAsm и копировать. В результате после закрытия редактора свойств остается выделенными все элементы на поле HiAsm, а не один элемент AdjustControls. (После выхода из редактора достаточно кликнуть мышью на пустое поле HiAsm и снова выбрать элемент).
2. Из за копирования элементов на поле в редакторы попадают элементы только из текущей и дочерних контейнеров (если таковые имеются в схеме), а элементы из родительского(-их) контейнеров не попадают в редактор. (Как вариант, переносить элемент для редактирования в корневой контейнер. После редактирования возвращать на место.)
Вид редактора свойства Parameters
Вид редактора свойств IncludeNameList и ExcludeNameList
Вид редактора свойств IncludePropList и ExcludePropList
Скачать архив с файлами редакторов: adjustcontrolsredactors.zip



Изначальный текст поста (устаревшая информация)

В этой теме предлагаю обсудить возможность создания элемента для группового изменения свойств интерфейсных компонентов. Так же с помощью такого элемента возможно сохранение свойств интерфейсных компонентов в файл.
Для чего вообще такой элемент?
Бывает что нужно изменить свойства нескольких интерфейсных элементов. К примеру в зависимости от выбора пункта в списке строк, выставить предустановки: установить флажки, заблокировать переключатели, ввести шаблон в редактор текста и т.п. Конечно можно заморочить и все сделать по "старинке" проведя нужные связи (doCheck, doVisible, doText). Или заполнить список в элементе и одним doSet внести нужные изменения.
Для чего получать свойства элементов?
Как правило для сохранения в файл, для последующей загрузки и установки предыдущих состояний.
Как работает элемент?
1. Задается свойство Name интерфейсным элементам, которым планируется изменять свойства.
2. В списке SetValue (тестового элемента) задаются свойства элемента и их значения.
В формате: Имя=свойства=значение Так же доступно общее имя "all".
3. При вызове doSet происходит перебор всех интерфейсных элементов на форме и если у него заданно имя и в списке есть для его имени свойства со значениями, происходит их изменение.
Доступные свойства
left,top,width,height: позиция элемента
align: выравнивание элемента, возможные значения как 0,1,2,3,4,5 так и "none", "left","top","ritht","bottom","client".
color: цвет элемента, возможные значения: пока только цифровое значение (0 -черный, 255-красный и т.д.)
text,caption: текст в элементе (они полностью взаимозаменяемые).
visible,enabled: видимость и доступность элемента, значения 1 или 0.
checked,selected: выбор элемента, значения 1 или 0. (в флажках и переключателях)
select: выбор пункта в элементе. (в списке строк, выпадающем списке и т.п.)
fontname,fontcolor,fontsize,fontstyle : свойства шрифта в элементе, значения: цвет цифровое значение (см. свойство Color), fontstyle символы "b","i","u","s" (к примеру выделенный курсив fontstyle=bi)
cursor: пока не реализовано.
Получение свойств элемента (doGet) не до конца реализовано (выдается позиция), планируется указание нужных свойств.
ВАЖНО:для тестирования элемента необходимо изменить файл Win.pas. В архиве находиться файл с внесенными изменениями, измененные строки в конце помечены "//test".
Для тех кто хочет внести изменения в файл Win.pas самостоятельно.

Необходимо вставить только три строки (помечены "//test")
#pasWin.pas

public
fname:string; //test
...
property Name:string read fname; //test

procedure THIWin.Init;
begin
...

THIWin(Control).fName := _prop_Name;//test
end;

На данный момент элемент в стадии разработки (код "сырой").
[color=green
Хочу попробовать элемент! Меньше букв![/color]]
1. Скачать архив, ссылка внизу поста.
2. Распаковать.
3. Скопировать в другую папку файл Win.pas. из HiasmElementsdelphicodeWin.pas
4. Вместо него скопировать из распакованного архива Win.pas.
5. Установить элемент: перетащить на рабочее поле файл adjustment.ini, в появившемся окне нажать ОК.
6. Закрыть, открыть Hiasm.
7. Открыть пример из архива Adjustment_test_01.sha.
8. Для тестирования использовать компилятор FPC.

После тестирования скопируйте свой Win.pas обратно!

andrestudio, спасибо за помощь.

Высказывайтесь.
Скачать архив с элементом и примером: ссылка на архив

Редактировалось 6 раз(а), последний 2023-11-14 18:50:40
карма: 11

5
файлы: 4adjustcontrolsredactors.zip [134.5KB] [815], imagenames.jpg [29KB] [3656], imageprops.jpg [30.5KB] [3734], imageparameters.jpg [41.6KB] [3661]
Голосовали:Konst, ser_davkin, andrestudio, fox-video, FMKstudio
Разработчик
Ответов: 26113
Рейтинг: 2126
#2: 2013-11-26 23:44:49 ЛС | профиль | цитата
В FPC работает, в Delphi не хочет.

bug_adjust_001.png
карма: 22

0
файлы: 1bug_adjust_001.png [52.1KB] [3899]
Ответов: 2236
Рейтинг: 676
#3: 2013-11-26 23:57:25 ЛС | профиль | цитата
sla8a писал(а):
8. Для тестирования использовать компилятор FPC.
Да и в схеме выделены элементы которые выдают ошибку при компиляции не FPC.
nesco, на данном этапе хотелось бы рассмотреть нужность (востребованность) такого элемента. То что выложено сейчас, это набросок.
карма: 11

0
Ответов: 16884
Рейтинг: 1239
#4: 2013-11-26 23:58:53 ЛС | профиль | цитата
sla8a писал(а):
8. Для тестирования использовать компилятор FPC.
sla8a, опередил.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#5: 2013-11-27 00:00:56 ЛС | профиль | цитата
sla8a писал(а):
Да и в схеме выделены элементы которые выдают ошибку при компиляции не FPC.

Вопрос -- и нафиг мне компонент, который работает только под FPC Задумка интересная, но реализация крайне сырая.
карма: 22

0
Ответов: 2236
Рейтинг: 676
#6: 2013-11-27 00:11:46 ЛС | профиль | цитата
nesco писал(а):
Задумка интересная
А по поводу изменения в win.pas что скажите? Ради такого элемента (законченного и протестированного) имеет смысл вносить такую правку?
nesco писал(а):
реализация крайне сырая.
И не скрываю этого, написал что набросок, и в теме "делаем компоненты".
Tad, вы что скажете?
карма: 11

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#7: 2013-11-27 00:26:24 ЛС | профиль | цитата
sla8a писал(а):
А по поводу изменения в win.pas что скажите?

Ее еще и упростить можно. Выкини вообще свойство Namе и обращайся напрямую к переменной fname, нафига нужны эти движняки с перекопированием
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#8: 2013-11-27 10:27:25 ЛС | профиль | цитата
sla8a писал(а):
Tad, вы что скажете?

1. Любая идея имеет право на жизнь.
2. Полная потеря визуальности.
3. К сожалению, пока плюсов не вижу.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#9: 2013-11-27 10:44:07 ЛС | профиль | цитата
Tad писал(а):
Полная потеря визуальности

На менеджерах тоже визуальность, можно сказать, никакая
карма: 22

0
Ответов: 9906
Рейтинг: 351
#10: 2013-11-27 14:28:49 ЛС | профиль | цитата
Де-Жа-Вю.........
карма: 9

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#11: 2013-11-27 16:37:15 ЛС | профиль | цитата
Galkov писал(а):
Де-Жа-Вю.........

Угу.
------------ Дoбавленo в 16.37:
Че-то мне такие телодвижения не очень понравились, и я попытался замутить немного свое, но опираясь на идею sla8a. Основной упор я сделал не на получении имени контрола и привязке элемента к родителю через его хэндл, а на построение списка всех контролов приложения. Можете посмотреть идею в аттаче, элемент я немного переименовал, и он работает под обоими компиляторами. Пока это рабочий прототип
карма: 22

1
файлы: 1project_adjustcontrols_001.zip [9.8KB] [686]
Голосовали:sla8a
Ответов: 2236
Рейтинг: 676
#12: 2013-11-27 20:51:10 ЛС | профиль | цитата
nesco, у меня нет такого опыта как у вас. В моем варианте мне так и не удалось устранить ошибку. Но от хендла родителя избавился, переделал по подобию MinMaxSize и DropFile. Вообще странная ошибка, вроде как у некоторые контролы "смещаются", первый раз выдаются нормально.
А что в начальном варианте вас не устроило (кроме ошибки)?
По поводу вашего варианта возникли вопросы:
1. Может не стоит добавлять в ListOfControls безымянных?
2. Не понял как в вашем варианте игнорируются MainForm-ы, да и почему. В своем варианте родителя тоже пустил в оборот. Как вариант для замены цвета как родителю, так и его контролам (all=color=green).
Tad писал(а):
К сожалению, пока плюсов не вижу.
Тогда подождите конечного результата, может ваше мнение поменяется.
карма: 11

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#13: 2013-11-27 22:27:52 ЛС | профиль | цитата
sla8a писал(а):
А что в начальном варианте вас не устроило (кроме ошибки)?

Да все нормально, кроме метода получения имени и обращения к родителю.
sla8a писал(а):
Может не стоит добавлять в ListOfControls безымянных?

Да можно в принципе и убрать.
sla8a писал(а):
Не понял как в вашем варианте игнорируются MainForm-ы

Да никак. Mainform -- тоже элемент и тоже создается при помощи Init, а ссылку на родителей я не использую, тк заполняю список.

Меня волнует больше вопрос с курсором. Я че-то пока не нашел, как обратно получить индекс ресурса, который туда подставляется. Может на него вообще забить, не так часто он и меняется
карма: 22

0
Ответов: 2236
Рейтинг: 676
#14: 2013-11-27 23:41:40 ЛС | профиль | цитата
nesco писал(а):
Может на него вообще забить, не так часто он и меняется
Пришел к тому же выводу. Мне лично не приходилось менять курсор сразу нескольким интерфейсам, обычно у одного. Пробовал все свойства, вот он и попал в тестовый вариант.
nesco писал(а):
а ссылку на родителей я не использую
А если понадобиться поменять одному окну с его контролами цвет? Как быть с окном?
карма: 11

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#15: 2013-11-28 00:22:42 ЛС | профиль | цитата
sla8a писал(а):
А если понадобиться поменять одному окну с его контролами цвет? Как быть с окном?

Пока не знаю, проще управлять списками конкретных контролов. Задачи какие-то ты ставишь малореальные, я не говорю, что их не может быть вообще, но вероятность возникновения их, КМК, крайне мала, к тому же, есть обходные пути.
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)