|
Вопрос # 183/ вопрос открыт / |
|
Здраствуйсте ув. эксперты!
Я так и не дождался ответа в вопросе 175. Поэтому задам его здесь еще раз.
Короче: как на delphi сделать что то типа рабочего стола в Windows? Главное чтобы значки можно было двигать "повсюду".
ЗЫ: Я пробовал через ListView но у меня не получилось
 |
Вопрос задал: Александр-446 (статус: Посетитель)
Вопрос отправлен: 30 ноября 2006, 17:30
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, Александр!
Что Вам мешает написать свой класс от TGraphicControl, содержащий в себе все нужные Вам данные (иконка, подпись и все остальное) и реализующий в себе методы выделения, перетаскивания и рисования. Потом пишите потомка, например от TPanel - хозяина всех этих значков. Он в свою очередь, должен содержать в себе методы выделения (с помощью клавиатуры), сохранения положения всех значков и т.д.
Ответ #2. Отвечает эксперт: min@y™
Лень читать хэлп по TListItem? Ладно, я сделал это за тебя. Вот тебе пример, как таскать мышой иконки по ListView в режиме vsIcon (см. приложение). Я такого никогда не делал, но поиск нужной инфы в хэлпе + написание примера заняло у меня 10 минут.
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ImgList, ComCtrls;
-
- type
- TForm1 = class(TForm)
- ListView1: TListView;
- ImageList1: TImageList;
- procedure ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
- procedure ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
- State: TDragState; var Accept: Boolean);
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
- var
- Item: TListItem;
- begin
- Item:= ListView1.Selected;
- if Assigned(Item)
- then Item.Position:= Point(X, Y);
- end;
-
- procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
- State: TDragState; var Accept: Boolean);
- begin
- Accept:= Sender = Source;
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- ListView1.DragMode:= dmAutomatic;
- end;
-
- end.
-
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 1 декабря 2006, 08:56
Оценка за ответ: 4
Комментарий к оценке: Спасибо. Но разговаривать все же надо по вежливей.
|
Ответ #3. Отвечает эксперт: Denisss
Здравствуйте, Александр!
Небольшое дополнение к ответу min@y™. См. приложение.
Удачи!
Приложение: Переключить в обычный режим- procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
- State: TDragState; var Accept: Boolean);
- begin
- Accept:= ((Sender = Source) and (ListView1.GetItemAt(X, Y) = nil));
- end;
 |
Ответ отправил: Denisss (статус: 2-ой класс)
Время отправки: 1 декабря 2006, 20:45
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 1 декабря 2006, 15:50; участников в обсуждении: 1.
|
Александр-446 (статус: Посетитель), 1 декабря 2006, 15:50 [#1]:
Да но как сделать так чтобы невозможно было накладывать Итемы друг на друга?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|