30.05.2013, 12:43
|
#1
|
Пользователь
Регистрация: 08.05.2013
Сообщений: 10
|
Delphi ,немогу исправить ошибку в коде
Программа - панель , куда можно добавлять ярлыки , запускать и удалять их.
Цитата:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, ExtCtrls,
ShellAPI, StdCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ImageClick(Sender: TObject);
procedure WMDropFiles(var Msg: TMessage); message wm_DropFiles;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
MyLabelIndex: integer=0; //Порядковый номер ярлыка на форме
MyLabelIcon: array[1..100] of TImage; //массив для картинок
MyLabelPutch: array[1..100] of string; //массив для полного имени файла
MyLabelName: array[1..100] of string; //массив для коротких имен файлов
PosX,
PosY,
StepImg //размер на сколько будет сдвигаться координата по X и по Y
:integer;
implementation
{$R *.dfm}
//функция запуска приложений
procedure RunFiles(putch_name:string); //в функцию передаем имя файла
var
HANDLES : HWND;
begin
HANDLES:=FindWindow('TForm1', 'Form1');
//при нажатии на кнопку мыши пробуем открыть приложение соцеируемое с нашей катинкой
ShellExecute( HANDLES, 'open', PChar(putch_name), nil, nil, SW_SHOWNORMAL);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
PosX:=0; //тукущая позиция по Х 0
PosY:=0; //тукущая позиция по У 0
StepImg:=0; //считываем размер заданной эталонной картинки
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// закрываем поток контроля забрасывания на форму файлов
DragAcceptFiles(Handle, False);
end;
function ShortNameFile(NameFile:string):stri ng; //короткое имя файла
var
L:integer; //длинна всей строки
tmpString:string; //результат найденного имени
begin
if length(NameFile)=3 then ShortNameFile:= NameFile //есди это имя диска то ничего с ним не делаем
else
begin
L:= length(NameFile); //ставим курсор на последний символ
//ищем короткое имя файла до первого символа \
while NameFile[L]<>'\' do
begin
tmpString:=NameFile[L]+tmpString; //прибавляем символ к результату
L:=L-1; //сдвигаем курсор на 1 позицию назаl
end;
ShortNameFile:=tmpString;
end;
end;
procedure TForm1.WMDropFiles(var Msg: TMessage);
var
MyNameFile:array[0 .. 256] of Char; //имя моего файла заброшенного на форму
Name:string; //просто имя самого файла
infoFile:SHFILEINFO; //сбда будем получать информацию о файлике
flag:Cardinal; //размер иконки
begin
MyLabelIndex:=MyLabelIndex+1; //если скинули файл то считаем каунтером
if MyLabelIndex<100 then //если вдруг накидают 100 ярлыков то это выйдет за пределы массива поэтому
begin
{ Получаем имя файла }
DragQueryFile( THandle(Msg.WParam),0, { это номер файла } MyNameFile,SizeOf(MyNameFile) ) ;
Name:=LowerCase(StrPas(MyNameFile)) ; //имя файла в стрингах
//настраиваем внешний вид
flag:=SHGFI_ICON; //параметры отображения картинки
flag:=flag or SHGFI_LARGEICON; //SHGFI_SMALLICON параметры отображения картинки если хочеться большой заначек то SHGFI_LARGEICON
SHGetFileInfo(MyNameFile,0,infoFile ,SizeOf(infoFile),flag); //получаем ифномацию о фейле
//Image1.Picture.Icon.Handle:= infoFile.hIcon; //загружаем иконку файла в image
// MyLabelIcon[MyLabelIndex] :=TImage.Create(Panel1) ; //создаем картинку на панели
//определяем для нее параметры
with MyLabelIcon[MyLabelIndex].Create(Panel1) do
begin
Top:=0; //по умолчанию в одну строку
Left:=PosX; //задаем параметр координаты по Х
Visible:=true; //отображаем на всякий случа
AutoSize:=true; //задаем авторазмер картинки
Picture.Icon.Handle:=infoFile.hIcon ; //загружаем иконку файла в image
hint:=ShortNameFile(Name); //задаем подпись хинта
ShowHint:=true; //показываем хинт
// OnClick:=ImageClick; //задаем собиытие
Parent:=Panel1; //панель
end;
//MyLabelIcon[MyLabelIndex].OnClick:=Panel1Click(Sender: TObject);
//сохраняем путь к файлу в отдельным массив собственно из него и будем понимать какой файл запускать
MyLabelPutch[MyLabelIndex]:= Name; //сохраняем длинное имя картинки
MyLabelName[MyLabelIndex]:=ShortNameFile(Name); //задаем короткое имя в массив чтобы знать на каку кнопку нажали
StepImg:= MyLabelIcon[MyLabelIndex].Width+3; //сдвигаем картинку на размер
PosX:=PosX + StepImg; //позиция сдвигаеться на размер картинки
end;
end;
procedure TForm1.ImageClick(Sender: TObject);
begin
ShowMessage(' Click!!!');
end;
end.
|
|
|
|