Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2009, 02:51   #1
FatumS
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 16
Восклицание Управление ярлыками

Подскажите кто нибудь как перетащить ярлык с рабочего стола на свою форму, причем чтобы он был полностью функционален. Очень нужно.
FatumS вне форума Ответить с цитированием
Старый 04.06.2009, 03:25   #2
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

Код:
{Так можно заставить окно принимать файлы, перетаскиваемые из проводника}
{ОБЯЗАТЕЛЬНО ПОМЕСТИТЕ В СЕКЦИЮ PRIVATE СТРОКИ

procedure CreateParams(var Params: TCreateParams); override;
procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES;
и не забудьте - ShellAPI поместить в uses}

procedure TForm1.CreateParams(var Params: TCreateParams);
begin

  inherited
    CreateParams(Params);
  {сделаем окно способным принимать файлы}
  Params.ExStyle := Params.ExStyle or WS_EX_ACCEPTFILES;
end;

procedure TForm1.WMDropFiles(var Message: TWMDropFiles);
var

  aFile: array[0..255] of Char;
  //FilesCount : Integer;
begin

  inherited;
  {так можно узнать сколько файлов перетягивается}
  // FilesCount := DragQueryFile(Message.drop, $FFFFFFFF, nil, 0);

  begin
    {здесь можно поставить цикл открытия всех перетаскиваемых файлов

    for N := 0 to FilesCount - 1 do DragQueryFile(Message.drop, N, aFile, 256);
    а в данном случае открывается только первый файл в списке}
    DragQueryFile(Message.drop, 0, aFile, 256);
    Memo1.Lines.LoadFromFile(aFile);
  end;
  DragFinish(Message.Drop);
end;

procedure TForm1.FormCreate(Sender: TObject); {Form1.OnCreate}
begin
  {сделаем окно неравнодушным к пролетающим над ним файлам}
  DragAcceptFiles(Handle, True);
а получив путь к ярлыку делай остальное.. что там тебе нада..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 04.06.2009, 04:46   #3
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Чуть подробнее:

Код:
uses
  ... ShellAPI;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
    procedure Drop(const FileName : String; X, Y : Integer);
  public
  end;

type                          // Новый тип для иконок на ТВОЕМ рабочем столе
  TLink = class(TImage)
  procedure Click(Sender: TObject);
  procedure DblClick(Sender: TObject);
  procedure SlowDblClick(Sender: TObject);
  procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  procedure ImageMouseDown(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  procedure ImageMouseUp(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  private
  public
    Way : String;       // Путь к файлу
  end;

var
  Form1: TForm1;
  Xdrop, Ydrop : Integer;            // Место броска
  Counter : Word = 0;                  // Счетчик кол=ва иконок
  Link : array [1..500] of TLink;     // Массив иконок

implementation

{$R *.DFM}

{
 Тут реализуешь методы TLink - клики, перемещения и т.д.
}

procedure TForm1.Drop(const FileName : String;  X, Y : Integer);
begin
  inc(Counter);
  Link[Counter] := TLink.Create(self);       // Создаем иконку
  Link[Counter].Parent := Self;
  Link[Counter].Width  := 32;
  Link[Counter].Height := 32;
  Link[Counter].Left := X -16;
  Link[Counter].Top := Y -16;
  Link[Counter].way := FileName;
  Link[Counter].Picture.LoadFromFile(...);   // Тут надо вытаскивать изображение - отдельная тема...
end;

procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
  PFileName: array [0..255] of Char;
begin
  try
    if DragQueryFile(Msg.Drop, 0, PFileName, MAX_PATH) > 0 then
    begin
      Msg.Result := 0;
      Drop(PFileName, Xdrop, Ydrop);
    end;
  finally
    DragFinish(Msg.Drop);
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  DragAcceptFiles(Handle, True);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Xdrop := X;
  Ydrop := Y;
end;

Последний раз редактировалось BaronTreep; 04.06.2009 в 04:52.
BaronTreep вне форума Ответить с цитированием
Старый 04.06.2009, 12:44   #4
FatumS
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 16
По умолчанию

Спасибо ребята

Ребята проблема в строке
TLink = class(TImage)
пишет ошибку но я все сделал идентично, что-то не пойму.
Может компонент нужен на форме какой-то?

Последний раз редактировалось Stilet; 11.06.2009 в 14:13.
FatumS вне форума Ответить с цитированием
Старый 06.06.2009, 18:35   #5
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

В uses должно быть по крайней мере:

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;

Тогда ОК.
BaronTreep вне форума Ответить с цитированием
Старый 07.06.2009, 01:29   #6
FatumS
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 16
По умолчанию

точно не хватало ExtCtrls, вписал теперь норм. Спасибо.

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

Последний раз редактировалось Stilet; 11.06.2009 в 14:13.
FatumS вне форума Ответить с цитированием
Старый 08.06.2009, 00:20   #7
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

На сайте delphisources есть статьи о FAQ:

http://www.delphisources.ru/pages/faq/all_articles.html

Там есть разде про ICO, да и вообще много чего.
BaronTreep вне форума Ответить с цитированием
Старый 08.06.2009, 15:27   #8
FatumS
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 16
По умолчанию

Спасибо буду искать.

Еще маленький вопросик, наверно уже надоел.Пишу
Цитата:
{ TLink }

procedure TLink.DblClick(Sender: TObject);
begin
Shellexecute(Handle,nil,...,nil,nil ,SW_RESTORE);
end;
вместо троиточия путь вытащин с ярлыка, но файл не открывается.

Последний раз редактировалось Stilet; 11.06.2009 в 14:14.
FatumS вне форума Ответить с цитированием
Старый 09.06.2009, 20:02   #9
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Shellexecute(Handle, 'open', WAY, '', nil , SW_SHOW);

Handle - Запущенное окно будет дочерним к Твоему.
'open' - на выполнение средствами ОС
WAY - полный путь
'' - параметры командной строки пустые
nil - без указания директории ибо указали полный путь
SW_SHOW - будет видимо
SW_HIDE - а так нет.

Работает? Вроде должно.
BaronTreep вне форума Ответить с цитированием
Старый 11.06.2009, 14:05   #10
FatumS
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 16
По умолчанию

Не пойму ничего, опять не работает две ошибки
[Error] : Undeclared identifier: 'Handle'
и типы в добавок не совпадают [Error] : Incompatible types: 'String' and 'PAnsiChar'. Что за чертовщина.
FatumS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Dockbar или плавающая панель с ярлыками Hronos13 Qt и кроссплатформенное программирование С/С++ 0 04.05.2009 12:19
управление транзакциями Ary БД в Delphi 11 30.03.2008 17:33
Управление по локалкЕ ZhekON Работа с сетью в Delphi 5 17.07.2007 09:04