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

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

Checked в TreeView


Страницы:   1 2

Matveih1 ©   (2008-06-27 11:45:00) 

Как сделать чтобы в компоненте TreeView можно было проставлять крыжи как в CheckBox


Matveih1   (2008-06-27 14:37:00) [1]

Да все верно. Спасибо еще раз!


Rouse_   (2008-06-27 14:26:00) [2]


> А как программно понять выставлен крыж или нет

GetChecked говорит выставлен или нет, SetChecked выставляет...


Matveih1   (2008-06-27 13:54:00) [3]

Рисовать CheckBox - теперь рисует. А как программно понять выставлен крыж или нет


Matveih1   (2008-06-27 13:49:00) [4]

Все хорошо - это я промазал! Спасибо


Rouse_   (2008-06-27 13:45:00) [5]


> Matveih1 ©   (27.06.08 13:35) [21]
> Может я что то не то делаю но у меня не работает!

Так ты покажи как ты делаешь :)


> для TVS_CHECKBOXES версия comctl32.dll должна быть >= 4.70

т.е. должен быть установлен Internet Explorer 4.0 и выше :)


clickmaker   (2008-06-27 13:41:00) [6]

для TVS_CHECKBOXES версия comctl32.dll должна быть >= 4.70


Matveih1   (2008-06-27 13:35:00) [7]

Может я что то не то делаю но у меня не работает!


{RASkov}   (2008-06-27 13:06:00) [8]

> [19] Milk   (27.06.08 12:51)

Я имел в виду, что ты предлогаешь нечто такое:

N:=GetWindowLong(TreeView1.Handle,GW L_STYLE); //Пусть будет 5
//SetWindowLong(TreeView1.Handle,GWL_STYLE, N {or WM_VSCROLL}); //Т.е. предложил убрать WM_VSCROLL
SetWindowLong(TreeView1.Handle,GWL_STYLE, N); //Получилось с пустого в порожнее
вот и выходит: получил 5 и "сунул" 5 :)


Milk   (2008-06-27 12:51:00) [9]

> {RASkov} ©   (27.06.08 12:47) [17]
Хотел ответить на
Matveih1 ©   (27.06.08 12:28) [11]
Есть решение с примеров?

промахнулся с со строкой Цитата:(


Milk   (2008-06-27 12:47:00) [10]


> Rouse_ ©   (27.06.08 12:45) [16]

:)


{RASkov}   (2008-06-27 12:47:00) [11]

> [13] Milk   (27.06.08 12:31)

5=5 и какой толк? :)


Rouse_   (2008-06-27 12:45:00) [12]


> А затем показалось, что SetWindowLong проще.

Да? А мне показалось что этот юнит его и использует :)


Milk   (2008-06-27 12:41:00) [13]


> Rouse_ ©   (27.06.08 12:35) [14]
> Крыжики говоришь? :) Хех :)))

В свое время пользовался этим Unit-ом. А затем показалось, что SetWindowLongпроще.


Rouse_   (2008-06-27 12:35:00) [14]

Крыжики говоришь? :) Хех :)))

unit CheckedTreeView;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, ComCtrls, CommCtrl;

type
 TGSCheckedTreeView = class(TTreeView)
 private
   FCheckBox: Boolean;
   procedure SetCheckBox(const Value: Boolean);
 public
   function GetChecked(Node: TTreeNode): Boolean;
   procedure SetChecked(Node: TTreeNode; Checked: Boolean);
 published
   property CheckBox: Boolean read FCheckBox write SetCheckBox default False;
 end;

procedure Register;

implementation

const
 TVIS_CHECKED = $2000;

procedure Register;
begin
 RegisterComponents('Test', [TGSCheckedTreeView]);
end;

{ TGSCheckedTreeView }

function TGSCheckedTreeView.GetChecked(Node: TTreeNode): Boolean;
var
 Item :TTVItem;
begin
 Item.Mask  := TVIF_STATE;
 Item.hItem := Node.ItemId;
 TreeView_GetItem(Node.TreeView.Handle, Item);
 Result := (Item.State and TVIS_CHECKED) = TVIS_CHECKED;
end;

procedure TGSCheckedTreeView.SetCheckBox(const Value: Boolean);
var
 FStyle: Integer;
begin
 FCheckBox := Value;
 FStyle := GetWindowLong(Handle, GWL_STYLE);
 if FCheckBox then
   FStyle := FStyle or TVS_CHECKBOXES
 else
   if (FStyle and TVS_CHECKBOXES) = TVS_CHECKBOXES then
     FStyle := FStyle and not TVS_CHECKBOXES;
 SetWindowLong(Handle, GWL_STYLE, FStyle);
 Repaint;
end;

procedure TGSCheckedTreeView.SetChecked(Node: TTreeNode; Checked: Boolean);
var
 Item :TTVItem;
begin
 FillChar(Item, SizeOf(TTVItem), 0);
 with Item do
 begin
   hItem     := Node.ItemId;
   Mask      := TVIF_STATE;
   StateMask := TVIS_STATEIMAGEMASK;
   if Checked then
     Item.State :=TVIS_CHECKED
   else
     Item.State :=TVIS_CHECKED shr 1;
   TreeView_SetItem(Node.TreeView.Handle, Item);
 end;
end;

end.


Milk   (2008-06-27 12:31:00) [15]


> Milk   (27.06.08 12:30) [12]
См. Milk   (27.06.08 12:03) [6]


Milk   (2008-06-27 12:30:00) [16]

Да убрать or WM_VSCROLLи закончить диспут, только вот автор, что-то примолк:)


Matveih1   (2008-06-27 12:28:00) [17]

Есть решение с примеров?


clickmaker   (2008-06-27 12:21:00) [18]

> [9] Milk   (27.06.08 12:12)

как скролл может решить проблему "крыжиков"?


Milk   (2008-06-27 12:12:00) [19]


> clickmaker ©   (27.06.08 12:08) [8]

Скролл для того чтобы, если дерево слишком "высокое" позволить им пользоваться:)
Ну, а если "крыжики" это CheckBox-ы, то вполне решает проблему


clickmaker   (2008-06-27 12:08:00) [20]

> [6] Milk   (27.06.08 12:03)
> Не об этом ли речь?

а скролл тут причем?


Страницы:   1 2

Наверх

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