Вверх ↑
Этот топик читают: Гость
Ответов: 196
Рейтинг: 0
#1: 2021-06-07 23:53:54 ЛС | профиль | цитата
Может странный вопрос. Но вдруг есть решение. Хочу упросить схему. Есть три текстовых поля(это могут быть и ячейки памяти), и есть кнопка(или событие) сс помощью которой можно очистить эти поля. В моей схеме [spoiler=Код]
Add(MainForm,2953706,21,105)
{
Height=168
}
Add(Edit,819451,539,56)
{
Width=384
Align=2
Text="Окно"
}
Add(Edit,918884,539,112)
{
Top=20
Width=384
Align=2
Text="Дверь"
}
Add(Button,5360813,217,112)
{
Top=109
Width=384
Align=4
link(onClick,1946605:doEvent1,[])
}
Add(Hub,1946605,259,112)
{
OutCount=3
link(onEvent1,10109647:doWork,[])
link(onEvent2,2806379:doWork,[(283,125)(283,132)])
link(onEvent3,16075389:doWork,[(283,132)(283,146)])
}
Add(LineBreakEx,10109647,294,112)
{
Caption="1"
}
Add(LineBreakEx,2806379,294,126)
{
Caption="2"
}
Add(LineBreakEx,16075389,294,140)
{
Caption="3"
}
Add(LineBreakEx,9045226,434,112)
{
Caption="1"
Type=1
link(OnEvent,819451:doText,[(502,118)(502,62)])
}
Add(LineBreakEx,12968818,434,126)
{
Caption="2"
Type=1
link(OnEvent,918884:doText,[(502,132)(502,118)])
}
Add(LineBreakEx,13758475,434,140)
{
Caption="3"
Type=1
link(OnEvent,6861929:doWork1,[(502,146)(502,174)])
}
Add(ChildPanel,6861929,539,168)
{
}
BEGIN_SDK
Add(EditMulti,14385867,21,21)
{
WorkCount=1
link(doWork1,9151973:doText,[(115,27)(115,62)])
}
Add(Panel,6230879,35,105)
{
Top=40
Width=337
Height=28
Align=2
}
Add(Edit,9151973,161,56)
{
Left=2
Top=2
Width=333
Align=2
Text="Шкаф"
}
END_SDK


[/spoiler] Это выглядит не совсем компактно. а если нужно освободить 20 полей?(Например сделать какой-то релод программы и освободить все поля. так сказать подготовить ее к новым данным)
то нужно будет нагородить 20 элементов "Разрыва линии" ? Может быть есть более эффективный и экономичный вариант ?
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 191
Рейтинг: 12
#2: 2021-06-08 09:09:42 ЛС | профиль | цитата
Присоединяюсь к вопросу.
карма: 3

0
Ответов: 1988
Рейтинг: 633
#3: 2021-06-08 10:58:22 ЛС | профиль | цитата
Как вариант: Изминение свойст интерфейса

Редактировалось 1 раз(а), последний 2021-06-08 10:59:01
карма: 9

0
Ответов: 8695
Рейтинг: 806
#4: 2021-06-08 17:06:06 ЛС | профиль | цитата
egorhay, fox-video, Какие же вы лодыри, линки аккуратно протянутые нисколькр не затрудняют чтение схемы м не требуют никаких кодов и ухищрений
20 Edit


