Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26013
Рейтинг: 2108
#16: 2021-11-27 13:38:57 ЛС | профиль | цитата
ric писал(а):
Nesco

Я посмотрю

--- Добавлено в 2021-11-27 14:31:29

Исправь внутри hiTreeViewTrain.pas код вот на этот:

function THITreeViewTrain.AddNodeAt;
var
dt:TData;
fd:PData;
node:cardinal;
cap:string;
begin
dt := Data;
new(fd);
FillChar(fd^, sizeof(TData), 0);
CopyData(fd,@dt);

if getItem(dt, _prop_CaptionIndex) then
cap := ToString(dt)
else cap := 'node';

node := Control.TVInsert(pid, 0, cap);
Control.TVItemData[node] := fd;

dt := Data;
if _prop_CheckBoxes then
begin
if getItem(dt, _prop_CheckBoxIndex) then
Control.TVItemStateImg[node] := ToInteger(dt) + 1
else
Control.TVItemStateImg[node] := 0;
end;

dt := Data;
if (Control.ImageListNormal <> nil) and getItem(dt, _prop_IconIndex) then
begin
Control.TVItemImage[node] := ToInteger(dt);
Control.TVItemSelImg[node] := Control.TVItemImage[node];
end;
Result := ADD_ERR_SUCCESS;

if _prop_UseHashMap then
begin
dt := Data;
getItem(dt, _prop_IDIndex);
FHash.AddObject(ToString(dt), node);
end;
if last <> nil then
last^ := node;
end;

Редактировалось 4 раз(а), последний 2021-11-27 14:32:28
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Разработчик
Ответов: 26013
Рейтинг: 2108
#17: 2021-11-27 15:21:57 ЛС | профиль | цитата
На SVN тоже обновил (наконец-то выцепил с работы пароль доступа).
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 187
Рейтинг: 3
#18: 2021-11-28 11:03:35 ЛС | профиль | цитата
отлично спасибо добрый человек.
карма: 1

0
Ответов: 187
Рейтинг: 3
#19: 2022-04-22 19:39:50 ЛС | профиль | цитата
nesco Снова нужна твоя помощь, в TreeViewTrain добавить событие на CheckBoxes(0-1)чтоб не городить такую конетель.

Add(MainForm,16077975,238,140)
{
Width=614
Height=275
Position=1
Point(Handle)
link(onCreate,12035853:doTimer,[])
}
Add(TreeViewTrain,1574694,399,273)
{
Width=264
Height=236
Align=1
Name="main"
RightClickSelect=0
IconsManager="icons"
CheckBoxes=0
ParentIDIndex=2
IDIndex=1
IconIndex=4
CheckBoxIndex=3
Point(onMouseMove)
Point(onMouseDown)
Point(onMouseUp)
Point(onKillFocus)
Point(IDAtPos)
Point(DataAtPos)
Point(onDrop)
Point(doSetFocus)
Point(doExpand)
link(onMouseUp,7065489:doSplit,[])
}
Add(TVT_AddNode,3105964,455,147)
{
TreeView="main"
}
Add(StrList,15705233,329,98)
{
Strings=#18:категория 1;1;-1;1|19:категория 2;2;-1;0 |11:sub 1;4;2;0|11:sub 2;5;2;0|11:sub 3;6;2;0|19:категория 3;3;-1;-1|12:sub 1;7;3;-1|12:sub 2;8;3;-1|12:sub 3;9;3;-1|
}
Add(ArrayEnum,10500446,343,154)
{
link(onItem,11917214:doMT,[])
link(onEndEnum,1574694:doExpand,[(384,167)(384,293)])
link(Array,15705233:Array,[])
}
Add(MT_String,11917214,399,147)
{
link(onResult,3105964:doAddNode,[])
}
Add(Timer,12035853,287,154)
{
Interval=0
Enable=1
AutoStop=1
link(onTimer,10500446:doEnum,[])
}
Add(TVT_EnumNodes,5699750,553,301)
{
TreeView="main"
link(onEnum,10773058:doValue,[])
link(ID,1574694:IDAtPos,[(559,283)(517,283)(517,338)(412,338)])
}
Add(Hub,16441856,511,294)
{
link(onEvent1,7356611:doValue,[])
link(onEvent2,5699750:doEnum,[])
}
Add(Memory,7356611,665,294)
{
}
Add(MT_MultiMem,10773058,609,301)
{
Count=3
link(onData,14970630:doAdd,[(652,307)(652,348)(597,348)(597,377)])
}
Add(MT_AddData,14970630,609,371)
{
Count=4
link(onAdd,12830287:doChangeNode,[])
link(Data1,10773058:Value1,[])
link(Data2,10773058:Value2,[])
link(Data3,10773058:Value3,[])
link(Data4,7356611:Value,[(636,359)(671,359)])
}
Add(TVT_ChangeNode,12830287,658,371)
{
TreeView="main"
}
Add(MT_Part,7065489,462,294)
{
After=2
Point(Data)
link(onSplit,16441856:doEvent1,[])
link(Data,1574694:DataAtPos,[(468,282)(444,282)(444,330)(419,330)])
}

карма: 1

0
Разработчик
Ответов: 26013
Рейтинг: 2108
#20: 2022-04-22 20:14:53 ЛС | профиль | цитата
ric писал(а):
добавить событие на CheckBoxes(0-1)чтоб не городить такую конетель

Ты предлагаешь мне воткнуть в код все то, что ты нарисовал из кубиков? Ну, не знаю, посмотрю на досуге что можно сделать. Но не гарантирю, что это будет быстро.

Редактировалось 1 раз(а), последний 2022-04-22 20:15:55
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 187
Рейтинг: 3
#21: 2022-04-22 20:19:42 ЛС | профиль | цитата
nesco писал(а):

ric писал(а):
добавить событие на CheckBoxes(0-1)чтоб не городить такую конетель

Ты предлагаешь мне воткнуть в код все то, что ты нарисовал из кубиков? Ну, не знаю, посмотрю на досуге что можно сделать. Но не гарантирю, что это будет быстро.

Нет просто событие с 0 и 1, то из кубиков просто пример, мне не к спеху как сможешь.
карма: 1

0
Разработчик
Ответов: 26013
Рейтинг: 2108
#22: 2022-04-22 20:26:26 ЛС | профиль | цитата
А тебе нужно текущее значение или текущее изменение, те при клике на строке получить текущее значение CheckBox-a, или получить значение при клике на CheckBox-e после изменения его состояния?
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 187
Рейтинг: 3
#23: 2022-04-22 21:05:52 ЛС | профиль | цитата
второе

--- Добавлено в 2022-04-22 21:07:05

nesco писал(а):
получить значение при клике на CheckBox-e после изменения его состояния?


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

0
Разработчик
Ответов: 26013
Рейтинг: 2108
#24: 2022-04-22 22:07:10 ЛС | профиль | цитата
Посмотрел внимательно схему и совершенно не понял, что тебе все же нужно? То, что ты просишь выполняет DataAtPos под указателем мыши, те выдает текущий кортеж, где в конце и содержится состояние нужного CheckBox-а. Выделять отдельно состояние CheckBox-а не имеет смысла, тк это состояние не понятно к чему будет относится, те не будет иметь координат в дереве. Возможно, имеет смысл выдать этот кортеж отдельным событием, типа onCheckBox, но я не вижу в этом большого смысла. Остальная часть схемы к текущему компоненту как бы не совсем относится, это частный случай, как бы отдельный функционал. Может быть имеет смысл добавить такой функционал в компонент, типа: распространять состояние родительского CheckBox-a на все дочерние CheckBox-ы?
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 187
Рейтинг: 3
#25: 2022-04-22 22:12:45 ЛС | профиль | цитата
nesco писал(а):
Может быть имеет смысл добавить такой функционал в компонент, типа: распространять состояние родительского CheckBox-a на все дочерние CheckBox-ы?

