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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2010, 11:56   #21
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

На какой строке-то?
Sibedir вне форума Ответить с цитированием
Старый 26.09.2010, 11:59   #22
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Да как бы строка не показывается на какой. Просто когда мышку отпускаю, то получается ошибка (см.скрин ниже). Вот весь код процедур:
Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 bX,bY: integer;
begin
 bX:=X;
 bY:=Y;
  with Form1.Image1.Canvas do
  begin
    MoveTo(X1,Y1);
    LineTo(X2,Y1);
    LineTo(X2,Y2);
    LineTo(X1,Y2);
    LineTo(X1,Y1);
  end;
  X1:=X;
  Y1:=Y;
  X2:=X;
  Y2:=Y;
  Form1.Image1.Refresh;
  Caption:=IntToStr(X1)+','+IntToStr(Y1)+' - '+IntToStr(X2)+','+IntToStr(Y2);
  Start:=TRUE;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   If Start Then
    With Form1.Image1.Canvas Do
     Begin
      Pen.Color:=clRed;
      Pen.Mode:=pmNot;
      MoveTo(X1,Y1);
      LineTo(X2,Y1);
      LineTo(X2,Y2);
      LineTo(X1,Y2);
      LineTo(X1,Y1);
      X2:=X;
      Y2:=Y;
      MoveTo(X1,Y1);
      LineTo(X2,Y1);
      LineTo(X2,Y2);
      LineTo(X1,Y2);
      LineTo(X1,Y1);
      Caption:=IntToStr(X1)+','+IntToStr(Y1)+' - '+IntToStr(X2)+','+IntToStr(Y2);
     End;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 b: TBitMap;
 r: TRect;
 bX,bY: integer;
begin
 r.Left:=Min(bX,X);
 r.Top:=Min(bY,Y);
 r.Right:=Max(bX,X);
 r.Bottom:=Max(bY,Y);
 b:=TBitMap.Create;
 b.Height:=r.Bottom - r.Top;
 b.Width:=r.Right - r.Left;
 b.Canvas.CopyRect(Rect(0,0,b.Width,b.Height),Image1.Canvas,r);
 Edit1.Text:=GetImageChars(b);
 Start:=FALSE;
 Form1.Image1.Canvas.Pen.Mode:=pmNot;
 b.Free;
