Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 183

/ вопрос открыт /

Здраствуйсте ув. эксперты!
Я так и не дождался ответа в вопросе 175. Поэтому задам его здесь еще раз.
Короче: как на delphi сделать что то типа рабочего стола в Windows? Главное чтобы значки можно было двигать "повсюду".

ЗЫ: Я пробовал через ListView но у меня не получилось

Александр-446 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Александр-446 (статус: Посетитель)
Вопрос отправлен: 30 ноября 2006, 17:30
Состояние вопроса: открыт, ответов: 3.

Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Александр!
Что Вам мешает написать свой класс от TGraphicControl, содержащий в себе все нужные Вам данные (иконка, подпись и все остальное) и реализующий в себе методы выделения, перетаскивания и рисования. Потом пишите потомка, например от TPanel - хозяина всех этих значков. Он в свою очередь, должен содержать в себе методы выделения (с помощью клавиатуры), сохранения положения всех значков и т.д.

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 1 декабря 2006, 08:25
Оценка за ответ: 4

Ответ #2. Отвечает эксперт: min@y™

Лень читать хэлп по TListItem? Ладно, я сделал это за тебя. Вот тебе пример, как таскать мышой иконки по ListView в режиме vsIcon (см. приложение). Я такого никогда не делал, но поиск нужной инфы в хэлпе + написание примера заняло у меня 10 минут.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ImgList, ComCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. ListView1: TListView;
  12. ImageList1: TImageList;
  13. procedure ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
  14. procedure ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
  15. State: TDragState; var Accept: Boolean);
  16. procedure FormCreate(Sender: TObject);
  17. private
  18. { Private declarations }
  19. public
  20. { Public declarations }
  21. end;
  22.  
  23. var
  24. Form1: TForm1;
  25.  
  26. implementation
  27.  
  28. {$R *.dfm}
  29.  
  30. procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
  31. var
  32. Item: TListItem;
  33. begin
  34. Item:= ListView1.Selected;
  35. if Assigned(Item)
  36. then Item.Position:= Point(X, Y);
  37. end;
  38.  
  39. procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
  40. State: TDragState; var Accept: Boolean);
  41. begin
  42. Accept:= Sender = Source;
  43. end;
  44.  
  45. procedure TForm1.FormCreate(Sender: TObject);
  46. begin
  47. ListView1.DragMode:= dmAutomatic;
  48. end;
  49.  
  50. end.
  51.  


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 1 декабря 2006, 08:56
Оценка за ответ: 4

Комментарий к оценке: Спасибо. Но разговаривать все же надо по вежливей.

Ответ #3. Отвечает эксперт: Denisss

Здравствуйте, Александр!

Небольшое дополнение к ответу min@y™. См. приложение.

Удачи!

Приложение:
  1. procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
  2. State: TDragState; var Accept: Boolean);
  3. begin
  4. Accept:= ((Sender = Source) and (ListView1.GetItemAt(X, Y) = nil));
  5. end;


Ответ отправил: Denisss (статус: 2-ой класс)
Время отправки: 1 декабря 2006, 20:45
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 1 декабря 2006, 15:50; участников в обсуждении: 1.
Александр-446

Александр-446 (статус: Посетитель), 1 декабря 2006, 15:50 [#1]:

Да но как сделать так чтобы невозможно было накладывать Итемы друг на друга?

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:32
Выполнено за 0.02 сек.