Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

TImage   Найти похожие ветки 

 
Wel   (2006-02-21 15:33) [0]

Добрый день. Подскажите пожалуйста, как можно попроще записать этот
код. А то пока только пробные 15 Image, код уже огромный получается. procedure TForm1.Image9MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
var  Image: TImage;
begin  Image:= TImage(Sender);
  if (Button = mbRight) and (Image.Picture.Graphic <> nil) then begin
if Image = Image1 then BufPhotoImage.picture.assign(Image1.picture);
if Image = Image1 then Image1.Picture.Graphic := nil;
if Image = Image1 then Label1.Caption:= "0 Kb";
 if Image = Image2 then BufPhotoImage.picture.assign(Image2.picture);
 if Image = Image2 then Image2.Picture.Graphic := nil;
 if Image = Image2 then Label2.Caption:= "0 Kb";
   if Image = Image3 then BufPhotoImage.picture.assign(Image3.picture);
   if Image = Image3 then Image3.Picture.Graphic := nil;
   if Image = Image3 then .............
if Image = Image15 then BufPhotoImage.picture.assign(Image15.picture);
if Image = Image15 then Image15.Picture.Graphic := nil;
if Image = Image15 then Label15.Caption:= "0 Kb";
Подскажите пожалуйста.


 
clickmaker ©   (2006-02-21 15:41) [1]

Image.Tag
+
вот это безобразие заменить на then begin ... end
if Image = Image2 then BufPhotoImage.picture.assign(Image2.picture);
if Image = Image2 then Image2.Picture.Graphic := nil;
if Image = Image2 then Label2.Caption:= "0 Kb";


 
Ega23 ©   (2006-02-21 15:47) [2]

Значит так:
1. Для каждого TImage и соответствующего ему TLabel пропиши в design-time одинаковое свойство Tag
 Image1.Tag=1, Label1.Tag=1;
 Image2.Tag=2, Label2.Tag=2;
   ......
 Image15.Tag=15, Label15.Tag=15;

2. Переепиши обработчик следующим образом:

procedure TForm1.Image9MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
var  
 Image: TImage;
 i:Integer;
begin  
 if not ((Button = mbRight) and (Image.Picture.Graphic <> nil)) then Exit;
 Image:= TImage(Sender);
 BufPhotoImage.picture.assign(Image.picture);  
 Image.Picture.Graphic := nil;

 for i:=0 to ComponentCount-1 do
   if (Components[i] is TLabel) then
    if TLabel(Components[i]).Tag=Image.Tag then
      TLabel(Components[i]).Caption:="0 Kb";



всё.


 
umbra ©   (2006-02-21 15:55) [3]

можно записывать в свойство Tag каждого TImage его порядковый номер, при создании формы записывать ссылки на Image-и в массив или список (myImageList) в том же порядке. В другой массив (myLabelList) записывать ссылки на лабелы в том же порядке. После этого обработчик будет выглядеть так

procedure TForm1.Image9MouseDown(Sender: TObject; Button:TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);

var  Image: TImage;
     myPicture: TPicture;
begin
 Image:= TImage(Sender);
 if (Button = mbRight) and (Image.Picture.Graphic <> nil) then
   begin
    myPicture :=  (myImageList[Image.Tag] as TImage).Picture;
    BufPhotoImage.picture.assign(myPicture);
    myPicture.Graphic := nil;
    (myLabelList[Image.Tag] as TLabel).Caption := "0 Kb";
 end;
end;
i


 
Wel   (2006-02-21 18:22) [4]

Большое спасибо. Загрузил, заработало. Хотел еще спросить, на примере Ega23.procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
var  Image: TImage;  i:Integer;
begin  Image := TImage(Sender);
if not ((Button = mbRight) and (Image.Picture.Graphic <> nil)) then Exit;
BufPhotoImage.picture.assign(Image.picture);
Image.Picture.Graphic := nil;
for i:=0 to ComponentCount-1 do
  if (Components[i] is TLabel) then
   if TLabel(Components[i]).Tag = Image.Tag then
     TLabel(Components[i]).Caption:="0 Kb";
end;
Можно ли сделать обратную процедуру. т.е из BufPhotoImage  в Image1 если занят то в Image2; если занят то в Image3; и.т.д.


 
Ega23 ©   (2006-02-21 18:27) [5]

Можно.

Но тогда индекирование Image и Label лучше провести так, как umbra ©  в [3] советует.
Т.е. через массив. Тогда вообще элементарно. Иначе будет пихать в первый попавшийся.



Страницы: 1 вся ветка

Текущий архив: 2006.03.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.05 c
2-1140952057
kot137
2006-02-26 14:07
2006.03.12
добавление поля в табл. с текущей датой


2-1140626927
Дева
2006-02-22 19:48
2006.03.12
перехват нажатия клавиши в консольном приложении


1-1139485756
Agt
2006-02-09 14:49
2006.03.12
Interactive service


2-1140895416
49 Cent
2006-02-25 22:23
2006.03.12
Как программно определить текущий месяц?


2-1140514284
VitV
2006-02-21 12:31
2006.03.12
ListBox+DblClick-проблема.