Вверх ↑
Этот топик читают: Гость
Ответов: 245
Рейтинг: 15
#286: 2022-07-21 10:21:20 ЛС | профиль | цитата
Все вроде бы ни чего, но эта перерисовка таблицы порядком поднадоела При динамическом изменении размера, таблица по прежнему мигает как ёлка новогодняя, даже с небольшим количеством строк.
Видео
Схема

Add(MainForm,502712,126,98)
{
Width=683
Height=350
Caption="С патчем"
}
Add(ChildPanel,12487867,189,98)
{
link(onEvent1,16013350:doWork1,[])
link(onEvent2,16013350:doWork2,[])
}
BEGIN_SDK
Add(EditMulti,16445913,21,21)
{
EventCount=2
Width=146
Height=228
}
Add(Panel,8092939,35,28)
{
Width=121
Height=311
Align=1
ModeSp=3
}
Add(Button,11035052,35,63)
{
Left=20
Top=10
Width=80
Caption="30 строк"
link(onClick,16445913:onEvent1,[(117,69)(117,27)])
}
Add(Button,12204792,35,98)
{
Left=20
Top=40
Width=80
Caption="Очистить"
link(onClick,16445913:onEvent2,[(117,104)(117,34)])
}
END_SDK
Add(StyleXP,5612224,63,98)
{
}
Add(ChildPanel,16013350,252,98)
{
}
BEGIN_SDK
Add(EditMulti,5153088,21,21)
{
WorkCount=2
Width=615
Height=347
link(doWork1,13517961:doFor,[(45,27)(45,223)])
link(doWork2,16680851:doEvent1,[(45,34)(45,97)])
}
Add(Panel,4232779,154,35)
{
Left=35
Top=105
Align=5
}
Add(MTStrTbl,8318156,98,35)
{
Left=121
Width=546
Height=311
Align=5
Name="Tabl"
Columns=#5:№ п\п|1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|
}
Add(For,13517961,77,217)
{
End=30
link(onEvent,13760527:doString,[])
link(onStop,9888664:doEvent2,[(130,230)(130,293)])
}
Add(MST_RowAction,14020333,581,280)
{
MSTControl="Tabl"
}
Add(MST_Clear,4406358,147,91)
{
MSTControl="Tabl"
}
Add(MT_String,860943,532,280)
{
link(onResult,14020333:doRowAction,[])
}
Add(FormatStr,13760527,140,217)
{
DataCount=9
Mask="%1;%2;%3;%4;%5;%6;%7;%8;%9"
link(onFString,6117003:doAdd,[])
link(Str1,12514779:Var1,[(146,201)])
link(Str2,12514779:Var2,[])
link(Str3,6727075:Var2,[])
link(Str4,8770803:Var2,[])
link(Str5,3231000:Var2,[])
link(Str6,7385015:Var2,[])
link(Str7,6643269:Var2,[])
link(Str8,2317901:Var2,[])
link(Str9,13198027:Var2,[])
}
Add(EventFromData,11037860,203,154)
{
link(onEvent,4000312:doRandom,[])
}
Add(Random,4000312,259,154)
{
Min=1000
Max=10000
link(onRandom,11037860:doData,[(303,160)(303,148)(191,148)(191,160)])
}
Add(GetDataEx,6727075,154,196)
{
Angle=1
link(Data,8770803:Var1,[])
}
Add(GetDataEx,8770803,161,196)
{
Angle=1
link(Data,3231000:Var1,[])
}
Add(GetDataEx,3231000,168,196)
{
Angle=1
link(Data,7385015:Var1,[])
}
Add(GetDataEx,7385015,175,196)
{
Angle=1
link(Data,6643269:Var1,[])
}
Add(GetDataEx,6643269,182,196)
{
Angle=1
link(Data,2317901:Var1,[])
}
Add(GetDataEx,2317901,189,196)
{
Angle=1
link(Data,13198027:Var1,[])
}
Add(GetDataEx,13198027,196,196)
{
Angle=1
link(Data,11037860:GetData,[(209,201)])
}
Add(GetDataEx,12514779,147,196)
{
Angle=1
link(Data,6727075:Var1,[])
}
Add(StrList,6117003,357,217)
{
}
Add(Hub,16680851,77,91)
{
link(onEvent1,4406358:doClear,[])
link(onEvent2,6117003:doClear,[(330,104)(330,230)])
}
Add(ChildPanel,7038444,140,280)
{
link(onEvent1,9888664:doEvent1,[])
}
BEGIN_SDK
Add(EditMulti,7557279,21,21)
{
EventCount=1
VarCount=1
link(Var1,1332068:Text,[(27,151)(216,151)])
}
Add(Panel,10940747,56,49)
{
Left=35
Top=105
Width=606
Height=28
Align=2
BevelInner=0
}
Add(Edit,1332068,210,49)
{
Left=20
Top=5
Width=85
Text=""
link(onChange,7557279:onEvent1,[(282,55)(282,27)])
}
Add(Button,14780004,147,49)
{
Left=110
Top=6
Caption="сброс"
link(onClick,1332068:doText,[])
}
END_SDK
Add(Hub,9888664,189,280)
{
InCount=2
OutCount=3
link(onEvent1,13982878:doClear,[])
link(onEvent2,13503697:doString,[])
link(onEvent3,15305743:doEnum,[])
}
Add(MST_Clear,13982878,217,280)
{
MSTControl="Tabl"
}
Add(FormatStr,13503697,287,287)
{
DataCount=1
Mask="*%1*"
link(onFString,14773555:doMask,[])
link(Str1,7038444:Var1,[(293,272)(261,272)(261,324)(146,324)])
}
Add(StrMask,14773555,434,280)
{
Point(doMask)
link(onTrue,6563615:doString,[])
}
Add(ArrayEnum,15305743,371,294)
{
link(onItem,14773555:doCompare,[(419,300)(419,286)])
link(Array,6117003:Array,[])
}
Add(FormatStr,6563615,483,287)
{
Mask="%1;%2"
link(onFString,860943:doMT,[])
link(Str1,14020333:Count,[(489,265)(621,265)(621,324)(587,324)])
}
END_SDK

Еще вопрос. Сглаживание шрифтов можно отключить, или сделать отключаемым? Мелкие шрифты со сглаживанием не очень выглядят.
Верхний без сглаживания, нижний со сглаживанием

Редактировалось 2 раз(а), последний 2022-07-21 10:25:04
карма: 3

0
Разработчик
Ответов: 26048
Рейтинг: 2110
#287: 2022-07-21 11:06:17 ЛС | профиль | цитата
fox-video писал(а):
При динамическом изменении размера, таблица по прежнему мигает как ёлка новогодняя, даже с небольшим количеством строк.

Да, я это знаю. Сделано это для того, чтобы при использовании Anchors и динамическом изменении размера элементы на экране более или менее перерисовывались нормально (когда их много), а не рывками.
fox-video писал(а):
Мелкие шрифты со сглаживанием не очень выглядят.

Что-то не сильно заметил, но сделать можно.

--- Добавлено в 2022-07-21 11:19:29

P.S. Если сильно бесит мерцание, то его можно отключить, заменив в модуле Win.pas следующий код на приведенный ниже (видимо придется отключить перерисовку в дальнейшем):

procedure THIWin._onResize;
var
i: integer;
begin
inherited;
// Control.Invalidate;
// for i := 0 to Control.ChildCount - 1 do
// Control.Children[i].Invalidate;
Sendmessage(Control.Handle, US_RESIZE, 0, 0);
end;

Редактировалось 4 раз(а), последний 2022-07-21 11:20:46
карма: 22

0
Ответов: 245
Рейтинг: 15
#288: 2022-07-21 11:59:52 ЛС | профиль | цитата
nesco писал(а):
Сделано это для того, чтобы при использовании Anchors и динамическом изменении размера элементы на экране более или менее перерисовывались нормально (когда их много), а не рывками.

Ну что же, придется применять двойную буферизацию.

--- Добавлено в 2022-07-21 12:12:17

nesco писал(а):
Если сильно бесит мерцание, то его можно отключить, заменив в модуле Win.pas следующий код

Так еще хуже. Мерцание толком не пропало, но появилась не дорисовка части строк при увеличении размера таблицы.

Редактировалось 1 раз(а), последний 2022-07-21 12:12:17
карма: 3

0
Разработчик
Ответов: 26048
Рейтинг: 2110
#289: 2022-07-21 13:41:13 ЛС | профиль | цитата
fox-video писал(а):
Так еще хуже

Странно как-то, но в оригинальном Win это кода же нет. Я проверял, у меня нет никакого мерцания при изменении размера.
карма: 22

0
Ответов: 245
Рейтинг: 15
#290: 2022-07-21 14:06:58 ЛС | профиль | цитата
nesco писал(а):
у меня нет никакого мерцания при изменении размера

Я проверяю на разных компьютерах\ноутбуках, поведение везде одинаковое.

nesco, хоть Вы и не любите старый добрый StringTableMT, я сравнил его поведение с MTStrTbl
Видео
MTStrTbl мерцает сильней без исправления кода, а с исправлением - также как и StringTableMT + глючит отрисовка строк при увеличении размера.
Схема


Add(MainForm,16094119,105,182)
{
Width=695
Height=350
Caption="С патчем c исправлением кода"
link(onCreate,7418820:doResize,[])
}
Add(ChildPanel,12487867,182,182)
{
link(onEvent1,7418820:doEvent1,[])
link(onEvent2,7418820:doEvent11,[])
}
BEGIN_SDK
Add(EditMulti,16445913,21,21)
{
EventCount=2
Width=146
Height=228
}
Add(Panel,8092939,35,28)
{
Width=121
Height=311
Align=1
ModeSp=3
}
Add(Button,11035052,35,63)
{
Left=20
Top=10
Width=80
Caption="30 строк"
link(onClick,16445913:onEvent1,[(117,69)(117,27)])
}
Add(Button,12204792,35,98)
{
Left=20
Top=40
Width=80
Caption="Очистить"
link(onClick,16445913:onEvent2,[(117,104)(117,34)])
}
END_SDK
Add(StyleXP,5612224,56,182)
{
}
Add(ChildPanelEx,7418820,231,182)
{
}
BEGIN_SDK
Add(EditMultiEx,12121787,21,21)
{
WorkCount=#8:doEvent1|9:doEvent11|8:doResize|
link(doEvent1,13775491:doEvent1,[(35,27)(35,55)])
link(doEvent11,15661481:doEvent1,[(35,34)(35,104)])
link(doResize,15014532:doResize,[(59,41)(59,153)])
}
Add(Panel,6139585,161,98)
{
Left=121
Width=558
Height=311
Align=5
}
Add(ChildPanel,16013350,98,49)
{
}
BEGIN_SDK
Add(EditMulti,5153088,21,21)
{
WorkCount=2
Width=615
Height=347
link(doWork1,13517961:doFor,[(45,27)(45,223)])
link(doWork2,16680851:doEvent1,[(45,34)(45,97)])
}
Add(Panel,4232779,154,35)
{
Left=121
Width=280
Height=310
Layout="parent.01"
WidthScale=50
}
Add(MTStrTbl,8318156,98,35)
{
Left=2
Top=30
Width=276
Height=278
Align=5
Name="Tabl1"
Columns=#5:№ п\п|1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|
}
Add(For,13517961,77,217)
{
End=30
link(onEvent,13760527:doString,[])
link(onStop,9888664:doEvent2,[(130,230)(130,293)])
}
Add(MST_RowAction,14020333,581,280)
{
MSTControl="Tabl1"
}
Add(MST_Clear,4406358,147,91)
{
MSTControl="Tabl1"
}
Add(MT_String,860943,532,280)
{
link(onResult,14020333:doRowAction,[])
}
Add(FormatStr,13760527,140,217)
{
DataCount=9
Mask="%1;%2;%3;%4;%5;%6;%7;%8;%9"
link(onFString,6117003:doAdd,[])
link(Str1,12514779:Var1,[(146,201)])
link(Str2,12514779:Var2,[])
link(Str3,6727075:Var2,[])
link(Str4,8770803:Var2,[])
link(Str5,3231000:Var2,[])
link(Str6,7385015:Var2,[])
link(Str7,6643269:Var2,[])
link(Str8,2317901:Var2,[])
link(Str9,13198027:Var2,[])
}
Add(EventFromData,11037860,203,154)
{
link(onEvent,4000312:doRandom,[])
}
Add(Random,4000312,259,154)
{
Min=1000
Max=10000
link(onRandom,11037860:doData,[(303,160)(303,148)(191,148)(191,160)])
}
Add(GetDataEx,6727075,154,196)
{
Angle=1
link(Data,8770803:Var1,[])
}
Add(GetDataEx,8770803,161,196)
{
Angle=1
link(Data,3231000:Var1,[])
}
Add(GetDataEx,3231000,168,196)
{
Angle=1
link(Data,7385015:Var1,[])
}
Add(GetDataEx,7385015,175,196)
{
Angle=1
link(Data,6643269:Var1,[])
}
Add(GetDataEx,6643269,182,196)
{
Angle=1
link(Data,2317901:Var1,[])
}
Add(GetDataEx,2317901,189,196)
{
Angle=1
link(Data,13198027:Var1,[])
}
Add(GetDataEx,13198027,196,196)
{
Angle=1
link(Data,11037860:GetData,[(209,201)])
}
Add(GetDataEx,12514779,147,196)
{
Angle=1
link(Data,6727075:Var1,[])
}
Add(StrList,6117003,357,217)
{
}
Add(Hub,16680851,77,91)
{
link(onEvent1,4406358:doClear,[])
link(onEvent2,6117003:doClear,[(330,104)(330,230)])
}
Add(ChildPanel,7038444,140,280)
{
link(onEvent1,9888664:doEvent1,[])
}
BEGIN_SDK
Add(EditMulti,7557279,21,21)
{
EventCount=1
VarCount=1
link(Var1,1332068:Text,[(27,151)(216,151)])
}
Add(Panel,10940747,56,49)
{
Left=2
Top=2
Width=276
Height=28
Align=2
BevelInner=0
}
Add(Edit,1332068,210,49)
{
Left=20
Top=5
Width=85
Text=""
link(onChange,7557279:onEvent1,[(282,55)(282,27)])
}
Add(Button,14780004,147,49)
{
Left=110
Top=6
Caption="сброс"
link(onClick,1332068:doText,[])
}
Add(Label,14227177,56,91)
{
Left=175
Top=10
Caption="MTStrTbl"
}
END_SDK
Add(Hub,9888664,189,280)
{
InCount=2
OutCount=3
link(onEvent1,13982878:doClear,[])
link(onEvent2,13503697:doString,[])
link(onEvent3,15305743:doEnum,[])
}
Add(MST_Clear,13982878,217,280)
{
MSTControl="Tabl1"
}
Add(FormatStr,13503697,287,287)
{
DataCount=1
Mask="*%1*"
link(onFString,14773555:doMask,[])
link(Str1,7038444:Var1,[(293,272)(261,272)(261,324)(146,324)])
}
Add(StrMask,14773555,434,280)
{
Point(doMask)
link(onTrue,6563615:doString,[])
}
Add(ArrayEnum,15305743,371,294)
{
link(onItem,14773555:doCompare,[(419,300)(419,286)])
link(Array,6117003:Array,[])
}
Add(FormatStr,6563615,483,287)
{
Mask="%1;%2"
link(onFString,860943:doMT,[])
link(Str1,14020333:Count,[(489,265)(621,265)(621,324)(587,324)])
}
END_SDK
Add(Hub,13775491,49,49)
{
link(onEvent1,16013350:doWork1,[])
link(onEvent2,736870:doWork1,[(81,62)(81,104)])
}
Add(Hub,15661481,49,98)
{
link(onEvent1,16013350:doWork2,[(81,104)(81,62)])
link(onEvent2,736870:doWork2,[])
}
Add(ChildPanel,736870,98,98)
{
}
BEGIN_SDK
Add(EditMulti,7712959,21,21)
{
WorkCount=2
Width=615
Height=403
link(doWork1,2014909:doFor,[(45,27)(45,223)])
link(doWork2,328505:doEvent1,[(45,34)(45,97)])
}
Add(Panel,15220286,154,42)
{
Left=399
Width=280
Height=311
Layout="parent.01"
WidthScale=50
}
Add(For,2014909,77,217)
{
End=30
link(onEvent,9837199:doString,[])
link(onStop,6883212:doEvent1,[(119,230)(119,335)])
}
Add(FormatStr,9837199,140,217)
{
DataCount=9
Mask="%1;%2;%3;%4;%5;%6;%7;%8;%9"
link(onFString,5507751:doAdd,[])
link(Str1,10229729:Var1,[(146,201)])
link(Str2,10229729:Var2,[])
link(Str3,5259159:Var2,[])
link(Str4,8533612:Var2,[])
link(Str5,3531516:Var2,[])
link(Str6,1381821:Var2,[])
link(Str7,2819909:Var2,[])
link(Str8,758209:Var2,[])
link(Str9,111699:Var2,[])
}
Add(EventFromData,15715321,203,154)
{
link(onEvent,14690365:doRandom,[])
}
Add(Random,14690365,259,154)
{
Min=1000
Max=10000
link(onRandom,15715321:doData,[(303,160)(303,148)(191,148)(191,160)])
}
Add(GetDataEx,5259159,154,196)
{
Angle=1
link(Data,8533612:Var1,[])
}
Add(GetDataEx,8533612,161,196)
{
Angle=1
link(Data,3531516:Var1,[])
}
Add(GetDataEx,3531516,168,196)
{
Angle=1
link(Data,1381821:Var1,[])
}
Add(GetDataEx,1381821,175,196)
{
Angle=1
link(Data,2819909:Var1,[])
}
Add(GetDataEx,2819909,182,196)
{
Angle=1
link(Data,758209:Var1,[])
}
Add(GetDataEx,758209,189,196)
{
Angle=1
link(Data,111699:Var1,[])
}
Add(GetDataEx,111699,196,196)
{
Angle=1
link(Data,15715321:GetData,[(209,201)])
}
Add(GetDataEx,10229729,147,196)
{
Angle=1
link(Data,5259159:Var1,[])
}
Add(Hub,328505,77,91)
{
link(onEvent1,11703699:doWork1,[(318,97)])
link(onEvent2,5507751:doClear,[(309,104)(309,230)])
}
Add(ChildPanel,8528219,77,336)
{
link(onEvent1,6883212:doEvent2,[])
}
BEGIN_SDK
Add(EditMulti,4482240,21,21)
{
EventCount=1
VarCount=1
link(Var1,10815115:Text,[(27,151)(216,151)])
}
Add(Panel,10623919,56,49)
{
Left=2
Top=2
Width=276
Height=28
Align=2
BevelInner=0
}
Add(Edit,10815115,210,49)
{
Left=20
Top=5
Width=85
Text=""
link(onChange,4482240:onEvent1,[(282,55)(282,27)])
}
Add(Button,11937243,147,49)
{
Left=110
Top=6
Caption="сброс"
link(onClick,10815115:doText,[])
}
Add(Label,668504,56,98)
{
Left=175
Top=10
Width=74
Height=17
Caption="StringTableMT"
}
END_SDK
Add(StringTableMT,681548,537,194)
{
Left=2
Top=30
Width=276
Height=278
Align=5
Font=[MS Sans Serif,8,0,0,204]
Name="Tab"
Layout="gor 01"
WidthScale=100
HeightScale=90
Columns=#5:№ п\п|1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|
ColumnClick=1
TabGrid=0
TabGridFrame=0
SingleString=0
Grid=0
ModeMakeVisible=2
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doSelect)
}
Add(StrList,5507751,364,217)
{
}
Add(Hub,6883212,161,329)
{
InCount=2
OutCount=3
link(onEvent1,11703699:doWork3,[(318,335)])
link(onEvent2,2411639:doString,[])
link(onEvent3,6402959:doEnum,[])
}
Add(FormatStr,2411639,231,336)
{
DataCount=1
Mask="*%1*"
link(onFString,10662775:doMask,[])
link(Str1,8528219:Var1,[(237,319)(141,319)(141,380)(83,380)])
}
Add(StrMask,10662775,350,329)
{
Point(doMask)
link(onTrue,11171175:doString,[])
}
Add(ArrayEnum,6402959,287,343)
{
link(onItem,10662775:doCompare,[(335,349)(335,335)])
link(Array,5507751:Array,[(293,296)(384,296)])
}
Add(FormatStr,11171175,399,336)
{
Mask="%1;%2"
link(onFString,681548:doAdd,[(484,342)(484,200)])
link(Str1,681548:Count,[(405,281)(543,281)])
}
Add(HubEx,11703699,314,201)
{
link(onEvent,681548:doClear,[])
}
END_SDK
Add(HBoxLayout,15014532,98,147)
{
Name="01"
}
END_SDK
карма: 3

