Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2009, 17:43   #1
SergGhost
Пользователь
 
Аватар для SergGhost
 
Регистрация: 25.09.2008
Сообщений: 39
По умолчанию checkbox in ShellTreeView

Всем привет. Мне необходимо создать что-то типа дерева каталогов, где пользователь мог выделять интересующие его папки для дальнейшего их копирования. Для этого решил использовать компанент ShellTreeView и засунуть в него Checkbox - это делаю с помощью следующего кода:
procedure TForm1.FormCreate(Sender: TObject);
var
dwStyle : DWord;
begin
dwStyle := GetWindowLong(ShellTreeView1.Handle ,GWL_STYLE);
dwStyle := dwStyle or OBM_CHECKBOXES;
SetWindowLong(ShellTreeView1.Handle ,GWL_STYLE,dwStyle);
end;
К сожалению так и не смог разобратся, как определить, что выбрал пользователь? подскажите пожалуйста, если возможно, кодом.
P.S. Не забудь жамкнуть на весы.
Хотя и сладостен азарт по сразу двум идти дорогам, нельзя одной колодой карт играть и с дьяволом и с богом.
SergGhost вне форума Ответить с цитированием
Старый 31.08.2009, 17:51   #2
havok
Пользователь
 
Аватар для havok
 
Регистрация: 24.08.2009
Сообщений: 42
По умолчанию

тут оригинал правда на каком-то восточном
Код:
type

    TTreeNodeCheckState = ( csNone, csUnChecked, csChecked );

procedure TForm1.Button1Click(Sender: TObject);
const
    AStateText: array [TTreeNodeCheckState] of String =
    ( 'None', 'UnChecked', 'Checked' );
var
    ANode: TTreeNode;
    ATVItem: TTVItem;
    AState: TTreeNodeCheckState;
begin
    ANode := TreeView1.Selected;
    if not Assigned( ANode ) then Exit;
    with ATVItem do
    begin
    mask := TVIF_HANDLE or TVIF_STATE;
    hItem := ANode.ItemId;
    stateMask := TVIS_STATEIMAGEMASK;
    end;
    TreeView_GetItem( TreeView1.Handle, ATVItem );
    AState := TTreeNodeCheckState( ATVItem.State shr 12 );
    Label1.Caption := Format( 'The Node Is "%s"', [ANode.Text] );
    Label2.Caption := Format( 'Check State Is "%s"', [AStateText[AState]] );
end;
что-то вроде
или вот это
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
aNode: TTreeNode;
begin
 for i:=0 to  ShellTreeView1.Items.Count-1 do
   if IsNodeChecked(ShellTreeView1.Items[i]) then
     ShowMessage(ShellTreeView1.Items[i].Text);

end;

function TForm1.IsNodeChecked(aNode :TTreeNode) :Boolean;
var
  aTVItem :TTVItem;
begin
  with aTVItem do begin
    Mask  := TVIF_STATE;
    hItem := aNode.ItemId;
  end;
  TreeView_GetItem(aNode.TreeView.Handle, aTVItem);
  result := (aTVItem.State and $2000) = $2000;
end;
icq 580047636 You're WELCOME!!!

Последний раз редактировалось havok; 31.08.2009 в 17:55.
havok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
фильтр для ShellTreeView Aндрей Компоненты Delphi 1 21.05.2009 13:18
ShellComboBox и ShellTreeView!!! $T@LKER Общие вопросы Delphi 1 17.05.2009 17:25
Shelltreeview - как сделать.... VenMaster Компоненты Delphi 2 08.06.2008 14:46
Порблема с SHelltreeview VenMaster Компоненты Delphi 6 29.05.2008 16:21
вопрос по shelltreeview VenMaster Компоненты Delphi 4 26.05.2008 16:23