Вверх ↑
Этот топик читают: Гость
Ответов: 53
Рейтинг: 1
#1: 2013-06-10 23:14:54 ЛС | профиль | цитата
Всем добрый вечер!

Вот, столкнулся с проблемой.
Суть. Нужно динамически создавать childpanelex и в ней выводить текст при помощи label (можно и не лабел, но чтобы небыло рамок - голый текст). Текст заранее не задан - все время разный. Так вот, как сделать так чтобы, во-первых, label не обрезал текст и небыло лишних полей и, во-вторых, чтобы чайлдпанель была размером под текст?

Вот пример с проблемой

Add(MainForm,2953706,147,147)
{
Height=253
Point(onResize)
}
Add(ChildPanelEx,3753469,343,147)
{
Mode=1
}
BEGIN_SDK
Add(EditMultiEx,478117,21,21)
{
WorkCount=#5:##add|
Point(##add)
link(##add,6802933:doText,[(87,27)(87,111)])
}
Add(Panel,7905297,35,105)
{
Left=10
Top=20
Width=365
Height=67
Layout="parent.123"
}
Add(Label,6802933,154,105)
{
Left=2
Top=2
Width=361
Height=32
Align=2
Color=-16777215
Caption=""
AutoSize=1
}
END_SDK
Add(Button,3658433,203,147)
{
Left=15
Top=185
Width=210
Height=25
Caption="Создать поле"
link(onClick,4697669:doData,[])
}
Add(DoData,4697669,252,147)
{
Data=String(EEPROM. 0 SRAM. Размерность действий 8 бит. Аргументы (распределение EEPROM): 1 Точка доступа А 2 Точка доступа (или константа) В 3 Точка доступа С (результат) 4 Селектор константы + тип операции Возможные операции над точками: Сложение А + B ' C Вычитание А - B ' C Сложение без переполнения А + B ' [C] Вычитание без переполнения А - B ' [C] Прямая запись значения B ' C)
link(onEventData,2690762:doEvent1,[])
}
Add(VBoxLayout,7379026,343,196)
{
Name="123"
}
Add(Hub,2690762,301,147)
{
link(onEvent1,3753469:##add,[])
link(onEvent2,7379026:doResize,[(322,160)(322,202)])
}


карма: 0

0
файлы: 1code_31220.txt [1.5KB] [148]
Гость
Ответов: 17029
Рейтинг: 0
#2: 2013-06-10 23:18:31 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2017-06-15 02:41:35
карма: 0

0
Ответов: 53
Рейтинг: 1
#3: 2013-06-10 23:34:26 ЛС | профиль | цитата
Немного не то. У меня текст без переносов и Label его разбивает на строки сам, в зависимости от ширина панели.
Вот как узнать высоту этих разбитых строк?
карма: 0

0
Ответов: 196
Рейтинг: 43
#4: 2013-06-10 23:41:02 ЛС | профиль | цитата
Вместо Label использовать например Memo. У него можно узнать число строк.
карма: 2

0
Гость
Ответов: 17029
Рейтинг: 0
#5: 2013-06-10 23:42:21 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2017-06-15 02:41:36
карма: 0

0
Ответов: 53
Рейтинг: 1
#6: 2013-06-10 23:54:01 ЛС | профиль | цитата
halt писал(а):
Вместо Label использовать например Memo. У него можно узнать число строк.

Строка передается панели всего одна (при выводе в Label она разбивается на строки по ширине поля вывода), соответственно Memo тут не поможет. (или Мемо бьет строки сам?)

37.45.99.240 писал(а):
Нестандартными компонентами не брезгуете? Тестировать будете?

Ох не хотелось бы. Потом людям схему даешь и долго объясняешь как подключать компоненты...
карма: 0

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#7: 2013-06-11 00:01:44 ЛС | профиль | цитата
GetChiper писал(а):
или Мемо бьет строки сам?

Бьет, если установить ScrollBars=Vertical
карма: 22

0
Ответов: 196
Рейтинг: 43
#8: 2013-06-11 00:06:00 ЛС | профиль | цитата
Ну вот твой пример с Memo, снизу Edit с числом строк.
code_31221.txt
карма: 2

0
файлы: 1code_31221.txt [1.6KB] [171]
Ответов: 53
Рейтинг: 1
#9: 2013-06-11 00:43:03 ЛС | профиль | цитата
Вот - это уже похоже на то, что нужно!

Вот как должна выглядеть прорисовка по задумке.

Add(MainForm,2557405,133,238)
{
Height=461
Point(onResize)
link(onResize,14532773:doEvent2,[])
}
Add(ChildPanelEx,3753469,301,189)
{
Mode=1
}
BEGIN_SDK
Add(EditMultiEx,478117,21,21)
{
WorkCount=#5:##add|15:doEvent2=Размер|
Width=370
Height=270
Point(##add)
link(##add,2108271:doAdd,[(91,27)(91,62)])
link(doEvent2,12129769:doEvent2,[(77,34)(77,167)])
}
Add(Panel,7905297,322,154)
{
Left=10
Top=20
Width=392
Height=105
Color=-16777192
Ctl3D=0
WinStyle=1
Layout="parent.123"
BorderWidth=0
Point(doHeight)
}
Add(Memo,2108271,161,56)
{
Left=2
Top=2
Width=388
Color=-16777192
WinStyle=1
Layout="1"
Point(onResize)
Point(doHeight)
link(onChange,12129769:doEvent1,[(205,62)(205,125)(119,125)(119,160)])
}
Add(VBoxLayout,6656753,266,217)
{
Name="1"
Space=5
Padding=5
}
Add(Math,9225284,168,154)
{
OpType=2
Op2=14
ResultType=0
link(onResult,11818471:doEvent1,[])
link(Op1,2108271:Count,[])
}
Add(Hub,11818471,217,154)
{
OutCount=3
link(onEvent1,2108271:doHeight,[(243,160)(243,132)(149,132)(149,104)])
link(onEvent2,286048:doOperation,[])
link(onEvent3,6656753:doResize,[(249,174)(249,223)])
}
Add(Math,286048,266,161)
{
Op2=10
ResultType=0
link(onResult,7905297:doHeight,[])
}
Add(Hub,12129769,133,154)
{
InCount=2
OutCount=1
link(onEvent1,9225284:doOperation,[])
}
END_SDK
Add(Button,3658433,133,189)
{
Left=5
Top=395
Width=130
Height=25
Caption="Создать поле"
link(onClick,4697669:doData,[])
}
Add(DoData,4697669,182,189)
{
link(onEventData,2690762:doEvent1,[])
link(Data,5308717:Text,[])
}
Add(VBoxLayout,7379026,301,259)
{
Name="123"
}
Add(Hub,2690762,231,189)
{
link(onEvent1,3753469:##add,[])
link(onEvent2,14532773:doEvent1,[(252,202)(252,258)])
}
Add(Memo,5308717,182,112)
{
Left=10
Top=335
Width=355
Height=50
ScrollBars=3
}
Add(Hub,14532773,259,252)
{
InCount=2
link(onEvent1,3753469:doEvent2,[(287,258)(287,202)])
link(onEvent2,7379026:doResize,[])
}


Если добавить несколько форм с разным размером текста и менять размер главной формы - поля динамически меняют размер.
Правде непойму откуда глюк - к тестовым полям бывают добавляются пустые строчки . Что не так?
И еще печалька - нет в мемо выравнивания текста (по левому краю, правому и центру, как у Лабела). Или есть?
карма: 0

0
файлы: 1code_31222.txt [2.1KB] [141]
Разработчик
Ответов: 26163
Рейтинг: 2127
#10: 2013-06-11 01:26:08 ЛС | профиль | цитата
GetChiper писал(а):
Или есть?

Не предусмотрено, но выкрутиться можно

Add(MainForm,2557405,231,161)
{
Height=253
Point(onResize)
}
Add(ChildPanelEx,3753469,427,161)
{
Mode=1
}
BEGIN_SDK
Add(EditMultiEx,478117,21,21)
{
WorkCount=#5:##add|
Point(##add)
link(##add,4817472:doEvent1,[(57,27)(57,62)])
}
Add(Panel,7905297,42,84)
{
Left=10
Top=20
Width=365
Height=105
Layout="parent.123"
}
Add(Memo,2108271,161,56)
{
Left=200
Top=95
Align=2
Point(onResize)
Point(PHandle)
link(onResize,12068746:doText,[(207,69)(207,209)(158,209)(158,174)])
}
Add(Edit,12068746,168,168)
{
Left=2
Top=83
Width=361
Align=4
link(Str,2108271:Count,[])
}
Add(InlineCode,13682586,126,126)
{
WorkPoints=#13:taLeftJustify|14:taRightJustify|15:taCenterJustify|
DataPoints=#7:PHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: PHandle: THI_Event;|58: procedure taLeftJustify(var _Data:TData; Index:word);|59: procedure taRightJustify(var _Data:TData; Index:word);|65: procedure taCenterJustify(var _Data:TData; Index:word); |5: end;|0:|14:implementation|0:|36:procedure THiAsmClass.taLeftJustify;|3:var|21: sControl: PControl;|5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|38: if not Assigned(sControl) then exit;|32: sControl.TextAlign := taLeft; |4:end;|0:|37:procedure THiAsmClass.taRightJustify;|3:var|21: sControl: PControl;|5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|38: if not Assigned(sControl) then exit;|33: sControl.TextAlign := taRight; |4:end;|0:|39:procedure THiAsmClass.taCenterJustify; |3:var|21: sControl: PControl;|5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|38: if not Assigned(sControl) then exit;|34: sControl.TextAlign := taCenter; |4:end;|0:|4:end.|
link(PHandle,2108271:PHandle,[(132,117)(188,117)])
}
Add(Hub,4817472,77,56)
{
link(onEvent1,2108271:doAdd,[])
link(onEvent2,13682586:taRightJustify,[(116,69)(116,139)])
}
END_SDK
Add(Button,3658433,287,161)
{
Left=15
Top=185
Width=210
Height=25
Caption="Создать поле"
link(onClick,4697669:doData,[])
}
Add(DoData,4697669,336,161)
{
Data=String(EEPROM. 0 SRAM. Размерность действий 8 бит. Аргументы (распределение EEPROM): 1 Точка доступа А 2 Точка доступа (или константа) В 3 Точка доступа С (результат) 4 Селектор константы + тип операции Возможные операции над точками: Сложение А + B ' C Вычитание А - B ' C Сложение без переполнения А + B ' [C] Вычитание без переполнения А - B ' [C] Прямая запись значения B ' C)
link(onEventData,2690762:doEvent1,[])
}
Add(VBoxLayout,7379026,427,210)
{
Name="123"
}
Add(Hub,2690762,385,161)
{
link(onEvent1,3753469:##add,[])
link(onEvent2,7379026:doResize,[(406,174)(406,216)])
}

карма: 22

0
Ответов: 9906
Рейтинг: 351
#11: 2013-06-11 02:56:32 ЛС | профиль | цитата
Чего-то не вижу выкручивания....

getchiper_00.png
------------ Дoбавленo в 02.56:
GetChiper писал(а):
нет в мемо выравнивания текста (по левому краю, правому и центру, как у Лабела)

Не огорчайтесь, у "многострочного Лабела" - тоже нету
карма: 9

0
файлы: 1getchiper_00.png [9.1KB] [473]
Разработчик
Ответов: 26163
Рейтинг: 2127
#12: 2013-06-11 03:13:09 ЛС | профиль | цитата
Galkov писал(а):
Чего-то не вижу выкручивания....

Да ладно. А у меня тогда почему есть

textalign_011.png

Он должен быть, в KOL это предусмотрено

    property TextAlign: TTextAlign read GetTextAlign write SetTextAlign;
{* |<#label>
|<#panel>
|<#button>
|<#bitbtn>
|<#edit>
|<#memo>
Text horizontal alignment. Applicable to labels, buttons,
multi-line edit boxes, panels. }
карма: 22

0
файлы: 1textalign_011.png [20.2KB] [404]
Ответов: 9906
Рейтинг: 351
#13: 2013-06-11 03:27:41 ЛС | профиль | цитата
вот я и спрашиваю, почему у тебя есть

Может ось
У меня семерки под боком чего то и нету...
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#14: 2013-06-11 03:50:22 ЛС | профиль | цитата
Galkov писал(а):
Может ось

Странно вообще-то. Это же управление стилем окна, неужели этот стиль не везде поддерживается в XP
------------ Дoбавленo в 03.50:
Мне что-то подсказывает, что по-этому от этих свойств в некоторых контролах и отказались, что они не работали в прошлых ОС
карма: 22

0
Ответов: 9906
Рейтинг: 351
#15: 2013-06-11 10:29:08 ЛС | профиль | цитата
С работы пишу
У меня XP - нет RightJustify
У Макса - семерка, запускаю свой exe-шник через сеть, и все тип-топ. Как у тебя картинка.

В общем - собаки
карма: 9

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