Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.014 c
2-1140324620
VitalikS
2006-02-19 07:50
2006.03.12
Автоинкримент


3-1137996955
W
2006-01-23 09:15
2006.03.12
Кодировка таблиц *.dbf


1-1139471846
Ksenom
2006-02-09 10:57
2006.03.12
Количество потоков всё время растёт?!


10-1114698193
vlad_ri
2005-04-28 18:23
2006.03.12
многопоточность и COM


2-1140813780
TStas
2006-02-24 23:43
2006.03.12
В каком модуле описана DeleteFolder





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский