| 
| 
 | Вопрос # 175/ вопрос открыт / | 
 |  Уважаемые эксперты!
 У меня возникло 2 вопроса по интерфейсу моей проги:
 1. Как сделать так чтобы в TLIstview можно было таскать Items?
 2. Как поместить одно изображение (ну скажем 48 на 48 px) в TImageList так чтобы оно не разбивалось там на части и т.п.?
 
|  |   Вопрос задал: Александр-446 (статус: Посетитель)Вопрос отправлен: 25 ноября 2006, 10:31
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Denisss Здравствуйте, Александр!
 1. См. пример в приложении
 2. Установите свойства Height и Width = 48 (т.е. установите высоту и ширину Вашего изображения, тогда оно нарезаться не будет)
 
 Удачи!
 Приложение:Переключить в обычный режим unit Unit1; interface uses  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls; type  TForm1 = class(TForm)    ListBox1: TListBox;    procedure FormCreate(Sender: TObject);        procedure ListBox1MouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,      Y: Integer);    procedure ListBox1MouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);  private    { Private declarations }    fTemp: Integer;  public    { Public declarations }  end; var  Form1: TForm1; implementation {$R *.dfm} // From1.OnCreateprocedure TForm1.FormCreate(Sender: TObject);begin   fTemp:= -1;end; // ListBox1.OnMouseDownprocedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer); begin   fTemp:= ListBox1.ItemAtPos(Point(X, Y), True);end; // ListBox1.OnMouseMoveprocedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer); var  fNewTemp: Integer;begin   if (fTemp = -1) then    Exit;   fNewTemp:= ListBox1.ItemAtPos(Point(X, Y), True);    if (fNewTemp = fTemp) then    Exit;  with ListBox1.Items do     Move(fTemp, fNewTemp);   fTemp:= fNewTemp;end; // ListBox1.OnMouseUpprocedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer); begin  fTemp:= -1;end; end.
|  | Ответ отправил: Denisss (статус: 2-ой класс)Время отправки: 25 ноября 2006, 21:00
 Оценка за ответ: 4
 |  Ответ #2. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, Александр!Добавлю только, что TImageList не предназначен для хранения изображений разного размера. Если у заполненного ImageList'а поменять свойства Height/Width, все ранее добавленные изображения потеряются.
 
 Мини-форум вопросаВсего сообщений: 6; последнее сообщение — 29 ноября 2006, 16:49; участников в обсуждении: 4. 
|   | Евгений Козаченко (статус: 2-ой класс), 25 ноября 2006, 11:05 [#1]:Здравствуйте, Александр! Для того, чтобы можно было  добавлять картинки с бОльшим разрешением, чем по умолчанию, надо в свойствах компонента TImageList выставить свои значения Height и Width, соответствующие размерам картинки.
 |  
|   | Alex Van Glukhman (статус: 7-ой класс), 25 ноября 2006, 23:47 [#2]:To Deniss: А не проще ли использовать события OnDragDrop и OnDragOver вместо ловли кликов по крысе |  
|   | Denisss (статус: 2-ой класс), 26 ноября 2006, 21:52 [#3]:to Alex Van Glukhman: Не проще, а немного сложнее, т.к. там также появляются дополнительные переменные (типа Accept в OnDragOver).
 Кроме того, в вопросе присутствует вопрос о том, как можно таскать элементы. При использовании Drag'a изменяется вид курсора (этого в вопросе нет). Возможно, что кому-то это не понравится.
 
 Вопрос: Вам не все ли равно проще или нет? Если считаете, что проще, то приводите свой пример.
 |  
|   | Александр-446 (статус: Посетитель), 27 ноября 2006, 12:19 [#4]:Спасибо за ответы! 
 Но проблема в следующем:
 Мне нужно сделать что типа рабочего стола. Чтобы Item'ы в ListView (не ListBox) можно было таскать с одним лишь ограничением: нельзя накладывать их друг на друга. Не имеет значение какой при этом будет курсор. Вообще можно ли такое сделать на Delphi?
 
 А вот скриншот того что на данный момент у меня сейчас:
 http://savepic.ru/54669.jpg
 |  
|   | Александр-446 (статус: Посетитель), 29 ноября 2006, 16:49 [#6]:Большое спасибо! Уже что-то близкое к тому че я хотел. Правда мне не нужно какое-либо перемещение последующих Итемов. Нужно лишь сделать так чтобы когда пользователь хватал какой нибудь Итем мышей он мог переместить его куда-угодно. Только с условием того что он не будет его перемещать (не знаю как это лучще сказать) на другие Итемы и курсор менялся при этом на зачеркнутый круг (crNo). Если же он это сделал то никакого действия не должжно происходить.
 А вообще это должно быть что-то типа Рабочего стола без "автоматического выравнивания значков".
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |