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

Вниз

DragOver в Treeview   Найти похожие ветки 

 
Miralex   (2003-08-18 13:59) [0]

У меня есть Treeview где отображаються папки и файлы
(различаються они по Node.Data если 1 то папка если 2 то файл)

Хочу сделать чтоб в дереве можно было перемещать только файлы
(запретить перемещение папок)

Пишу:
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if integer((Sender as TtreeNode).Data)=2 then Accept:=true else Accept:=false;
end;

И при попытке перетащить чтото угодно вылетаю с ошибкой:
"Project project2.exe raised exception class EInvalidCast with message Invalid Class typecast"

Обьясните мне пожалуйста что я сделал не так?


 
Семен Сорокин   (2003-08-18 14:07) [1]

в твоем случае Sender - TreeView, тебе в TreeView по X и Y надо вытаскивать TtreeNode, а в нем уже смотреть Data


 
Miralex   (2003-08-18 14:11) [2]

а можно поподробнее как ето сделать?
(Желательно с примерчиком)


 
Семен Сорокин   (2003-08-18 14:13) [3]

procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
_node: TTreeNode;
begin
_node := TTreeView(Sender).GetNodeAt(X, Y);
if Assigned(_node) then
Accept := integer(_node.Data) = 2
end;


 
Miralex   (2003-08-18 14:33) [4]

Спасибо заработало!
тока чтото я не вкурил что такое Assigned(_node)
и что такое Accept := integer(_node.Data) = 2
Accept ето булевая операция а там integer


 
Семен Сорокин   (2003-08-18 14:37) [5]

Assigned(_node) тоже самое что и _node <> nil, тока крутые дядьки используют :)))
Accept := integer(_node.Data) = 2 аналогично твоему
if integer(_node.Data)=2 then Accept:=true else Accept:=false;


 
Miralex   (2003-08-18 14:42) [6]

оки
спасибо за разьяснения!
тока тут чучуть не то:
По твоему способу получилось что можно перетаскивать все, но кидать на папку нельзя!
а мне надо чтоб можно было перетаскивать тока файлы а кидать можно было б на все!
(менял Sender на Source - не помогает)


 
Семен Сорокин   (2003-08-18 15:08) [7]

Miralex © (18.08.03 14:42) [6]
тогда ставь обработку на onMouseDown:
procedure TMainForm.TreeView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (Button = mbLeft) and (Shift = [ssLeft]) and Assigned(TreeView1.Selected) and
(integer(TreeView1.Selected.Data) = 2) then
TreeView1.BeginDrag(false)
end;

а в OnDragOver Access тогда всегда true


 
Miralex   (2003-08-18 15:17) [8]

я сделал чуток подругому и хотел бы узнать у мастеров правильно ли на 100% ???

В StartDrag я вписал:
procedure TForm1.TreeView1StartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
if integer(Treeview1.Selected.Data) = 2 then AcceptDrag:= true else AcceptDrag:=false;
end;

В DragOver вписал:
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if AcceptDrag then Accept:=true else Accept:=false;
end;

Ведь по сути дела самым первым появляеться событие OnStartDrag



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

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

Наверх





Память: 0.46 MB
Время: 0.009 c
3-1347
paxer
2003-08-06 14:50
2003.09.01
Хран. проц.: обратится к столбцу таблицы по зад. в парам. имени?


4-1710
andre
2003-06-21 02:24
2003.09.01
таймер


3-1335
explorer
2003-08-06 08:37
2003.09.01
Картинки в БД


7-1687
Alish
2003-06-12 02:43
2003.09.01
Передача файлов ч/з com порт


1-1432
opoloXAI
2003-08-18 10:10
2003.09.01
RichEdit.Lines.Count > 460





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский