![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
	 | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Здравствуйте! 
		
	
		
		
		
		
		
	
		
		
	
	
	Пытаюсь на динамической кнопке (SpeedButton) сделать обработчик события Onclick. В котором данный код: Код: 
	var
   Icon : TIcon;
   IconIndex: Word;
begin
  if S[SensonTag]='' then
    begin
     if  sOpenDialog1.Execute then
    begin
       S[SensonTag]:=sOpenDialog1.FileName;
         Q[SensonTag].Glyph:=nil;
         Icon:=TIcon.Create;
         StrPCopy (Pch,S[IntToStr(SensonTag)]  );
         Icon.Handle:= ExtractAssociatedIcon(hInstance, Pch, IconIndex);
         Q[SensonTag].Glyph.Width:= Icon.Width;
         Q[SensonTag].Glyph.Height:= Icon.Height;
         Q[SensonTag].Glyph.Canvas.Draw(0, 0, Icon);
         Q[SensonTag].Caption:=ExtractFileName(s[1]);
         Icon.Free;
    end;
      end
      else
          begin
          ShellExecute (Form1.Handle, nil,PChar(S[IntToStr(SensonTag)]), nil, nil, SW_RESTORE);
          end;
end;Переменные: Код: 
	Q:array [1..25] of TSpeedButton; S:array [1..25] of string; I,SensonTag :Integer; Pch: array[0..256] of Char; Хочу сделать, что бы по клику динамической кнопки, происходил выбор программы(или любого другого файла) через Opendialog1, далее запуск выбранной программы... При наведении на динамическую кнопку, в переменную SensorTag передается Tag кнопки. По этому в коде всё ссылается на данную переменную. У меня проблема в 14 строке. Мне нужно указать в массиве S[] переменную SensorTag. Я пробовал так как в коде - вылетает ошибка. Пробовал переставлять IntToStr, думая что не там написал - не помогло. Так же проблема в 26 строке, конкретно в этом отрывке PChar(S[IntToStr(SensonTag)]) Опять же, пытаюсь впихнуть переменную в String массив. Помогите пожалуйста. Что делаю не так ?  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 ну для начала, что это такое? 
		
	
		
		
		
		
		
	
		
		
	
	
	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; | 
| Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
 
Gareth (05.08.2015)
  | ||
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Incompatible types: 'TBitmap' and 'TIcon' Цитата: 
	
 Спасибо Вам! И еще 1 вопрос.. У меня будет 25 кнопок. При создании им выдается Tag по возрастанию. Допустим их всего 5, я удалю 3-ю кнопку.. Получится что на форме 4 кнопки, 1,2,4,5. Как на событие удаление кнопки, сделать перебор так сказать всех существующих кнопок на форме, и задать им правильный Tag? Что бы было 1,2,3,4 а не 1,2,4,5? Последний раз редактировалось Gareth, 05.08.2015 в 13:29.  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	 for i :=0 to ControlCount-1 do
  if Controls[i] is TSpeedButton then
    TSpeedButton(Controls[i]).Tag:=.. | 
| Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
 
Gareth (05.08.2015)
  | ||