0
Разработчик
Ответов: 26048
Рейтинг: 2110
#291: 2022-07-21 14:21:41 ЛС | профиль | цитата
fox-video писал(а):
MTStrTbl мерцает сильней без исправления кода

Да она и будет мерцать сильнее, там в нее столько всего напихали, что дальше уже некуда. Но что-то у тебя уж очень сильно мерцает.

Редактировалось 1 раз(а), последний 2022-07-21 14:22:15
карма: 22

0
Ответов: 245
Рейтинг: 15
#292: 2022-07-21 14:23:14 ЛС | профиль | цитата
nesco писал(а):
Да она и будет мерцать сильнее

Что же, буду мириться с этим
карма: 3

0
Разработчик
Ответов: 26048
Рейтинг: 2110
#293: 2022-07-21 14:47:26 ЛС | профиль | цитата
fox-video писал(а):
Что же, буду мириться с этим

Не торопись, попробуем найти компромисс. Выложил немного подправленный Win. Там, кстати, я ввел управление сглаживанием шрифтов. Очень интересно, как у тебя отображается?
карма: 22

0
файлы: 1Win_21-07-2022.zip [9.3KB] [30]
Ответов: 245
Рейтинг: 15
#294: 2022-07-21 15:01:49 ЛС | профиль | цитата
nesco писал(а):
как у тебя отображается?

