|
Вопрос # 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.OnCreate
- procedure TForm1.FormCreate(Sender: TObject);
- begin
-
- fTemp:= -1;
- end;
-
- // ListBox1.OnMouseDown
- procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
-
- begin
-
- fTemp:= ListBox1.ItemAtPos(Point(X, Y), True);
- end;
-
- // ListBox1.OnMouseMove
- procedure 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.OnMouseUp
- procedure 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). Если же он это сделал то никакого действия не должжно происходить.
А вообще это должно быть что-то типа Рабочего стола без "автоматического выравнивания значков".
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|