Форум: "Начинающим";
Текущий архив: 2010.09.12;
Скачать: [xml.tar.bz2];
ВнизКак в TreeView определить область видимости Найти похожие ветки
← →
HRustBB (2010-05-26 00:47) [0]Имеется TreeView, подскажите пожалуйсто как можно определить какие ноды при перемещении скрола видны в клиентской области, какие выше, а какие ниже
← →
MBo © (2010-05-26 08:17) [1]Для верхнего в окошке есть специальное свойство TTreeView
Нижележащие, видимо, придется проверять.
← →
MsGuns © (2010-05-26 09:53) [2]TTreeNode.visible
← →
HRustBB (2010-05-26 16:10) [3]
> MsGuns © (26.05.10 09:53) [2]
> TTreeNode.visible
Вы уверены?
← →
HRustBB (2010-05-26 18:41) [4]
> MBo © (26.05.10 08:17) [1]
> Для верхнего в окошке есть специальное свойство TTreeView
> Нижележащие, видимо, придется проверять.
Вот вот, а как проверить то?
← →
Юрий Зотов © (2010-05-26 23:36) [5]
> HRustBB (26.05.10 18:41) [4]
Берем TopItem, от него в цикле идем вниз по узлам (GetNextSibling) до тех пор, пока IsVisible не вернет False.
← →
Юрий Зотов © (2010-05-27 00:48) [6]Можно дополнить: как только сработал предыдущий алгоритм (найден невидимый узел 0-го уровня, берем последний видимый (предыдущий) и применяем тот же алгоритм к его дочерним узлам - и т.д., пока не будет найден последний видимый узел произвольного уровня.
← →
Германн © (2010-05-27 01:46) [7]
> берем последний видимый (предыдущий) и применяем тот же
> алгоритм к его дочерним узлам - и т.д., пока не будет найден
> последний видимый узел произвольного уровня.
Так это ж РЕКУРСИЯ! Страшно! :)
← →
Германн © (2010-05-27 02:03) [8]И к тому же не понятно для чего нужен сам сабж? Задача Z, как почти всегда, не озвучена.
← →
MsGuns © (2010-05-27 09:00) [9]>HRustBB (26.05.10 16:10) [3]
>Вы уверены?
Уверен, что в качестве подсказки в дополнению к [1] вполне достаточно, чтобы разобраться самостоятельно
>Германн © (27.05.10 01:46) [7]
>Так это ж РЕКУРСИЯ! Страшно! :)
:) Разве что для автора
На самом деле ничего страшного, т.к. рекурсия обрывается на первом невидимом узле - ЮЗ все написал :)
← →
HRustBB (2010-05-28 13:05) [10]IsVisible – Свойство только для чтения. Индицирует, виден ли данный Node в данный момент или нет. Если Node видимый, свойство IsVisible равно True, в противном случае равно False. При этом Node считается видимым, если он не имеет родительских Node, или же если его родительские Node всех уровней находятся в развёрнутом состоянии, т.е. если в принципе данный Node можно видеть на экране – не важно виден ли он в действительности или нет, т.е. к примеру, если дерево TTreeView имеет полосу прокрутки, и эта полоса прокрутки установлена таким образом, что данный Node находится за приделами окна TTreeView, но все родительские Node этого Node развёрнуты, он всё равно считается видимым. (c) не мое
Все это нужно мне чтобы сделать коечто похожее на окно "схема данных" в MSAccess. Нужно выяснить какие ноды видны и нарисовать от низ линии связи к другим окошкам.
← →
Jeer © (2010-05-28 14:33) [11]
> Все это нужно мне чтобы сделать коечто похожее на окно "схема
> данных" в MSAccess. Нужно выяснить какие ноды видны и нарисовать
> от низ линии связи к другим окошкам.
Бредом не надо заниматься и все будет пучком.
Ну, попробуй двуручную пилу использовать в качестве своей зубочистки.
← →
12 © (2010-05-28 14:37) [12]т.е. лучше одноручную? :)
← →
HRustBB (2010-05-28 14:54) [13]
> Бредом не надо заниматься и все будет пучком
Не, ну бред, не бред это вопрос другой. Как ноды видимые то найти?
← →
12 © (2010-05-28 15:11) [14]есть идея посчитать пикселы между нодами, когда они развернуты
и сравнить с размерами компонента
← →
HRustBB (2010-05-28 15:27) [15]
> есть идея посчитать пикселы между нодами, когда они развернуты
>
> и сравнить с размерами компонента
мм, думал об этом тоже, но хотел найти более изящное решение, придется наверно так и сделать.
← →
HRustBB (2010-05-28 15:29) [16]А насчет одноручной пилы, может есть готовые компоненты решающие подобные задачи? (вопрос на всякий случай :)
← →
MBo © (2010-05-28 15:59) [17]>Как ноды видимые то найти?
В справке по TTreeNode покопаться
← →
12 © (2010-05-28 16:13) [18]еще мысль, хэндл взять и Винду поспрашивать, видит ли она это окно
← →
MBo © (2010-05-28 16:14) [19]TTreeNode.DisplayRect
← →
12 © (2010-05-28 16:22) [20]
> TTreeNode.DisplayRect
тоже нашел :)
← →
Юрий Зотов © (2010-05-28 16:52) [21]См. TreeView_GetItemRect
← →
HRustBB (2010-06-20 02:20) [22]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
private
{ Private declarations }
procedure OnScroll(var Msg: TWMVScroll); message WM_VScroll;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.OnScroll(var Msg: TWMVScroll);
var hnd:HWND;
tr:TRect;
begin
tr:=TreeView1.selected.DisplayRect(false);
form1.Caption:=Inttostr(tr.Top);
end;
end.
здесь процедура OnScroll возникает в случае получения сообщения TWMVScroll формой. А как сделать чтобы сообщение ловил TreeView1, тоесть чтобы процедура OnScroll вызывалась при скроллинге TreeView1 а не окна приложения?
← →
Германн © (2010-06-20 02:42) [23]А что у TTreeView нет событий скроллинга?
Во- первых бред.
Во-вторых - нежелание читать учебники.
В-третьих - "чукча не читатель". А ведь не так давно были на форуме схожие вопросы.
← →
KilkennyCat © (2010-06-20 03:34) [24]
> чтобы процедура OnScroll вызывалась при скроллинге TreeView1
добавь
procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
← →
KilkennyCat © (2010-06-20 03:39) [25]
> Германн © (20.06.10 02:42) [23]
>
> А что у TTreeView нет событий скроллинга?
неа. да и не нужны особо.
← →
HRustBB (2010-06-20 15:31) [26]
> Германн © (20.06.10 02:42) [23]
Почитал бы сам какие есть события у TreeView, а каких нет, или чукча не читатель?
> KilkennyCat © (20.06.10 03:34) [24]
> > чтобы процедура OnScroll вызывалась при скроллинге TreeView1добавь
> procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
> procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
>
А куда добавить то?
← →
KilkennyCat © (2010-06-20 19:25) [27]
> А куда добавить то?
Ну а куда надо-то? К Дереву? Значит, к нему.
пишешь:type TMyScrollEventnutyTreeView = class(TTreeView)
private
procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;
параметры тут : http://msdn.microsoft.com/en-us/library/bb787577%28VS.85%29.aspx
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.09.12;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.005 c