Если есть такая возможность то еще лучше.
карма: 1

0
Разработчик
Ответов: 26013
Рейтинг: 2108
#26: 2022-04-22 22:30:34 ЛС | профиль | цитата
ric писал(а):
Если есть такая возможность то еще лучше

Если что-то сделано на рассыпухе и связано с этим же компонентом, то портировать в компонент это в принципе возможно. Вопрос только в способах реализации. Короче, надо подумать.
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 187
Рейтинг: 3
#27: 2022-04-22 22:35:07 ЛС | профиль | цитата
Добро как будет желание, мне не горит.
карма: 1

0
Разработчик
Ответов: 26013
Рейтинг: 2108
#28: 2022-04-23 04:58:01 ЛС | профиль | цитата
Вот что получилось, тестируй. За управление дочерними флажками отвечает свойство SetCheckOnChild
<delete archives>

Редактировалось 1 раз(а), последний 2022-04-23 13:05:41
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 187
Рейтинг: 3
#29: 2022-04-23 12:16:28 ЛС | профиль | цитата
Работает отлично, только пока индекс CheckBoxIndex=3, если поменять на другой то нет

Add(MainForm,16077975,350,217)
{
Width=614
Height=275
Position=1
Point(Handle)
link(onCreate,12035853:doTimer,[])
}
Add(TreeViewTrain,1574694,511,280)
{
Width=264
Height=236
Align=1
Name="main"
RightClickSelect=0
IconsManager="icons"
CheckBoxes=0
SetCheckOnChild=0
ParentIDIndex=2
IDIndex=1
IconIndex=3
CheckBoxIndex=4
Point(onMouseMove)
Point(onMouseDown)
Point(onMouseUp)
Point(onKillFocus)
Point(IDAtPos)
Point(DataAtPos)
Point(onDrop)
Point(doSetFocus)
Point(doExpand)
}
Add(TVT_AddNode,3105964,567,224)
{
TreeView="main"
}
Add(StrList,15705233,441,175)
{
Strings=#18:категория 1;1;-1;1|19:категория 2;2;-1;0 |11:sub 1;4;2;0|12:sub 11;5;4;0|12:sub 12;6;4;0|12:sub 13;7;4;0|11:sub 2;8;2;0|11:sub 3;9;2;0|19:категория 3;3;-1;-1|13:sub 1;10;3;-1|13:sub 2;11;3;-1|13:sub 3;12;3;-1|
}
Add(ArrayEnum,10500446,455,231)
{
link(onItem,11917214:doMT,[])
link(onEndEnum,1574694:doExpand,[(496,244)(496,300)])
link(Array,15705233:Array,[])
}
Add(MT_String,11917214,511,224)
{
link(onResult,3105964:doAddNode,[])
}
Add(Timer,12035853,399,231)
{
Interval=0
Enable=1
AutoStop=1
link(onTimer,10500446:doEnum,[])
}

карма: 1

0
Разработчик
Ответов: 26013
Рейтинг: 2108
#30: 2022-04-23 12:37:06 ЛС | профиль | цитата
ric писал(а):
Работает отлично, только пока индекс CheckBoxIndex=3, если поменять на другой то нет

Там еще есть одна ошибка, надо будет исправить. Насчет индекса -- ты это, поменял расположение индексов, а исходную инициализацию оставил старой. В исходной инициализации нет иконок, вот они и стоят на позиции 4.

--- Добавлено в 2022-04-23 13:08:26

Вот, исправил код, должно работать нормально. В примере CheckBoxIndex=4

Редактировалось 4 раз(а), последний 2022-04-23 13:08:26
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
файлы: 1test_CeckBox_TreeViewerTrain_002.zip [9.4KB] [29]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)