Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в TreeView определить область видимости


Страницы:   1 2

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, как почти всегда, не озвучена.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо