powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Drag & drop в TDBGridEh
15 сообщений из 15, страница 1 из 1
Drag & drop в TDBGridEh
    #40074851
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тема старая и наверное уже были ответы на форуме, но не попался ответ нужный мне.

Хочу переместить с рабочего стола файлы на форму, но как поймать событие отпускания левой кнопки мыши только если под мышью конкретный DbgridEh?

Грубо говоря, мне нужно, что бы файлы переместились только если мышь находится на нужном мне гриде.

Заранее благодарю.
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40074854
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
гридов на форме несколько, но мне нужен конкретный
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40074863
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TForm1.WMDropFiles(var Msg: TWMDropFiles); срабатывает раньше TForm1.DBGridEh1MouseEnter(Sender: TObject);
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40074865
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyKNP,

А зачем ты у формы перекрываешь WMDropFiles? Перекрывай у грида.
https://stackoverflow.com/questions/16649442/how-do-i-allow-dragging-files-for-specific-controls-in-delphi
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40074871
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,
извини за тупость, но у меня не получилось воспроизвести тот пример, что в статье.
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40074875
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyKNP,

Ну держи немного говнокода:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
unit dbgdMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DBGridEhGrouping, ToolCtrlsEh, DBGridEhToolCtrls, DynVarsEh, EhLibVCL, GridsEh,
  DBAxisGridsEh, DBGridEh;

type
  TDropFilesEvent = procedure (Sender: TObject; DropHandle: THandle) of object;

  TDBGridEh = class(DBGridEh.TDBGridEh)
  strict private
    FAcceptDroppedFiles: Boolean;
    FOnDropFiles: TDropFilesEvent;
    procedure SetAcceptDroppedFiles(const Value: Boolean);
  protected
    procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES;
    procedure CreateWnd; override;
  public
    property AcceptDroppedFiles: Boolean read FAcceptDroppedFiles write SetAcceptDroppedFiles;
    property OnDropFiles: TDropFilesEvent read FOnDropFiles write FOnDropFiles;
  end;

  TForm1 = class(TForm)
    DBGridEh1: TDBGridEh;
    DBGridEh2: TDBGridEh;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    procedure DBGridEh2FilesDropped(Sender: TObject; DropHandle: THandle);
  end;

var
  Form1: TForm1;

implementation

uses
  Winapi.ShellAPI;

{$R *.dfm}

{ TDBGridEh }

procedure TDBGridEh.CreateWnd;
begin
  inherited;
  if AcceptDroppedFiles then
    DragAcceptFiles(Handle, TRUE);
end;

procedure TDBGridEh.SetAcceptDroppedFiles(const Value: Boolean);
begin
  if FAcceptDroppedFiles <> Value then
  begin
    FAcceptDroppedFiles := Value;
    if HandleAllocated then
      DragAcceptFiles(Handle, Value);
  end;
end;

procedure TDBGridEh.WMDropFiles(var Message: TWMDropFiles);
begin
  if Assigned(FOnDropFiles) then
    FOnDropFiles(Self, Message.Drop);
end;

{ TForm1 }

procedure TForm1.DBGridEh2FilesDropped(Sender: TObject; DropHandle: THandle);
var
  Count: Integer;
begin
  Count := DragQueryFile(DropHandle, $FFFFFFFF, nil, 0);
  ShowMessage(Format('%d файлов принято!', [Count]));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DBGridEh2.AcceptDroppedFiles := True;
  DBGridEh2.OnDropFiles := DBGridEh2FilesDropped;
end;

end.

...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40074887
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,
СУПЕР!!! Огромное СПС!!!
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40074895
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyKNP,

Только учти что WM_DROPFILES - это пример. Там ещё надо вернуть 0 в результате и DragFinish() вызвать.
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40074906
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,

я в инэте код нашёл и вот что получилось. Правильно так?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
{ TForm1 }
procedure TForm1.DBGridEh2FilesDropped(Sender: TObject; DropHandle: THandle);
var
  Count: Integer;

  DropH: HDROP; // дескриптор операции перетаскивания
  DroppedFileCount: Integer; // количество переданных файлов
  FileNameLength: Integer; // длина имени файла
  FileName: string; // буфер, принимающий имя файла
  I: Integer; // итератор для прохода по списку
  DropPoint: TPoint; // структура с координатами операции Drop
begin
  // Count := DragQueryFile(DropHandle, $FFFFFFFF, nil, 0);
  // ShowMessage(Format('%d файлов принято!', [Count]));
  inherited;
  // Сохраняем дескриптор
  DropH := DropHandle;
  try
    // Получаем количество переданных файлов
    DroppedFileCount := DragQueryFile(DropH, $FFFFFFFF, nil, 0);
    // Получаем имя каждого файла и обрабатываем его
    for I := 0 to Pred(DroppedFileCount) do
    begin
      // получаем размер буфера
      FileNameLength := DragQueryFile(DropH, I, nil, 0);
      // создаем буфер, который может принять в себя строку с именем файла
      // (Delphi добавляет терминирующий ноль автоматически в конец строки)
      SetLength(FileName, FileNameLength);
      // получаем имя файла
      DragQueryFile(DropH, I, PChar(FileName), FileNameLength + 1);
      // что-то делаем с данным именем (все зависит от вашей фантазии)
      // ... код обработки пишем здесь
    end;
    // Опционально: получаем координаты, по которым произошла операция Drop
    DragQueryPoint(DropH, DropPoint);
    // ... что-то делаем с данными координатами здесь
  finally
    // Финализация - разрушаем дескриптор
    // не используйте DropH после выполнения данного кода...
    DragFinish(DropH);
  end;

end;


...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40074918
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyKNP,

1. Зачем лишняя переменная DropH?..
2. В моём варианте ещё можно WMDropFiles доработать, на случай отсутствующего обработчика событий:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TDBGridEh.WMDropFiles(var Message: TWMDropFiles);
begin
  if Assigned(FOnDropFiles) then
    FOnDropFiles(Self, Message.Drop)
  else 
    DropFinish(Message.Drop);
end;
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40074942
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TDBGridEh.WMDropFiles(var Message: TWMDropFiles);
begin
  if Assigned(FOnDropFiles) then
    FOnDropFiles(Self, Message.Drop)
  else 
    DropFinish(Message.Drop);
end;



DropFinish(Message.Drop); это не ошибка? Ругается. Может правильно так ?

if Assigned(FOnDropFiles) then
FOnDropFiles(Self, Message.Drop)
else
DragFinish(Message.Drop);
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40074985
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyKNP,

Да, опечатался.
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40075384
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,

ещё один прикол, почему-то DragAndDrop не работает если тащить файлы из Outlook сразу в DBgridEh, а на Рабочий стол и потом и с Рабочего стола работает. :(
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40075391
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
03.06.2021 12:19, SergeyKNP пишет:
> ещё один прикол, почему-то DragAndDrop не работает если тащить файлы из Outlook сразу в DBgridEh, а на Рабочий стол и потом и с Рабочего стола работает. :(

когда тащишь из Outlook-а, их нет в файловой системе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Drag & drop в TDBGridEh
    #40075493
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там ole драгдроп надо юзать. Поддерживать соответствующие интерфейсы
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Drag & drop в TDBGridEh
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]