Показать сообщение отдельно
  #2  
Старый 05.08.2015, 09:40
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

ну для начала, что это такое?

S[IntToStr(SensonTag)] - преобразование числа в строку, а потом пытаемся взять элемент массива с индексом, равным этой строке???.
надо так
S[SensonTag],как правильно сделано в 10 строке.



А саму функцию желательно начинать так

Код:
procedure TForm1.SpeedButtonClick(Sender:TObject);

begin
  SensonTag:=TComponent(Sender).Tag;

А с глифами - много лишней работы

Итого
Код:
procedure TForm1.SpeedButtonClick(Sender:TObject);
var
   Icon : TIcon;
   IconIndex: Word;
begin
  SensonTag:=TComponent(Sender).Tag; 
  if S[SensonTag]='' then
  begin
    if  sOpenDialog1.Execute then
    begin
      S[SensonTag]:=sOpenDialog1.FileName;
      Icon:=TIcon.Create;
      try// приучись писать try-finally для такого использования
         StrPCopy ( Pch, S[SensonTag]  );
         Icon.Handle:= ExtractAssociatedIcon(hInstance, Pch, IconIndex);
         Q[SensonTag].Glyph:=Icon;//внутри этого присваивания делается всё то, что ты написал
         Q[SensonTag].NumGlyphs:= 1;//без этого могут быть глюки
         Q[SensonTag].Caption:=ExtractFileName(s[SensonTag]);
      finally//!!!!!!!1
        Icon.Free;
      end;//!!!!!!!!!
    end;
  end
  else
  begin
     ShellExecute (Form1.Handle, nil,PChar(S[SensonTag]), nil, nil, SW_RESTORE);
   end;
end;
Ответить с цитированием