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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2013, 12:43   #1
siemenscx75
Пользователь
 
Регистрация: 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):string; //короткое имя файла
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.
Выдаёт ошибку , помогите.

Последний раз редактировалось Stilet; 30.05.2013 в 21:25. Причина: добавил суть проблемы.
siemenscx75 вне форума Ответить с цитированием
Старый 30.05.2013, 15:04   #2
grandmixer
Пользователь
 
Аватар для grandmixer
 
Регистрация: 30.10.2012
Сообщений: 31
По умолчанию

скинь лучше ссылку на архив с проектом что ли...
grandmixer вне форума Ответить с цитированием
Старый 30.05.2013, 15:30   #3
Pearl777
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 171
По умолчанию

Что за ошибку выдает?
Pearl777 вне форума Ответить с цитированием
Старый 30.05.2013, 20:59   #4
siemenscx75
Пользователь
 
Регистрация: 08.05.2013
Сообщений: 10
По умолчанию

Ошибка: Project1
Access violation at address 004bf796 in module 'Project1.exe'. Read of address 00000000.

Вот весь код архивом
siemenscx75 вне форума Ответить с цитированием
Старый 30.05.2013, 21:29   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Качать проект не буду, но спрошу - на какой строке происходит падение?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.05.2013, 21:38   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Read of address 00000000
Похоже на неинициализированный указатель.
s-andriano вне форума Ответить с цитированием
Старый 30.05.2013, 23:08   #7
siemenscx75
Пользователь
 
Регистрация: 08.05.2013
Сообщений: 10
По умолчанию

Падение здесь
Код:
 with MyLabelIcon[MyLabelIndex].Create(Panel1) do

Последний раз редактировалось siemenscx75; 31.05.2013 в 00:30.
siemenscx75 вне форума Ответить с цитированием
Старый 30.05.2013, 23:54   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Код:
MyLabelIcon[MyLabelIndex] := TImage.Create(Panel1);
with MyLabelIcon[MyLabelIndex] do
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 31.05.2013, 00:29   #9
siemenscx75
Пользователь
 
Регистрация: 08.05.2013
Сообщений: 10
По умолчанию

Если
Код:
 MyLabelIcon[MyLabelIndex] := TImage.Create(Panel1);
with MyLabelIcon[MyLabelIndex] do
То выдаёт ошибку :
Project1
Access violation at address 004bf68D in module 'Project1.exe'. Read of address FFFFFFFF.
siemenscx75 вне форума Ответить с цитированием
Старый 31.05.2013, 00:49   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

129 строка:
Код:
hint:=extractfilename(name);
Не нужно писать свои костыли для того, что уже реализовано
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi ,немогу исправить ошибку в коде siemenscx75 Помощь студентам 1 30.05.2013 14:56
Исправить ошибку в коде программы на Delphi, работающей с орграфом, до 7 часов МСК Bambura Фриланс 4 26.05.2012 21:48
Исправить ошибку в коде Gared Помощь студентам 1 20.05.2011 20:48
исправить ошибку в коде с++ Gared Помощь студентам 1 20.05.2011 20:41
Немогу исправить ошибку Bighead Помощь студентам 0 15.01.2011 15:40