Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Вниз

Checked в TreeView   Найти похожие ветки 

 
Matveih1 ©   (2008-06-27 11:45) [0]

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


 
Palladin ©   (2008-06-27 11:46) [1]

Скачать компонент.


 
clickmaker ©   (2008-06-27 11:48) [2]

в принципе, через StateImages можно попробовать


 
Ega23 ©   (2008-06-27 11:52) [3]


> в принципе, через StateImages можно попробовать


ИМХО, лучше через Overlay


 
clickmaker ©   (2008-06-27 11:54) [4]

> лучше через Overlay

разве? Это же перекроет основные иконки, нет?
а State - будет слева


 
Ega23 ©   (2008-06-27 11:57) [5]


> разве? Это же перекроет основные иконки, нет?


Он не перекрывает, а накладывает.

Короче, зависит от того, есть ли у него вообще иконки...  :)


 
Milk   (2008-06-27 12:03) [6]

Не об этом ли речь?
SetWindowLong(TreeView1.Handle,GWL_STYLE,GetWindowLong(TreeView1.Handle,GW L_STYLE) or WM_VSCROLL);


 
Matveih1 ©   (2008-06-27 12:06) [7]


> Скачать компонент.

Какой и где скачать?
> Короче, зависит от того, есть ли у него вообще иконки...
>   :)

Не использовал. А можно пример


 
clickmaker ©   (2008-06-27 12:08) [8]

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

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


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


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

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


 
clickmaker ©   (2008-06-27 12:21) [10]

> [9] Milk   (27.06.08 12:12)

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


 
Matveih1 ©   (2008-06-27 12:28) [11]

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


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

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


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


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


 
Rouse_ ©   (2008-06-27 12:35) [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:41) [15]


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

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


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


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

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


 
{RASkov} ©   (2008-06-27 12:47) [17]

> [13] Milk   (27.06.08 12:31)

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


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


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

:)


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

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

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


 
{RASkov} ©   (2008-06-27 13:06) [20]

> [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 :)


 
Matveih1 ©   (2008-06-27 13:35) [21]

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


 
clickmaker ©   (2008-06-27 13:41) [22]

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


 
Rouse_ ©   (2008-06-27 13:45) [23]


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

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


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

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


 
Matveih1 ©   (2008-06-27 13:49) [24]

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


 
Matveih1 ©   (2008-06-27 13:54) [25]

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


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


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

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


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

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.007 c
2-1214220645
ciborg
2008-06-23 15:30
2008.07.27
Сбор информации о системе


2-1212824205
Genty
2008-06-07 11:36
2008.07.27
Как передать текстовые данные с одного компьютера на другой?


15-1213006023
@!!ex
2008-06-09 14:07
2008.07.27
У меня есть матричный принтер...


2-1214316019
Maxx
2008-06-24 18:00
2008.07.27
EAccessViolation


2-1214313276
implementation
2008-06-24 17:14
2008.07.27
Двойной клик по фиксированной ячейке в TStringGrid.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский