![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запретить TreeView раскрываться при двойном клике на item-ах [D2005, XP]
alex-drob © (2008-06-05 00:39:00)структура примерно такая
+-item
| |-subitem
| | |-sub_subitem
| | |-sub_subitem
| |-subitem
| | |-sub_subitem
| | |-sub_subitem
|-item
| |-subitem
| | |-sub_subitem
| | |-sub_subitem
.....
хотелось бы так чтобы именно при дубльклике на subitem он не раскрывался
alex-drob (2008-06-05 10:03:00) [1]
> {RASkov} © (05.06.08 08:47) [6]
Всё получилось!
Большое всем спасибо!
{RASkov} (2008-06-05 09:25:00) [2]> Возьми другой компонент и будет тебе щастье
Не в компонентах щастьё :)
oldman (2008-06-05 09:23:00) [3]
> alex-drob © (05.06.08 01:47) [2]
> ну просто можно и отказаться от этого, я просто список кантактов
> делал, и хотел чтобы по двойному клику открывалось окно
> для написания сообщения, а при нажатии на крестик, информация
> в строчки, например, email и телефон, чтобы можно было сразу
> письмо отправить, ну или в мой мир на маиле зайти.
И откажись.
Возьми другой компонент и будет тебе щастье.
{RASkov} (2008-06-05 08:51:00) [4]> procedure TForm1.NewWnd (var Mes: TMessage);
> procedure MyAction;
> begin
> ShowMessage(N.Text);
> end;
> var N: TTreeNode;
> begin
Т.е. так:
procedure TForm1.NewWnd (var Mes: TMessage);
var N: TTreeNode;
procedure MyAction;
begin
ShowMessage(N.Text);
end;
begin
....
Ошибся с видимостью лок. переменной)
{RASkov} (2008-06-05 08:47:00) [5][4] - Можно попробывать так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
procedure FormCreate(Sender: TObject);
private
OldWnd: TWndMethod;
procedure NewWnd (var Mes: TMessage);
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
OldWnd:=TreeView1.WindowProc;
TreeView1.WindowProc:=NewWnd;
TreeView1.ReadOnly:=True;
end;
procedure TForm1.NewWnd (var Mes: TMessage);
procedure MyAction;
begin
ShowMessage(N.Text);
end;
var N: TTreeNode;
begin
if Mes.Msg<>WM_LBUTTONDBLCLK then OldWnd(Mes) //Обрабатываем по умолчанию все кроме двойного клика левой кнопки мыши
else begin
N:=TreeView1.GetNodeAt(LoWord(Mes.LParam), HiWord(Mes.LParam)); //Получаем "даблкликнутый" итэм...
if (N<>nil) and (N.Level=1) then MyAction else OldWnd(Mes); //...проверяем его и при необходимости прерываем стандартные действия и делаем свои
end;
end;
end.
Не конечный вариант, но для раздумья....
Германн (2008-06-05 02:36:00) [6]
> alex-drob © (05.06.08 02:05) [4]
>
> понятно. ну а если как нибудь в OnDblClick обрабатывать?
>
FOnDblClick вызывается после стандартной реакции, если компонент явно, через свои свойства, не предлагает другого варианта.
alex-drob (2008-06-05 02:05:00) [7]понятно. ну а если как нибудь в OnDblClick обрабатывать? у меня каждый subitem содержит в переменной Data указатель на облать с данными, а другие итемы несодержат, то есть если проверять типа
if subitem.data<>nil then
а вот что дальше...
или так не получиться
Германн (2008-06-05 01:53:00) [8]
> alex-drob © (05.06.08 01:47) [2]
>
>
> > Германн © (05.06.08 01:40) [1]
>
> ну почемуже, очень даже стандартная! просто подход нестандарный!
>
>
> ну просто можно и отказаться от этого, я просто список кантактов
> делал, и хотел чтобы по двойному клику открывалось окно
> для написания сообщения, а при нажатии на крестик, информация
> в строчки, например, email и телефон, чтобы можно было сразу
> письмо отправить, ну или в мой мир на маиле зайти.
>
Ты ж пойми. Если какой-либо компонент уже имеет стандартную реакцию, то изменить её, как правило, можно лишь в наследнике. И особо сложно, если данный компонент - лишь дельфийская оболочка для работы со стандартным "компонентом" Windows.
alex-drob (2008-06-05 01:47:00) [9]
> Германн © (05.06.08 01:40) [1]
ну почемуже, очень даже стандартная! просто подход нестандарный!
ну просто можно и отказаться от этого, я просто список кантактов делал, и хотел чтобы по двойному клику открывалось окно для написания сообщения, а при нажатии на крестик, информация в строчки, например, email и телефон, чтобы можно было сразу письмо отправить, ну или в мой мир на маиле зайти.
Германн (2008-06-05 01:40:00) [10]
> alex-drob © (05.06.08 00:39)
Да что ж ты всё "хочешь странного"? Нестандартная ориентация что-ли? :)