end;
Изображения
Тип файла: jpg Безымянный.jpg (16.6 Кб, 146 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 26.09.2010 в 12:10.
artemavd вне форума Ответить с цитированием
Старый 26.09.2010, 12:25   #23
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

мои bX и bY - это ваши X1 и Y1

Цитата:
Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 bX,bY: integer;
begin
 bX:=X;
 bY:=Y;
  with Form1.Image1.Canvas do
  begin

...
Вот подумайте, зачем вы их тут объявили, если потом нигде не использовали.
Sibedir вне форума Ответить с цитированием
Старый 26.09.2010, 12:28   #24
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Может тогда код для нажатой левой кнопки мыши будет такой:
Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 bX,bY: integer;
begin
  with Form1.Image1.Canvas do
  begin
    MoveTo(bX,bY);
    LineTo(X2,bY);
    LineTo(X2,Y2);
    LineTo(bX,Y2);
    LineTo(bX,bY);
  end;
  bX:=X;
  bY:=Y;
  X2:=X;
  Y2:=Y;
  Form1.Image1.Refresh;
  Caption:=IntToStr(bX)+','+IntToStr(bY)+' - '+IntToStr(X2)+','+IntToStr(Y2);
  Start:=TRUE;
end;
а Х2 и Y2 тогда что это?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.09.2010, 12:31   #25
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Ну, попробуйте
Вы не поняли сути замечания. bX и bY, как и ваши X1..Y2 - это глобальные переменные.
Замените в коде bX и bY на X1 и Y1 и все.
Sibedir вне форума Ответить с цитированием
Старый 26.09.2010, 12:37   #26
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Заменил. Код для MouseUp получился такой:
Код:
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 b: TBitMap;
 r: TRect;
// bX,bY: integer;
begin
 r.Left:=Min(X1,X);
 r.Top:=Min(Y1,Y);
 r.Right:=Max(X1,X);
 r.Bottom:=Max(Y1,Y);
 b:=TBitMap.Create;
 b.Height:=r.Bottom - r.Top;
 b.Width:=r.Right - r.Left;
 b.Canvas.CopyRect(Rect(0,0,b.Width,b.Height),Image1.Canvas,r);
 Edit1.Text:=GetImageChars(b);
 Start:=FALSE;
 Form1.Image1.Canvas.Pen.Mode:=pmNot;
 b.Free;
end;
терь при выделении буквы, после того как отпускаешь кнопку появляется ошибка:
Изображения
Тип файла: png Безымянный2.png (22.6 Кб, 58 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.09.2010, 12:41   #27
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  with Form1.Image1.Canvas do
  begin
    MoveTo(X1,Y1);
    LineTo(X2,Y1);
    LineTo(X2,Y2);
    LineTo(X1,Y2);
    LineTo(X1,Y1);
  end;
  X1:=X;
  Y1:=Y;
  X2:=X;
  Y2:=Y;
  Form1.Image1.Refresh;
  Caption:=IntToStr(X1)+','+IntToStr(Y1)+' - '+IntToStr(X2)+','+IntToStr(Y2);
  Start:=TRUE;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  If Start Then
    With Form1.Image1.Canvas Do begin
      Pen.Color:=clRed;
      Pen.Mode:=pmNot;
      MoveTo(X1,Y1);
      LineTo(X2,Y1);
      LineTo(X2,Y2);
      LineTo(X1,Y2);
      LineTo(X1,Y1);
      X2:=X;
      Y2:=Y;
      MoveTo(X1,Y1);
      LineTo(X2,Y1);
      LineTo(X2,Y2);
      LineTo(X1,Y2);
      LineTo(X1,Y1);
      Caption:=IntToStr(X1)+','+IntToStr(Y1)+' - '+IntToStr(X2)+','+IntToStr(Y2);
    End;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  b: TBitMap;
  r: TRect;
begin
  X2:=X;
  Y2:=Y;

  r.Left:=Min(X1,X2);
  r.Top:=Min(Y1,Y2);
  r.Right:=Max(X1,X2);
  r.Bottom:=Max(Y1,Y2);

  b:=TBitMap.Create;
  b.Height:=r.Bottom - r.Top;
  b.Width:=r.Right - r.Left;
  b.Canvas.CopyRect (Rect(0,0,b.Width,b.Height),Image1.Canvas,r);

  Edit1.Text := GetImageChars(b);
  
  Start:=FALSE;
  Form1.Image1.Canvas.Pen.Mode:=pmNot;
  b.Free;
end;
Sibedir вне форума Ответить с цитированием
Старый 26.09.2010, 12:51   #28
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Да что ж такое. Уже скопировал Ваш код и вставил. И все равно не работает. Может если буде не трудно скините мой же исходник из первого поста с Вашим последним кодом. Может я что-то намудрил с переменными? Ведь ошибка гооворит о том, что идет обращение к несуществующему или еще не созданному объекту. Но к какому и где?
Изображения
Тип файла: jpg Безымянный3.jpg (30.4 Кб, 114 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.09.2010, 13:26   #29
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Get_image_chars.zip
_________________________
Sibedir вне форума Ответить с цитированием
Старый 26.09.2010, 13:39   #30
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Странно, у вас работает.... А что за цифры в Edit1 выводятся не могу понять?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнить код через макрос vbs segail Microsoft Office Excel 0 04.04.2010 19:25
Выполнить код при закрытии окна просмотра segail Microsoft Office Excel 7 08.02.2010 11:22
Есть ли возможность выполнить код при инициализации подключаемого модуля? shurik_7866 Общие вопросы C/C++ 0 07.12.2009 22:59
Как выполнить код Java из Delphi? ap008 Общие вопросы Delphi 2 22.05.2008 09:51
как выполнить один и тот же код для двух разных событий puz Общие вопросы Delphi 5 11.05.2007 19:03