![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Checked в TreeView
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)
> Не об этом ли речь?
а скролл тут причем?