Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2012, 21:53   #1
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию Два нажатия - одно событие.(Delphi)

В общем дело такое. Нужна процедура, которая при нажатии на одно изображение, а потом на другое, проверяла по
Код:
Picture.GetNamePath;
одинаковы-ли изображения. Подтолкните на идею пл3 или какую-нибудь хитрость, чтобы я мог в цикле просмотреть все поля с изображениями и сравнить их.

PS. У меня 56 полей TImage и вручную прописывать и проверять каждое не хочется =(
До последней точки с запятой в коде...

Последний раз редактировалось Necare; 23.02.2012 в 21:55.
Necare вне форума Ответить с цитированием
Старый 23.02.2012, 22:46   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var CountClick: Integer;
    FirstImage: TImage;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  CountClick:=0;
end;

procedure TForm1.ImageClick(Sender: TObject);
begin
  Inc(CountClick);
  if CountClick=1 then FirstImage:=TImage(Sender)
  else if FirstImage=Sender then Dec(CountClick) //на тот случай если 2 раза клик на одном и том же
  else begin
    //здесь сравниваем FirstImage и TImage(Sender)
    CountClick:=0;
  end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.02.2012, 23:04   #3
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

данная процедура будет работать при нажатии на любое изображение?в том плане что процедуру писать для каждого TImage не нужно?

я просто всего несколько дней работаю с делфи и не совсем ещё въезжаю.
До последней точки с запятой в коде...
Necare вне форума Ответить с цитированием
Старый 23.02.2012, 23:14   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Событие OnClick всех Image должно быть нацелено на один обработчик ImageClick. В нем запоминается Image первого клика. При втором клике проверка - на том же Image клик или на другом. Если на том же - то клик игнорируется, в противном случае выполняйте свой код с двумя Image - указатель на первый в FirstImage, на второй - в TImage(Sender). Я изначально подумал, что пиксельное содержимое картинок сравнивать собираетесь. Если не так, переделайте, но основная идея одного обработчика для нескольких однотипных объектов с отлавливанием второго клика в общих чертах такая
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.02.2012, 23:28   #5
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

окей, спасибо, будем думать.
Только один вопрос, как заставить обработчик ImageClick срабатывать при нажатии на 1,2,3 и т.д изображения. Как написать, что бы он вызывался?
До последней точки с запятой в коде...
Necare вне форума Ответить с цитированием
Старый 24.02.2012, 00:23   #6
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

Вот ужасный код
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, jpeg;

type
  TForm2 = class(TForm)

    Button1: TButton;
   
    Image1: TImage;
   -----//-------//-----
    Image56: TImage;

    procedure Button1Click(Sender: TObject);
    procedure Image4Click(Sender: TObject);



  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  imas: array [1..15] of string;
  CC:integer;
  FirstImage: TImage;

implementation

{$R *.dfm}
uses Unit1;



procedure TForm2.Button1Click(Sender: TObject);
var i,n:integer;
begin
  CC:=0;
Button1.Visible:=False;
for i:=1 to 15 do
imas[i]:='bonspics\'+IntToStr(i)+'.bmp';




Image3.Picture.LoadFromFile(imas[Unit1.x[2]]);
Image4.Picture.LoadFromFile(imas[Unit1.x[3]]);
-----//-------//------//-------//--------//------//
Image56.Picture.LoadFromFile(imas[Unit1.x[10]]);
end;


procedure TForm2.Image4Click(Sender: TObject);
begin
   CC:=CC+1;;
  if CC=1 then
  begin
   FirstImage:=TImage(Sender);
  end
  else if FirstImage=Sender then CC:=CC-1
  else begin
       if FirstImage.Picture.GetNamePath=TImage(Sender).Picture.GetNamePath then
       begin
         FirstImage.Visible:=false;
         TImage(Sender).Visible:=false;
             CC:=0
       end;


end;
end;

end.
До последней точки с запятой в коде...
Necare вне форума Ответить с цитированием
Старый 24.02.2012, 00:43   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А инспектор объектов для чего? В нем и нацельте для каждого IMAGE событие OnClick на нужный обработчик.

ADD

А что вы собираетесь получить с помощью GetNamePath? Вернет 'TPicture' и не более того
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.02.2012 в 00:51.
Аватар вне форума Ответить с цитированием
Старый 24.02.2012, 08:09   #8
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

А я думал что вернется путь и имя Picture
До последней точки с запятой в коде...
Necare вне форума Ответить с цитированием
Старый 24.02.2012, 12:26   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Имена файлов у вас в массиве находятся. При условии, что в массиве разные имена, запоминайте в Image.Tag индекс имени файла, который используете при загрузке картинки и потом просто сравнивайте значение Tag двух Image
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.02.2012 в 13:23.
Аватар вне форума Ответить с цитированием
Старый 24.02.2012, 15:11   #10
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

Я сделал немного по-другому и у меня возникла маленькая проблемка:

У меня есть процедура куда я передаю имя формы:
Код:
str:=Image3.Name;
res(imas[Unit1.x[2]],str);)
Где [Unit1.x[2]] - путь и имя картинки,а str - имя формы

Потом, когда я пишу
Код:
TImage(ibuf).Visible:=false;
, Где ibuf - значение str

Проблема в том что изображение не становится невидимым =(

Вообще идея в том, что бы передать в процедуру имя формы, которую надо скрыть.
До последней точки с запятой в коде...

Последний раз редактировалось Necare; 24.02.2012 в 15:15.
Necare вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Два задания в паскале-одно на текстовые файлы,др-ое на записи Novenkaja Помощь студентам 19 30.05.2011 23:06
событие нажатия кнопки CodeNOT Общие вопросы C/C++ 0 05.01.2011 00:04
Событие OnChange - на одно из полей namazi74 БД в Delphi 4 22.04.2010 12:52
Почему из файла считывается два значения, если там одно yorik1984 Помощь студентам 3 19.03.2010 01:48
Проверить событие нажатия кнопики! фЁдОр Помощь студентам 13 31.03.2008 13:27