Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.07.2010, 19:50
Pigmalion Pigmalion вне форума
Прохожий
 
Регистрация: 01.07.2010
Сообщения: 20
Репутация: 10
Вопрос Ошбка. Процедура в процедуре

Доброго времени суток всем. Подскажите,я эту процедуру:
Код:
  
 procedure EnterText(x,y:integer;s:string);
     var
      Canvas:TCanvas;
   begin
     Canvas.Font.Size   := 12;
     Canvas.Font.Color  := clBlack;
     Canvas.TextOut(x,y,s);
   end;
Подставляю сюда
Код:
procedure TForm1.Block(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (Bl) then
   begin
    canvas.Brush.Color:=clwhite;
    canvas.Rectangle(60,50,180,110);
   procedure EnterText(62,70,'Some text');
    BL:= not BL;
    exit;
    end;
   begin
if not BL then
     begin
      canvas.pen.Style:=pssolid;
      canvas.Brush.Color:=clred;
      canvas.Rectangle(60,50,180,110);
      procedure EnterText(62,70,'Some text');
      BL:= true;
      exit;
     end;
    end;
end;
Ошибка.Если пропустить прога глючит(
Ответить с цитированием
  #2  
Старый 06.07.2010, 19:54
Аватар для urahara
urahara urahara вне форума
Новичок
 
Регистрация: 16.01.2010
Сообщения: 86
Репутация: 35
По умолчанию

Canvas:TCanvas; не инициализирована.
__________________
Arrrgh
Ответить с цитированием
  #3  
Старый 06.07.2010, 20:07
Pigmalion Pigmalion вне форума
Прохожий
 
Регистрация: 01.07.2010
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от urahara
Canvas:TCanvas; не инициализирована.
А как инициализировать?
Цитата:
Ключевого слова procedure там не должно быть! просто EnterText(62,70,'Some text')
Это я знаю,при копировании перепутал)
Ответить с цитированием
  #4  
Старый 06.07.2010, 20:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

у тебя Canvas должно в процедуру EnterText передаваться извне.
т.е:
Код:
 procedure EnterText(Canvas : TCanvas; x,y:integer;s:string);
   begin
     Canvas.Font.Size   := 12;
     Canvas.Font.Color  := clBlack;
     Canvas.TextOut(x,y,s);
   end;

Соответсвенно, в вызове указывай тот Canvas, с которым работаешь.

ЗЫ. Если ты работаешь с канвой формы, то можно сделать процедуру без передачи канвы - убираешь указание Canvas, а процедуру делаешь методом формы. в этом случае процедура будет обращаться к канве формы.
Ответить с цитированием
  #5  
Старый 06.07.2010, 20:26
Pigmalion Pigmalion вне форума
Прохожий
 
Регистрация: 01.07.2010
Сообщения: 20
Репутация: 10
По умолчанию

Благодарю,lmikle.Вроде работает.
Ответить с цитированием
  #6  
Старый 06.07.2010, 22:51
Pigmalion Pigmalion вне форума
Прохожий
 
Регистрация: 01.07.2010
Сообщения: 20
Репутация: 10
По умолчанию

А вот ещё:
Код:
 procedure CreateBlock(Canvas:TCanvas;x,y,z,x1,y1,x2,y2:integer;
  Pr:boolean;s:string);
begin
if Pr then
    begin
     Canvas.Brush.Color:=clgreen;
     Canvas.rectangle(x1,y1,x2,y2);
     Canvas.Font.Size:=z;
     Canvas.Font.Color:=clBlack;
     Canvas.TextOut(x,y,s);
     Pr:= not Pr;
    exit;
    end;
if not Pr then
    begin
     Canvas.Brush.Color:=clred;
     Canvas.rectangle(x1,y1,x2,y2);
     Canvas.Font.Size:=z;
     Canvas.Font.Color:=clBlack;
     Canvas.TextOut(x,y,s);
     Pr:= true;
    exit;
   end;
  end;
Вроде всё правильно.Процедура должна менять цвет прямоугольника при щелчке и обратно.Закрашивает в новый, а обратно никак.
Ответить с цитированием
  #7  
Старый 06.07.2010, 19:57
Аватар для PeKpyT
PeKpyT PeKpyT вне форума
Прохожий
 
Регистрация: 06.07.2010
Адрес: Internet
Сообщения: 3
Репутация: 10
По умолчанию

Код:
procedure TForm1.Block(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (Bl) then
   begin
    canvas.Brush.Color:=clwhite;
    canvas.Rectangle(60,50,180,110);
procedure EnterText(62,70,'Some text');
    BL:= not BL;
    exit;
    end;
   begin
if not BL then
     begin
      canvas.pen.Style:=pssolid;
      canvas.Brush.Color:=clred;
      canvas.Rectangle(60,50,180,110);
 procedure EnterText(62,70,'Some text');
      BL:= true;
      exit;
     end;
    end;
end;

Ключевого слова procedure там не должно быть! просто EnterText(62,70,'Some text')
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:14.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025