Drag and Drop внутри своего приложения
Данный способ позволяет не погружаясь глубоко в создание компонент осуществить операцию "drag and drop" выделенного текста.
Создайте новый компонент (TMyMemo), наследовав его от TMemo. И объявите его следующим образом:
Code: |
type TMyMemo = class(TMemo) private FLastSelStart : Integer; FLastSelLength : Integer; procedure WMLButtonDown(var message: TWMLButtonDown); message WM_LBUTTONDOWN; published property LastSelStart : Integer read FLastSelStart write FLastSelStart; property LastSelLength : Integer read FLastSelLength write FLastSelLength; end; |
- Подробности
- Родительская категория: Перетаскивание объектов, Drag and Drop, Docking
- Категория: Drag and Drop внутри своего приложения
Возьмите форму, бросьте на нее панель, на onMouseDown панели прицепите код:
Code: |
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); {©Drkb v.3(2007): www.drkb.ru} begin ReleaseCapture; Panel1.Perform(WM_SYSCOMMAND, $F012, 0); end; |
Теперь в run-time панель можно таскать как в дизайне...
Взято с Vingrad.ru https://forum.vingrad.ru
- Подробности
- Родительская категория: Перетаскивание объектов, Drag and Drop, Docking
- Категория: Drag and Drop внутри своего приложения
Данный пример компонента и демонстрационный проект показывают простой путь осуществления операции "drag and drop" (перетащи и брось) между двумя полями различных табличных сеток.
Запустите Delphi 3 (с незначительными изменениями данный код может работать и в Delphi 1-2).
Активизируйте File|New|Unit. Скопируйте приведенный ниже модуль MyDBGrid во вновь созданный модуль. Сделайте File|Save As. Сохраните модуль как MyDBGrid.pas.
Выберите пункт меню Component|Install Component. Переключитесь на страницу Info New Package. Поместите MyDBGrid.pas в поле редактирования "Unit file name" (имя файла модуля). Назовите модуль MyPackage.dpk. Ответьте Yes на вопрос Delphi 3 о необходимости сборки и установки пакета. Нажмите OK на сообщение Delphi 3 о необходимости включения VCL30.DPL. После этого пакет будет собран и установлен. Теперь компонент TMyDBGrid будет отображен в Палитре Компонентов в группе "Samples". Закройте редактор пакетов и сохраните пакет.
- Подробности
- Родительская категория: Перетаскивание объектов, Drag and Drop, Docking
- Категория: Drag and Drop внутри своего приложения
В Object Inspector установите свойство dragmode у StringGrid в dmAutomatic.
Ниже приведён полный код:
- Подробности
- Родительская категория: Перетаскивание объектов, Drag and Drop, Docking
- Категория: Drag and Drop внутри своего приложения
Перетаскивание информации с помощью мыши стало стандартом для программ, работающих в Windows. Часто это бывает удобно и позволяет добиться более быстрой работы. В данной статье я постарался показать максимальное количество примеров использования данной технологии при разработке приложений в среде Delphi. Конечно, результат может быть достигнут различными путями, продемонстрированные приемы не являются единственными и, возможно, не всегда самые оптимальные, но вполне работоспособны, и указывают направление поиска. Надеюсь, что они побудят начинающих программистов к более широкому использованию Drag'n'Drop в своих программах, тем более что пользователи, особенно неопытные, быстро привыкают к перетаскивание и часто его применяют.
Проще всего делать Drag из тех компонентов, для которых однозначно ясно, что именно перетаскивать. Для этого устанавливаем у источника DragMode = dmAutomatic, а у приемника пишем обработчики событий OnDragOver - разрешение на прием, и OnDragDrop - действия, производимые при окончании перетаскивания.
- Подробности
- Родительская категория: Перетаскивание объектов, Drag and Drop, Docking
- Категория: Drag and Drop внутри своего приложения
Code: |
// In the PageControl's OnMouseDown event handler:
procedure TForm1.PageControl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PageControl1.BeginDrag(False); end;
// In the PageControl's OnDragDrop event handler:
procedure TForm1.PageControl1DragDrop(Sender, Source: TObject; X, Y: Integer); const TCM_GETITEMRECT = $130A; var i: Integer; r: TRect; begin if not (Sender is TPageControl) then Exit; with PageControl1 do begin for i := 0 to PageCount - 1 do begin Perform(TCM_GETITEMRECT, i, lParam(@r)); if PtInRect(r, Point(X, Y)) then begin if i <> ActivePage.PageIndex then ActivePage.PageIndex := i; Exit; end; end; end; end;
// In the PageControl's OnDragOver event handler:
procedure TForm1.PageControl1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if Sender is TPageControl then Accept := True; end; |
Взято с https://delphiworld.narod.ru
- Подробности
- Родительская категория: Перетаскивание объектов, Drag and Drop, Docking
- Категория: Drag and Drop внутри своего приложения
Code: |
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if (y < 15) then {On the upper edge - should scroll up } SendMessage(TreeView1.Handle, WM_VSCROLL, SB_LINEUP, 0) else if (TreeView1.Height - y < 15) then { On the lower edge - should scroll down } SendMessage(TreeView1.Handle, WM_VSCROLL, SB_LINEDOWN, 0); end; |
- Подробности
- Родительская категория: Перетаскивание объектов, Drag and Drop, Docking
- Категория: Drag and Drop внутри своего приложения
Страница 2 из 2