Форум: "Основная";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
ВнизTreeView с возможностью выбора... Найти похожие ветки
← →
killer © (2004-06-13 19:22) [0]Есть ли в Delphi компонент, который как TreeView, но только с возможностью выбора строк... т.е. как checkbox, вы видели наверно такое, в инсталляторах это есть при выборе компоненов, которые следует установить...
← →
Mim1 © (2004-06-13 19:42) [1]
unit TreeViewS;
interface
uses
SysUtils, Classes, Controls, ComCtrls, Windows, Messages, CommCtrl;
type
TTVAutoCheck = (acMarkUp,acMarkDown,acUnMarkUp,acUnmarkDown);
TTVAutoCheckSet = set of TTVAutoCheck;
TTreeViewCheckedChangeEvent = procedure (Sender: TObject; Node:TTreeNode; NewState:Boolean) of object;
TTreeViewFQ = class(TTreeView)
private
FNodeCheckedChanged : TTreeViewCheckedChangeEvent;
FAutoCheck : TTVAutoCheckSet;
Procedure DoNodeCheckedChanged(Node:TTreeNode; NewState:Boolean);
protected
Procedure WMMD(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
procedure CreateParams(var Params: TCreateParams); override;
public
Function GetChecked(node : TTreeNode):boolean;
Procedure SetChecked(Node:TTreeNode; value : Boolean);
constructor Create(AOwner: TComponent); override;
published
property OnNodeCheckedChanged : TTreeViewCheckedChangeEvent read FNodeCheckedChanged write FNodeCheckedChanged;
property AutoCheck : TTVAutoCheckSet read FAutoCheck write FAutoCheck;
end;
procedure Register;
implementation
const
IIL_UNCHECKED = 1;
IIL_CHECKED = 2;
procedure Register;
begin
RegisterComponents("Standard", [TTreeViewFQ]);
end;
{ TTreeViewFQ }
constructor TTreeViewFQ.Create(AOwner: TComponent);
begin
inherited;
FAutoCheck := [];
end;
procedure TTreeViewFQ.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do Style := Style or TVS_CHECKBOXES;
end;
procedure TTreeViewFQ.DoNodeCheckedChanged(Node: TTreeNode;
NewState: Boolean);
begin
if Assigned(FNodeCheckedChanged) then
FNodeCheckedChanged(Self,Node,NewState);
end;
function TTreeViewFQ.GetChecked(node : TTreeNode): boolean;
var
Item:TTvItem;
begin
Item.hItem := Node.ItemId;
Item.Mask := TVIF_STATE;
Item.StateMask := TVIS_STATEIMAGEMASK;
if not TreeView_GetItem(self.Handle,Item) then Abort;
Result := ((integer(Item.State) and INDEXTOSTATEIMAGEMASK(IIL_CHECKED)) =
INDEXTOSTATEIMAGEMASK(IIL_CHECKED));
end;
procedure TTreeViewFQ.SetChecked(Node: TTreeNode; value: Boolean);
var
Item:TTvItem;
begin
if value = GetChecked(Node) then exit;
Item.hItem := Node.ItemId;
Item.Mask := TVIF_STATE;
Item.StateMask := TVIS_STATEIMAGEMASK;
if not TreeView_GetItem(self.Handle, Item) then Exit;
if value then
Item.State := INDEXTOSTATEIMAGEMASK(IIL_CHECKED)
else
Item.State := INDEXTOSTATEIMAGEMASK(IIL_UNCHECKED);
TreeView_SetItem(self.Handle,Item);
end;
procedure TTreeViewFQ.WMKeyDown(var Message: TWMKeyDown);
var tn1,tn2:TTreeNode;
b:Boolean;
begin
if Message.CharCode <> VK_SPACE then
begin
inherited;
exit;
end;
b:=false;
tn1 := Selected;
if tn1 <> nil then
b := GetChecked(tn1);
inherited;
tn2 := Selected;
if (tn1 <> nil) and (tn2 <> nil) and (tn1 = tn2) and (b <> GetChecked(tn2)) then
DoNodeCheckedChanged(tn2,not b);
end;
procedure TTreeViewFQ.WMMD(var Message: TWMLButtonDown);
var tn1,tn2:TTreeNode;
b:Boolean;
begin
b:=false;
tn1 := GetNodeAt(Message.XPos,Message.YPos);
if tn1 <> nil then
b := GetChecked(tn1);
inherited;
tn2 := GetNodeAt(Message.XPos,Message.YPos);
if (tn1 <> nil) and (tn2 <> nil) and (tn1 = tn2) and (b <> GetChecked(tn2)) then
DoNodeCheckedChanged(tn2,not b);
end;
end.
← →
killer © (2004-06-14 18:22) [2]А можно еще сделать так, чтобы выбор был только на дочерних строках, а на основных ничего небыло?
← →
killer © (2004-06-14 19:37) [3]Mim1 Ну помоги плиз!!! А то я в написании компонентов не понимаю ничего.... а очень надо...
← →
Mim1 © (2004-06-14 21:11) [4]Чек боксы к сожелению отображаются для все элементов. Для чатси из них убрать этого нельзя. Зато можно эмульровать чек боксы за счет картинок. На www.torry.net есть куча подобных компонент.
← →
killer © (2004-06-14 23:08) [5]Mim1 И еще один вопросик.... в каком свойстве можно определить, какая строчка отмечена галочкой?
← →
Mim1 © (2004-06-15 01:46) [6]
> можно определить, какая строчка отмечена галочкой?
Например такTreeView1.GetChecked(TreeView1.Selected)
для выбранного.
← →
killer © (2004-06-16 13:54) [7]Mim1 У меня к тебе еще один вопросик возник.... а почему в низу ScrollBar(горизонтальный) появляется и как его убрать? :)
← →
Mim1 © (2004-06-16 17:37) [8]
> [7] killer © (16.06.04 13:54)
> Mim1 У меня к тебе еще один вопросик возник.... а почему
> в низу ScrollBar(горизонтальный) появляется и как его убрать?
> :)
Почему появляется не знаю :(, думаю что баг, убирать не стал, пользователю то все равно пофиг. Как его убрать польностью описано в faq"е на сатйе подгоретского, однако думается что надо его не совсем убрать а уменьшить до приемлимых размеров. Как это сделать незнаб :(
Извините если не смог помочь.
← →
_none_ © (2004-06-16 20:06) [9]http://www.delphi-gems.com/VirtualTreeview/VT.php
← →
killer © (2004-06-16 23:07) [10]А можно ли добавить свойство HorzScrollBar и установить в нем значение Visible=false?
← →
killer © (2004-06-17 17:58) [11]Т.е. я имею ввиду добавить свойство и отключить его... может поможет?
← →
killer © (2004-06-17 17:59) [12]_none_ Подскажи пожалуйста... а где там эти строки хранятся, в каком свойстве? А то я что-то не разберусь никак в этом Virtua TreeView...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c