![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TImage [D2005, XP]
Wel © (2006-02-21 15:33:00)Добрый день. Подскажите пожалуйста, как можно попроще записать этот
код. А то пока только пробные 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';
Ega23 (2006-02-21 18:27:00) [1]Можно.
Но тогда индекирование Image и Label лучше провести так, как umbra © в [3] советует.
Т.е. через массив. Тогда вообще элементарно. Иначе будет пихать в первый попавшийся.
Wel (2006-02-21 18:22:00) [2]Большое спасибо. Загрузил, заработало. Хотел еще спросить, на примере Ega23.
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);Можно ли сделать обратную процедуру. т.е из BufPhotoImage в Image1 если занят то в Image2; если занят то в Image3; и.т.д.
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;
umbra (2006-02-21 15:55:00) [3]можно записывать в свойство
TagкаждогоTImageего порядковый номер, при создании формы записывать ссылки на Image-и в массив или список (myImageList) в том же порядке. В другой массив (myLabelList) записывать ссылки на лабелы в том же порядке. После этого обработчик будет выглядеть так
procedure TForm1.Image9MouseDown(Sender: TObject; Button:TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);i
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;
Ega23 (2006-02-21 15:47:00) [4]Значит так:
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';
всё.
clickmaker (2006-02-21 15:41:00) [5]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';