Antialiased=False - - - - - - Antialiased=True
-
карма: 3

0
Разработчик
Ответов: 26048
Рейтинг: 2110
#295: 2022-07-21 15:07:26 ЛС | профиль | цитата
Да, как-то не очень со сглаживанием. А как ведут себя таблицы?
карма: 22

0
Ответов: 245
Рейтинг: 15
#296: 2022-07-21 15:13:44 ЛС | профиль | цитата
nesco Вы чародей! Бесючая перерисовка пропала на прочь

--- Добавлено в 2022-07-21 15:27:29

В целом, когда за сплиттеры тянешь, как-то мягче стало изменение размеров.

Редактировалось 1 раз(а), последний 2022-07-21 15:27:29
карма: 3

0
Разработчик
Ответов: 26048
Рейтинг: 2110
#297: 2022-07-21 15:33:55 ЛС | профиль | цитата
fox-video писал(а):
Бесючая перерисовка пропала на прочь

Она как бы есть, но не такая резкая. На очень слабых компах немного заметна, я еще на более быстром компе не проверял.
карма: 22

0
Ответов: 245
Рейтинг: 15
#298: 2022-07-21 15:49:40 ЛС | профиль | цитата
nesco писал(а):
Она как бы есть, но не такая резкая.

На самом деле ДА. С вашей помощью я разглядел как мерцала и раньше таблица, но это не критично, совсем.
карма: 3

0
Разработчик
Ответов: 26048
Рейтинг: 2110
#299: 2022-07-22 00:02:47 ЛС | профиль | цитата
На SVN еще немного поправил алгоритм перерисовки сетки таблицы MTStrTbl при горизонтальном скроллинге. Это еще должно уменьшить мерцание при горизонтальной прокрутке поля, при вертикальной эта фича вообще отключена.
карма: 22

0
Ответов: 245
Рейтинг: 15
#300: 2022-07-22 17:42:40 ЛС | профиль | цитата
К сожалению протестировать не могу. Обновлённая таблица с AdjustControls не дружит, а у меня рабочий проект с ним.
карма: 3

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