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

Вниз

Скажите, пжалста, вот у меня есть TreeView в котором есть записи.   Найти похожие ветки 

 
kex86   (2002-09-16 02:25) [0]

Скажите, пжалста, вот у меня есть TreeView в котором есть записи. Как сделать так, чтобы можно было некоторые разделы брать в буфер обмена, вытаскивать оттуда в нужном месте и все это без потери связанных с разделами TObject"ами ?


 
Mystic   (2002-09-16 02:44) [1]

1) Восмользоваться API:
- Зарегистрировать свой формат в области обмена
- описать методы по преобразованию элемента TreeView в этот формат и обратно, желательно с совместимостью с другими стандартными форматами (тескт, dib, ...).
- описать процедуру вставки из Clipboard с перебором всех поддерживаемыз форматов
... См (MSDN->Platfotm SDK->Base services->Interprocess communications->Clipboard)

2) Реализовать компонент, который хранит информацию об элементе Clipboard и воспользоваться методами Clipboard.GetComponent, Clipbaord.SetComponent.


 
kex86   (2002-09-16 03:20) [2]

Хоть я мало что понял (не люблю API), спасибо :о)


 
Mystic   (2002-09-16 03:28) [3]

Используй второй путь, он без API


 
Mystic   (2002-09-16 04:15) [4]

Вот пример реализации второго пути (на форме AddBtn, CopyBtn, PasteBtn, Memo и TreeView):

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Clipbrd;

type
TMainForm = class(TForm)
TreeView: TTreeView;
Memo: TMemo;
AddBtn: TButton;
CopyBtn: TButton;
PasteBtn: TButton;
procedure FormCreate(Sender: TObject);
procedure TreeViewChange(Sender: TObject; Node: TTreeNode);
procedure AddBtnClick(Sender: TObject);
procedure CopyBtnClick(Sender: TObject);
procedure PasteBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm: TMainForm;

implementation

{$R *.dfm}

{ TTreeViewContainer }

type
TTreeViewContainer = class(TComponent)
private
FCaption: string;
FInfo: TStringList;
procedure SetInfo(const Value: TStringList);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Caption: string read FCaption write FCaption;
property Info: TStringList read FInfo write SetInfo;
end;

constructor TTreeViewContainer.Create(AOwner: TComponent);
begin
inherited;
FInfo := TStringList.Create;
end;

destructor TTreeViewContainer.Destroy;
begin
FInfo.Free;
inherited;
end;

procedure TTreeViewContainer.SetInfo(const Value: TStringList);
begin
FInfo.Assign(Value);
end;




procedure TMainForm.FormCreate(Sender: TObject);
var
S: TStringList;
begin
RegisterClass(TTreeViewContainer);
S := TStringList.Create;
S.Add("Testing sstring");
S.Add("Seconf testing string");
TreeView.Items.AddChildObject(nil, "First", S);
end;

procedure TMainForm.TreeViewChange(Sender: TObject; Node: TTreeNode);
begin
Memo.Lines.Assign(Node.Data);
end;

procedure TMainForm.AddBtnClick(Sender: TObject);
var
S: TStringList;
St: string;
I: Integer;
begin
S := TStringList.Create;
for I := 0 to Random(5)+1 do
S.Add("String" + IntToStr(Random(1000)));
St := "Item" + IntToStr(Random(1000));
with TreeView do
Items.AddChildObject(Selected, St, S);
end;

procedure TMainForm.CopyBtnClick(Sender: TObject);
var
Container: TTreeViewContainer;
Current: TTreeNode;
begin
Current := TreeView.Selected;
if not Assigned(Current) then Exit;
Container := TTreeViewContainer.Create(nil);
try
Container.Caption := Current.Text;
Container.Info := Current.Data;
Clipboard.SetComponent(Container);
finally
Container.Free;
end;
end;

procedure TMainForm.PasteBtnClick(Sender: TObject);
var
S: TStringList;
Container: TComponent;
begin
Container := Clipboard.GetComponent(nil, nil);
if not Assigned(Container) then Exit;
try
try
if not (Container is TTreeViewContainer) then Exit;
with Container as TTreeViewcontainer do
begin
S := TStringList.Create;
S.Assign(Info);
with TreeView do
Items.AddChildObject(Selected, Caption, S);
end;
except
end;
finally
Container.Free;
end;
end;

end.



 
kex86   (2002-09-18 01:15) [5]

Снова спасибо


 
kex86   (2002-09-20 01:23) [6]

Я попробовал твой вариант: в буфер обмена берется только выбранный раздел, а все его подраздела остаются :о(
Можно, конечно, брать по-очереди каждый подраздел, но это надо делать рекурсию, поэтому с большим количеством узлов и связанных с ними объектов система просто зависнет :о(((
Я еще не пойму, почему у TTreeNode есть метод cut, но нет copy и paste?



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

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

Наверх





Память: 0.47 MB
Время: 0.009 c
1-98145
Dark Hunter
2002-09-17 15:51
2002.09.30
Нечто с трудом понимаемое...


1-98180
liho26
2002-09-17 10:41
2002.09.30
Установка компонент в D-7


1-98119
id_privin
2002-09-19 19:20
2002.09.30
Может ли компилятор убивать среду.


14-98297
Dimka Maslov
2002-09-04 16:32
2002.09.30
Delphi 7


8-98240
RealDummy
2002-05-30 02:27
2002.09.30
Как среди множества точек найти похожую на образ фигуру?





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