Показать сообщение отдельно
  #12  
Старый 15.05.2014, 18:05
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Ведь для этого специально функция Execute у диалога результатом булева, поддерживает такую конструкцию
Код:
...
if sOpenDialog1.Execute then
begin
// Здесь всё что нужно сделать при выборе кнопки OK в диалоге
//
end;
...
если ничего не выбрано (нажата отмена) то ничего и не произойдёт

Помогите с ошибкой, что не так делаю ?
Код:
var
  Form1: TForm1;
     Icon: TIcon;
   Pch: array[0..256] of Char;
   IconIndex: Word;
   S:String;
.......
.......

procedure TForm1.sSpeedButton1Click(Sender: TObject);
begin
if S='' then
    begin
       if sOpenDialog1.Execute then
       begin
         S:=sOpenDialog1.FileName;
         Icon:=TIcon.Create;
         StrPCopy(Pch,S);
         Icon.Handle:= ExtractAssociatedIcon(hInstance, Pch, IconIndex);
         sSpeedButton1.Glyph.Width:= Icon.Width;
         sSpeedButton1.Glyph.Height:= Icon.Height;
         sSpeedButton1.Glyph.Canvas.Draw(0, 0, Icon);
         Icon.Free;
         end;
      end
      else
    begin

          ShellExecute (Form1.Handle, nil, PChar(S), nil, nil, SW_RESTORE);
    end;
end;

Всё работает нормально, ярлык отображается, но как только закрываю программу, выскакивает ошибка
access violation at address 00000000

В интернете естественно искал, но нашёл только одну похожую тему. Человек делал что-то похожее на то, что делаю я, только в 2004 году . - ссылка
Внятного ответа не было. Будьте добры, помогите
Ответить с цитированием