![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в TreeView определить область видимости
HRustBB © (2010-05-26 00:47:00)Имеется TreeView, подскажите пожалуйсто как можно определить какие ноды при перемещении скрола видны в клиентской области, какие выше, а какие ниже
KilkennyCat (2010-06-20 19:25:00) [1]
> А куда добавить то?
Ну а куда надо-то? К Дереву? Значит, к нему.
пишешь:
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
HRustBB (2010-06-20 15:31:00) [2]
> Германн © (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 03:39:00) [3]
> Германн © (20.06.10 02:42) [23]
>
> А что у TTreeView нет событий скроллинга?
неа. да и не нужны особо.
KilkennyCat (2010-06-20 03:34:00) [4]
> чтобы процедура OnScroll вызывалась при скроллинге TreeView1
добавь
procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
Германн (2010-06-20 02:42:00) [5]А что у TTreeView нет событий скроллинга?
Во- первых бред.
Во-вторых - нежелание читать учебники.
В-третьих - "чукча не читатель". А ведь не так давно были на форуме схожие вопросы.
HRustBB (2010-06-20 02:20:00) [6]
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-05-28 16:52:00) [7]См. TreeView_GetItemRect
12 (2010-05-28 16:22:00) [8]
> TTreeNode.DisplayRect
тоже нашел :)
MBo (2010-05-28 16:14:00) [9]TTreeNode.DisplayRect
12 (2010-05-28 16:13:00) [10]еще мысль, хэндл взять и Винду поспрашивать, видит ли она это окно
MBo (2010-05-28 15:59:00) [11]>Как ноды видимые то найти?
В справке по TTreeNode покопаться
HRustBB (2010-05-28 15:29:00) [12]А насчет одноручной пилы, может есть готовые компоненты решающие подобные задачи? (вопрос на всякий случай :)
HRustBB (2010-05-28 15:27:00) [13]
> есть идея посчитать пикселы между нодами, когда они развернуты
>
> и сравнить с размерами компонента
мм, думал об этом тоже, но хотел найти более изящное решение, придется наверно так и сделать.
12 (2010-05-28 15:11:00) [14]есть идея посчитать пикселы между нодами, когда они развернуты
и сравнить с размерами компонента
HRustBB (2010-05-28 14:54:00) [15]
> Бредом не надо заниматься и все будет пучком
Не, ну бред, не бред это вопрос другой. Как ноды видимые то найти?
12 (2010-05-28 14:37:00) [16]т.е. лучше одноручную? :)
Jeer (2010-05-28 14:33:00) [17]
> Все это нужно мне чтобы сделать коечто похожее на окно "схема
> данных" в MSAccess. Нужно выяснить какие ноды видны и нарисовать
> от низ линии связи к другим окошкам.
Бредом не надо заниматься и все будет пучком.
Ну, попробуй двуручную пилу использовать в качестве своей зубочистки.
HRustBB (2010-05-28 13:05:00) [18]IsVisible – Свойство только для чтения. Индицирует, виден ли данный Node в данный момент или нет. Если Node видимый, свойство IsVisible равно True, в противном случае равно False. При этом Node считается видимым, если он не имеет родительских Node, или же если его родительские Node всех уровней находятся в развёрнутом состоянии, т.е. если в принципе данный Node можно видеть на экране – не важно виден ли он в действительности или нет, т.е. к примеру, если дерево TTreeView имеет полосу прокрутки, и эта полоса прокрутки установлена таким образом, что данный Node находится за приделами окна TTreeView, но все родительские Node этого Node развёрнуты, он всё равно считается видимым. (c) не мое
Все это нужно мне чтобы сделать коечто похожее на окно "схема данных" в MSAccess. Нужно выяснить какие ноды видны и нарисовать от низ линии связи к другим окошкам.
MsGuns (2010-05-27 09:00:00) [19]>HRustBB (26.05.10 16:10) [3]
>Вы уверены?
Уверен, что в качестве подсказки в дополнению к [1] вполне достаточно, чтобы разобраться самостоятельно
>Германн © (27.05.10 01:46) [7]
>Так это ж РЕКУРСИЯ! Страшно! :)
:) Разве что для автора
На самом деле ничего страшного, т.к. рекурсия обрывается на первом невидимом узле - ЮЗ все написал :)
Германн (2010-05-27 02:03:00) [20]И к тому же не понятно для чего нужен сам сабж? Задача Z, как почти всегда, не озвучена.