Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 09.07.2012, 08:52
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

Цитата:
Сообщение от M.A.D.M.A.N.
Можно InterfacedObject сделать и если ссылки на объекты будут отваливаться - то и объекты будут аннигилироваться.
можешь минимальный проект воспроизвести?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #17  
Старый 09.07.2012, 10:26
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Как удалять ...
В TreeView есть событие OnDeletion(Sender: TObject; Node: TTreeNode);
Вот у этого Node и надо удалять Data
Ответить с цитированием
  #18  
Старый 09.07.2012, 11:19
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от icWasya
событие OnDeletion(Sender: TObject; Node: TTreeNode);
а вот с этим согласен
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #19  
Старый 09.07.2012, 12:58
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от NumLock
можешь минимальный проект воспроизвести?
Ну как-то так:
Код:
  IFoo = interface
  ['{57B2E8F3-D285-4A43-BCDD-6EFECD76D654}']
  end;

  TFoo = class(TInterfacedObject, IFoo)
  private
    FData: TObject;
  public
    constructor Create(const aObj: TObject);
    destructor Destroy; override;
  end;
{ TFoo }

constructor TFoo.Create(const aObj: TObject);
begin
  FData := aObj;
end;

destructor TFoo.Destroy;
begin
  FreeAndNil(FData);
  inherited;
end;

function PenisCanis(const aData: TObject): IFoo;
begin
  Result := TFoo.Create(aData);
end;

интерфейсы можно в листик добавлять.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #20  
Старый 09.07.2012, 13:53
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
интерфейсы можно в листик добавлять
типа так:
Код:
ListBox1.Items.AddObject('1', TObject(PenisCanis(nil)));
?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #21  
Старый 09.07.2012, 15:05
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от NumLock
типа так:
?
TInterfaceList
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #22  
Старый 09.07.2012, 15:27
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
TInterfaceList
ну по сути это будет выглядеть как http://www.delphisources.ru/forum/sh...0&postcount=14
Цитата:
Создаешь эеземпляр класса TObjectList с Owned := True. При добавлении в дерево, объект также добавляешь в этот список.
т.е. создается какой-то дополнительный список, при удалении которого будут удаляться объекты этого списка. хотя по идее уже есть такой список у самого TreeView.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #23  
Старый 09.07.2012, 16:22
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Этот метод еще хорош тем, что можно не использовать try finally при применении его в локальных методах, особенно удобно если с динамической памятью работаешь, чтоб TMemoryStream в finally не пришибать.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #24  
Старый 30.08.2012, 10:05
tupetoner tupetoner вне форума
Прохожий
 
Регистрация: 30.08.2012
Сообщения: 15
Репутация: 10
По умолчанию

Здравствуйте, а как сделать так что бы можно было мышкой любой элемент Treeview перемещать из одного узла в другой???
Ответить с цитированием
  #25  
Старый 30.08.2012, 10:11
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от tupetoner
Здравствуйте, а как сделать так что бы можно было мышкой любой элемент Treeview перемещать из одного узла в другой???
Тебе надо было бы создать новую тему.
По TreeView - смотри свойства DragKind, DragMode и события OnStarDrag, OnEndDrag, OnDragDrop, OnDragOver.
Ответить с цитированием
  #26  
Старый 30.08.2012, 12:48
tupetoner tupetoner вне форума
Прохожий
 
Регистрация: 30.08.2012
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Тебе надо было бы создать новую тему.
По TreeView - смотри свойства DragKind, DragMode и события OnStarDrag, OnEndDrag, OnDragDrop, OnDragOver.
спасибо за подсказку, а вот что писать в этих событиях, непонятно...
Ответить с цитированием
  #27  
Старый 30.08.2012, 12:55
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от tupetoner
спасибо за подсказку, а вот что писать в этих событиях, непонятно...
В свойстве DragMode у компонента TTreeView ставь dmAutomatic. А в его обработчиках примерно такой код:
Код:
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
  TreeView: TTreeView;
  SourceNode, TargetNode: TTreeNode;
begin
  Accept := False;
  if Source is TTreeView then
  begin
    TreeView := Source as TTreeView;
    SourceNode := TreeView.Selected;
    if SourceNode <> nil then
    begin
      TargetNode := TreeView.GetNodeAt(X, Y);
      if TargetNode = nil then
      begin
        Accept := htNowhere in TreeView.GetHitTestInfoAt(X, Y);
      end else
      begin
        Accept := True;
        while TargetNode <> nil do
        begin
          if TargetNode = SourceNode then
          begin
            Accept := False;
            Break
          end;
          TargetNode := TargetNode.Parent;
        end;
      end;
    end;
  end;
end;

procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  TreeView: TTreeView;
  SourceNode, TargetNode: TTreeNode;
begin
  if Source is TTreeView then
  begin
    TreeView := Source as TTreeView;
    SourceNode := TreeView.Selected;
    TargetNode := TreeView.GetNodeAt(X, Y);

    if SourceNode <> nil then SourceNode.MoveTo(TargetNode, naAddChild);
  end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
tupetoner (30.08.2012)
  #28  
Старый 01.09.2012, 07:36
tupetoner tupetoner вне форума
Прохожий
 
Регистрация: 30.08.2012
Сообщения: 15
Репутация: 10
По умолчанию

можно ли сделать что бы узел дерева одного приложения перетянуть мышкой в любой узел дерева другого приложения???
Ответить с цитированием
  #29  
Старый 01.09.2012, 10:58
tupetoner tupetoner вне форума
Прохожий
 
Регистрация: 30.08.2012
Сообщения: 15
Репутация: 10
По умолчанию

poli-smen, а как сделать что бы по двойному щелчку мыши на определенном узле менялся размер шрифта, жирность и цвет узла и при повторном двойном щелчке на этом узле эти параметры возвращались к исходным???
Ответить с цитированием
  #30  
Старый 01.09.2012, 11:44
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от tupetoner
можно ли сделать что бы узел дерева одного приложения перетянуть мышкой в любой узел дерева другого приложения???
В общем случае это нельзя сделать, но если сильно постараться, то можно.
Смотри например такие компоненты: http://melander.dk/delphi/dragdrop

Цитата:
Сообщение от tupetoner
poli-smen, а как сделать что бы по двойному щелчку мыши на определенном узле менялся размер шрифта, жирность и цвет узла и при повторном двойном щелчке на этом узле эти параметры возвращались к исходным???
TTreeView не поддерживает рисование узлов разным шрифтом. Если тебе это нужно, то прийдётся узлы рисовать самому в обработчике OnCustomDrawItem
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
tupetoner (01.09.2012)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:52.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter