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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2008, 20:18   #11
Almaas
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 27
По умолчанию

Не понял, как работает отзыв... Извините.
Спасибо, _Dmitry, большое. Намного понятнее, чем в других местах, которые я нашел в инете.
Almaas вне форума Ответить с цитированием
Старый 04.01.2008, 14:06   #12
Almaas
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 27
По умолчанию Не работает процедура

Я немного доработал пример, который вы мне показали. Решил оформить это в виде процедуры с параметрами. Вот что получилось:
Код:
procedure c_text(x:integer; y:integer; z:real);
      
    var s: string;
    begin
       s:=FloatToStr(z*10);
       Image1.Canvas.Font.Name := 'Arial';
       Image1.Canvas.Font.Size := 9;
       Image1.Canvas.Font.Style := [fsBold] ;
       Image1.Canvas.Font.Color := clNavy;
       Image1.Canvas.Brush.Style := bsClear;
       Image1.Canvas.TextOut(x-round(TextWidth(s)/2),y,s);
    end;
Поскольку я использую это для вывода значений размеров.
Вызываю это так: c_text(x1,y1,bvp);
где x1 и y1 - ранее вычесленные координаты, bvp - ранее введенное и уже использованное значение размера.
Процедуру описал в type как
procedure c_text(x:integer; y:integer; z:real);
При запуске программа ругается, что Image1 - незадекларированный идентификатор... Чего я делаю не так, подскажите, пожалуйста...

Последний раз редактировалось Almaas; 04.01.2008 в 14:35.
Almaas вне форума Ответить с цитированием
Старый 04.01.2008, 14:57   #13
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Обращайтесь к Image1 с имени формы Form1.Image1 или включайте процедуру в класс формы
Код:
procedure c_text(x:integer; y:integer; z:real);   
var s: string;
begin
  s:=FloatToStr(z*10);
  with Form1.Image1.Canvas do
    begin
       Font.Name := 'Arial';
       Font.Size := 9;
       Font.Style := [fsBold] ;
       Font.Color := clNavy;
       Brush.Style := bsClear;
       TextOut(x-round(TextWidth(s)/2),y,s);
    end;
end;
_Dmitry вне форума Ответить с цитированием
Старый 04.01.2008, 15:06   #14
Almaas
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 27
По умолчанию

Спасибо, заработало... но только когда я убрал из type описание процедуры
Её разве не надо там описывать?
Almaas вне форума Ответить с цитированием
Старый 04.01.2008, 15:21   #15
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Не понял вопроса, в каком месте раздела type она находилась?
Если вы ее включаете в класс формы, то объявляем ее так
Код:
type
  TForm1 = class(TForm)
  .....
  public
    procedure c_text(x:integer; y:integer; z:real);
  end;
...........................
procedure TForm1.c_text(x:integer; y:integer; z:real);      
var s: string;   
begin  
  s:=FloatToStr(z*10);   
  with Image1.Canvas do  
    begin  
       Font.Name := 'Arial';   
       Font.Size := 9;   
       Font.Style := [fsBold] ;   
       Font.Color := clNavy;   
       Brush.Style := bsClear;   
       TextOut(x-round(TextWidth(s)/2),y,s);   
    end;   
end;
обратите внимание, что в строке with я ссылку на форму убрал, она появилась в заголовке процедуры.
Если вы не включаете процедуру в класс формы, то обращаться ко всем ее компанентам нужно начиная с ее имени: Form1.Canvas...
_Dmitry вне форума Ответить с цитированием
Старый 04.01.2008, 15:29   #16
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

А вообще, зачем менять шрифт в прцедуре вывода текста? У вас, наверно, все значения размеров в едином стиле. Поэтому лучше сделать процедуру, которая только выводит текст, а менять шрифт перед ее вызовом
Код:
procedure c_text(Cnv: TCanvas; x,y: integer; s: string);
begin
  Cnv.TextOut(x-round(Cnv.TextWidth(s)/2),y,s);
end;
................................
begin
  with Form1.Image1.Canvas do
    begin
       Font.Name := 'Arial';
       Font.Size := 9;
       Font.Style := [fsBold] ;
       Font.Color := clNavy;
       Brush.Style := bsClear;
    end;
  //изменили настройки шрифта и печатаем текст
  c_text(Form1.Image1.Canvas,x,y,FloatToStr(z*10));
_Dmitry вне форума Ответить с цитированием
Старый 04.01.2008, 15:31   #17
Almaas
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 27
По умолчанию

Вот теперь все встало на свои места. СПАСИБО ОГРОМНОЕ.
Almaas вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа, работающая под вистой, должна разделить hdd еще на 2 диска KORT Софт 1 25.08.2008 13:57
Delphi 6 - Программа должна узнать уровень загруженности процессора Никки Общие вопросы Delphi 3 20.11.2007 19:40
WinApi, программа должна выдавать основной номер версии ОС MARGO Win Api 2 16.11.2007 21:14
Программа отлично работает при событии Button1Click, и отказывается работать в FormCreate xTANATOSx Общие вопросы Delphi 3 19.09.2007 08:02
TListView; не рисует цветом TCanvas JetAPI Компоненты Delphi 9 24.08.2007 22:22