Add(MainForm,2953706,49,105)
{
link(onCreate,6240108:doFor,[])
}
Add(ChildPanelEx,15878414,252,119)
{
Mode=1
}
BEGIN_SDK
Add(EditMultiEx,10470748,21,21)
{
WorkCount=#5:##add|8:##select|6:doText|
VarCount=#4:Text|
Point(##add)
Point(##select)
link(doText,14434954:doText2,[])
link(Text,14434954:Text,[(27,89)(160,89)])
}
Add(Panel,6149084,70,49)
{
Left=50
Top=50
Width=50
Height=20
Layout="parent.MyEdit"
}
Add(Edit,14434954,154,28)
{
Align=5
}
END_SDK
Add(For,6240108,105,119)
{
End=19
link(onEvent,15878414:##add,[])
link(onStop,8859194:doResize,[])
}
Add(GridLayout,8859194,147,126)
{
Name="MyEdit"
Space=1
Padding=50
Rows=4
Cols=5
}
Add(Button,15068466,49,196)
{
Left=5
Top=10
Caption="Clear"
link(onClick,1984941:doEvent1,[])
}
Add(Button,8394958,49,161)
{
Left=75
Top=10
Caption="Text"
link(onClick,2129973:doEvent1,[])
}
Add(Edit,9057968,203,147)
{
Left=145
Top=10
Text="123456"
}
Add(For,8023868,126,224)
{
End=19
link(onEvent,6624093:doEvent1,[])
}
Add(Hub,1984941,91,196)
{
link(onEvent1,4592294:doClear,[])
link(onEvent2,11253358:doWork2,[])
}
Add(DoData,8920169,203,231)
{
link(onEventData,15878414:doText,[(242,237)(242,139)])
link(Data,4592294:Value,[])
}
Add(Memory,4592294,203,189)
{
Default=String()
Point(Data)
link(Data,9057968:Text,[])
}
Add(Hub,6624093,168,224)
{
link(onEvent1,15878414:##select,[(193,230)(193,132)])
link(onEvent2,8920169:doData,[])
}
Add(Hub,2129973,91,161)
{
link(onEvent1,4592294:doValue,[(186,167)(186,195)])
link(onEvent2,11253358:doWork1,[(116,174)])
}
Add(HubEx,11253358,112,203)
{
Angle=1
link(onEvent,8023868:doFor,[(116,230)])
}

карма: 19

0
Ответов: 191
Рейтинг: 12
#5: 2021-06-08 17:49:06 ЛС | профиль | цитата
Леонид писал(а):
Какие же вы лодыри

Ну почему же лодыри? В схемах имеют место быть множество полей ввода, вовсе не трудно организовать их очистку, но читабельность схемы "падает", а динамические панели не всегда (скорее редко) подходят. Если бы было бы решение по очистке форм и компонентов типа Memory одним простым действием было бы круто, а так живем с тем что имеем. В целом, все устраивает и так.
карма: 3

0
Ответов: 194
Рейтинг: 27
#6: 2021-06-08 20:14:49 ЛС | профиль | цитата
А если так?

Add(MainForm,5777707,378,245)
{
Height=168
link(onCreate,860105:doEvent2,[(431,265)(431,202)])
}
Add(Button,5360813,329,189)
{
Top=109
Width=384
Align=4
link(onClick,8143440:doData,[])
}
Add(ChildPanelEx,6931413,476,189)
{
Mode=2
link(onChange,4707972:doWork2,[])
link(onChange1,10435732:doWork2,[])
link(onEvent1,10435732:doWork3,[(536,209)])
}
BEGIN_SDK
Add(EditMultiEx,13014959,21,21)
{
WorkCount=#8:##delete|5:##add|
EventCount=#8:onChange|9:onChange1|8:onEvent1|
VarCount=#5:Value|
Height=312
Point(##delete)
Point(##add)
link(Value,1859616:Value,[(34,201)(195,201)])
}
Add(Panel,14947415,273,287)
{
Left=10
Top=20
Align=5
WinStyle=1
}
Add(Edit,819451,49,49)
{
Width=384
Align=2
Text=""
link(onChange,13014959:onChange,[(88,55)(88,27)])
}
Add(Edit,918884,49,105)
{
Top=20
Width=384
Align=2
Text=""
link(onChange,13014959:onChange1,[(95,111)(95,34)])
}
Add(ChildPanel,6861929,49,161)
{
link(onEvent1,1859616:doValue,[])
}
BEGIN_SDK
Add(EditMulti,14385867,21,21)
{
EventCount=1
WorkCount=1
link(doWork1,9151973:doText,[(115,27)(115,62)])
}
Add(Panel,6230879,35,105)
{
Top=40
Width=337
Height=28
Align=2
}
Add(Edit,9151973,161,56)
{
Left=2
Top=2
Width=333
Align=2
Text=""
link(onChange,14385867:onEvent1,[(200,62)(200,27)])
}
END_SDK
Add(Memory,1859616,189,161)
{
link(onData,13014959:onEvent1,[(228,167)(228,41)])
}
END_SDK
Add(DoData,8143440,378,189)
{
Data=Integer(0)
link(onEventData,860105:doEvent1,[])
}
Add(Hub,860105,441,189)
{
InCount=2
link(onEvent1,6931413:##delete,[])
link(onEvent2,6931413:##add,[])
}
Add(HubEx,4707972,532,189)
{
link(onEvent,5777707:doCaption,[(550,195)(550,296)(368,296)(368,251)])
}
Add(HubEx,10435732,532,196)
{
Angle=3
link(onEvent,4707972:doWork3,[])
}

карма: 5

0
Ответов: 8695
Рейтинг: 806
#7: 2021-06-08 22:35:52 ЛС | профиль | цитата
Gunta,
карма: 19

0
Ответов: 1988
Рейтинг: 633
#8: 2021-06-08 23:13:34 ЛС | профиль | цитата
fox-video писал(а):
Если бы было бы решение по очистке форм и компонентов типа Memory одним простым действием было бы круто, а так живем с тем что имеем.

Так есть такой компонент и уже давно. И делает все из перечисленного и еще много чего.
Картинки для понимания возможностей компонента.
Имея вот такую простенькую схему:

Нажимаем кнопку "Шаблон" и в поля вставляются нужные значения, выделяется нужный чекбокс и нужная строка в выпадающем списке. Кнопка "Очистить" удалит все значения.

Так же можно полностью перевести весь интерфейс на английски одним нажатием на кнопку "Eng" или обратно на русский кнопкой "Рус".

А с учетом того что компонент получает все данные списком, то хранить несколько языков для интерфейса не составляет большого труда.
Имея такой список с одним языком:

Не составит большого труда перевести и на другие.

Логика элемента очень проста.
1. Назначаем элементу свойство Name (желательно уникальное к примеру Label_Name).
2. В компоненте можно изменить все свойства интерфейсного элемента.
К примеру строка Edit_Name=Text=Иванов изменит текст элемента ну нужный, а Edit_Name=Text= (без значения) удалит текст.

egorhay писал(а):
Это выглядит не совсем компактно

Вот так будет выглядеть ваша схема:

А вот данные в элементе:


Свойства которые может изменять компонент:


Редактировалось 4 раз(а), последний 2021-06-08 23:36:34
карма: 9

0
Ответов: 191
Рейтинг: 12
#9: 2021-06-09 05:42:01 ЛС | профиль | цитата
sla8a, выглядит просто отлично! Однако после установки компонента, согласно инструкции, перестали компилироваться проекты.

HiAsm 186 рабочая копия 2317 Win10 x64. На обоих компиляторах такое.

--- Добавлено в 2021-06-09 06:00:57

Откатил Win.pas теперь работает.

--- Добавлено в 2021-06-09 06:11:24

egorhay, рекомендую присмотреться к компоненту AdjustControls. Твоя схема станет такой

Add(MainForm,4897455,119,63)
{
Height=151
}
Add(Edit,819451,406,140)
{
Width=384
Align=2
Name="okno"
Text="Окно"
}
Add(Edit,918884,406,196)
{
Top=20
Width=384
Align=2
Name="dver"
Text="Дверь"
}
Add(Button,5360813,119,140)
{
Left=5
Top=79
Width=54
Caption="Clear"
link(onClick,16624947:doWork1,[])
}
Add(ChildPanel,6861929,406,252)
{
}
BEGIN_SDK
Add(EditMulti,14385867,21,21)
{
WorkCount=1
link(doWork1,9151973:doText,[(115,27)(115,62)])
}
Add(Panel,6230879,35,105)
{
Top=40
Width=337
Height=28
Align=2
}
Add(Edit,9151973,161,56)
{
Left=2
Top=2
Width=333
Align=2
Name="shkaf"
Text="Шкаф"
}
END_SDK
Add(Button,7691199,119,175)
{
Left=65
Top=80
Caption="Default"
link(onClick,16624947:doWork2,[(167,181)(167,153)])
}
Add(AdjustControls,1891344,280,140)
{
link(Parameters,15644363:Var,[(286,126)(273,126)(273,184)(244,184)])
}
Add(StrList,13215217,238,84)
{
Strings=#10:okno=Text=|10:dver=Text=|11:shkaf=Text=|
}
Add(StrList,15782353,245,84)
{
Strings=#14:okno=Text=Окно|15:dver=Text=Дверь|15:shkaf=Text=Шкаф|
}
Add(ChanelToIndex,16624947,182,140)
{
link(onIndex,15644363:doIndex,[])
}
Add(GetIndexData,15644363,238,140)
{
link(onIndex,1891344:doSet,[])
link(Data1,13215217:Text,[])
link(Data2,15782353:Text,[])
}


Редактировалось 2 раз(а), последний 2021-06-09 06:11:24
карма: 3

0
Ответов: 4743
Рейтинг: 529
#10: 2021-06-09 18:20:56 ЛС | профиль | цитата
изрядно простая задача, решаемая через IC

Add(MainForm,778971,70,70)
{
Left=20
Top=105
Width=334
Height=284
}
Add(Button,10268552,126,70)
{
Left=25
Top=215
link(onClick,2190672:doWork1,[])
}
Add(ChildPanel,2190672,189,70)
{
}
BEGIN_SDK
Add(EditMulti,2969430,21,21)
{
WorkCount=1
Width=405
link(doWork1,3035930:doClearEdit,[(73,27)(73,160)])
}
Add(Panel,943418,126,105)
{
Left=25
Top=15
Width=274
Height=153
Point(PHandle)
}
Add(Edit,7627047,189,49)
{
Left=15
Top=50
Width=125
}
Add(Edit,3964155,245,49)
{
Left=15
Top=20
Width=125
link(onChange,4940770:doValue,[])
}
Add(Debug,165634,392,49)
{
}
Add(Edit,12659440,189,105)
{
Left=15
Top=110
Width=125
}
Add(Edit,11639062,245,105)
{
Left=15
Top=80
Width=125
}
Add(InlineCode,3035930,126,154)
{
WorkPoints=#11:doClearEdit|
DataPoints=#57:PHandle=Указатель на контейнер где нужно очистить Edit(ы)|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Windows,Messages,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: PHandle: THI_Event;|53: procedure doClearEdit(var dt: TData; idx: word);|0:|5: end;|0:|14:implementation|0:|34:procedure THiAsmClass.doClearEdit;|33:var count,i: integer;P: PControl;|5:begin|48: count := ReadControl(PHandle,'').ChildCount-1;|24: for i := 0 to count do|7: begin|45: P := ReadControl(PHandle,'').Children[i];|41: if P.SubClassName = 'obj_EDIT' then |65: //P^.Text := ''; // тоже работает, но API надёжней от креша|45: SendMessage(P.Handle, WM_SETTEXT, 0,0);|6: end;|4:end;|0:|4:end.|
link(PHandle,943418:PHandle,[])
}
Add(GlobalVar,4940770,315,49)
{
Name="test"
link(onValue,165634:doEvent,[])
}
Add(Memo,15134234,126,42)
{
Left=160
Top=20
Width=95
Height=110
Strings=#4:Тест|
}
END_SDK

карма: 6
1
Голосовали:3042
Ответов: 191
Рейтинг: 12
#11: 2021-06-09 18:29:13 ЛС | профиль | цитата
andrestudio, интересное решение. Если поля ввода размещены на основной форме как быть?
карма: 3

0
Ответов: 4743
Рейтинг: 529
#12: 2021-06-09 18:33:00 ЛС | профиль | цитата
PHandle для формы никто не забирал, а форма как известно тоже контейнер. Так что для каждого контейнера свой IC. Корректируйте контейнеры рационально и вот вам и решение.
карма: 6
0
Ответов: 191
Рейтинг: 12
#13: 2021-06-09 18:37:43 ЛС | профиль | цитата
Да работает, спасибо!

Редактировалось 1 раз(а), последний 2021-06-09 18:40:10
карма: 3

0
Ответов: 1988
Рейтинг: 633
#14: 2021-06-09 21:35:35 ЛС | профиль | цитата
fox-video писал(а):
перестали компилироваться проекты.

Файлы обновлены, архив перезалит: Изминение свойст интерфейса

Редактировалось 1 раз(а), последний 2021-06-09 21:35:50
карма: 9

0
Ответов: 191
Рейтинг: 12
#15: 2021-06-10 06:15:30 ЛС | профиль | цитата
Произвёл чистую установку HiAsm_4.05b186_AltBuild_v2050.28-11-15.01, обновил до последний версии, установил компонент из обновлённого архива. Опять не работает



На работе еще попробую поставить.
карма: 3

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