Урок 40 - Панель быстрого запуска (часть 2/2)

   В этом уроке мы доработаем панель быстрого запуска и добавим функцию Drag-and-drop.

   Первым мы сделаем перетаскивание файлов. Кинем на форму компонент Image и объявим функцию после ключевого слова private в описании класса Form1:

	...
	
private
    { Private declarations }
    procedure WmDropFiles( var Msg: TWMDropFiles); message WM_DropFiles;

	...
   Она будет срабатывать когда из системы придет сообщение о перетаскивании какого-нибудь файла на форму программы. Нажимаем комбинацию клавиш Ctrl-Shift-C и появляется шаблон этой функции, заполняем его, но перед этим нужно еще создать глобальные переменные:
   CFileName: array[0..MAX_PATH] of Char; // Переменная с именем перетаскиваемого файла
   F: string; //Это для удобства
 
procedure TForm1.WmDropFiles(var Msg: TWMDropFiles);
var
  icon: hicon; //Иконка файла 
  iconindex: word;
begin
  try
    if DragQueryFile(Msg.Drop,0, CfileName, Max_Path)> 0 then //Если перетащили файл
    begin
      F:=CfileName; // Конвертируем Array of Char -> String
      Label1.Caption:=ExtractFileName(F); // Получаем имя файла из его полного пути
      Msg.Result:=0;
    end;
  finally
    DragFinish(Msg.Drop); //Говорим что приняли файл
  end;

  iconindex:=1; 
  //получаем картинку из файла
  Image1.Picture.Icon.Handle:= ExtractAssociatedIcon(HInstance, Pchar(F), iconIndex); 
  DrawIcon(Canvas.Handle,10,10,icon); //Рисуем картинку
end;
   Еще надо добавит в uses модуль ShellApi и в обработчик OnCreate добавит строчку:
	DragAcceptFiles(handle, true); // Включаем режим Drag-and-drop
end;
   Тогда все будет работать. Проверяем:

Drag-and-drop


Drag-and-drop


Drag-and-drop
:)


   Осталось только сделать запуск приложения по клику и убрать огранку формы. Кликаем 2 раза на Image и пишем код:
	ShellExecute(Form1.Handle, nil, Pchar(F), nil, nil, SW_RESTORE); //Запускаем программу (путь = F)
   У Form1 свойство BorderStyle на bsNone, убираем огранку, свойство AlphaBlend True и AlphaBlendValue например 150. А также сделаем нашу форму по верх всех окон, свойство FormStyle на fsStayOnTop.

   Вот что получилось:

Показана
Жмем первый раз
Спрятана
Жмем второй раз


Удачи!
Встретимся в следующем уроке!




Добавил(а): Programer Дата: 2013-05-23
Александр у вас лицензионная версия Delphi ?



Добавил(а): Admin Дата: 2013-05-23
А сам как думаешь?



Добавил(а): jinded Дата: 2013-05-26
Admin скажите, если у вас место где можно спрашивать по программе delphy 7, я бы тут спросил но это не совсем по уроку )



Добавил(а): Admin Дата: 2013-05-26
Skype: mafik2121_rus



Добавил(а): alexdudchenko Дата: 2013-05-29
Здравствуйте, не подскажите пожалуйста а как добавить несколько ярлыков в компонент Panel :?. Спасибо)



Добавил(а): Klesh Дата: 2013-05-29
Вместо переменной CFileName сделать массив размером 2 ([0..1]) и при перетаскивании смотреть, если 1 элемент массива свободен ( = ' ), то записать в первую ячейку путь и загрузить картинку в первый Image, если нет то во вторую и во второй Image. И добавить второй Image, в обработчике OnClick открывать программу из второй ячейки.



Добавил(а): igrok Дата: 2013-10-30
Делаю всё точно так же, даже windows такой же стоит), но при перетаскивании ничего не происходит. Перепроверил 3 раза.



Добавил(а): ventura69 Дата: 2015-03-17
А можно поподробнее о массиве на n компонентов? Пробовал создать массив с 6-го урока, но запутался... С института не дружу с массивами и матрицами, как это ни печально.



Добавил(а): ventura69 Дата: 2015-03-17
Все, до чего дотумкал: procedure TForm1.WmDropFiles(var Msg: TWMDropFiles); var icon: hicon; iconindex: word; begin try if DragQueryFile(Msg.Drop,0, mas (i), Max_Path)> 0 then begin var mas: array[1..2] of string; i:integer; begin mas[i]:=CfileName; for i:=1 to 2 do Msg.Result:=0; end; finally DragFinish(Msg.Drop); end; iconindex:=1; for i := 1 to 2 do ... и на этом все. Дальше мысль умерла...



Добавил(а): ventura69 Дата: 2016-09-22
Печально, что хорошая идея захирела: ни поддержки, ни помощи, ни развития нет... Я ведь азы кодинга с этого сайта брал. Вот, взгрустнулось, выбрал время и накидал небольшую панельку за час. Можно сказать: на коленке. Выкладываю для любознательных. Писал не ХЕ7. Код не оптимизировал (пусть будет дз для желающих ). https://yadi.sk/d/YAag_sDDvWujt это ссылочка на я-диск с архивом. В архиве и готовый проект есть, и исходники. Ковыряйте, кому интересно.


    No results found.
Отменить.