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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2019, 21:08   #1
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье Вывод текста из Edit в Canvas

Здравствуйте!
Подскажите пожалуйста, почему вывод букв на канву не сразу происходит?
Пишу "А", ничего не выводится, потом набираю вторую букву - "Б", но выводится только "А", и т.д.
Код:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 
 Image1.Canvas.Brush.Color:= $008000FF;
 Image1.Canvas.Font.Color:= clLime;
 Image1.Canvas.Font.Size:= 24;
 Image1.Width := Image1.Canvas.TextWidth(Edit1.Text); // Подскажи ему
 Image1.Canvas.TextOut(10, 10, Edit1.Text);
end;
Женя32 вне форума Ответить с цитированием
Старый 19.06.2019, 22:13   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Код:
procedure TForm1.Edit1KeyDownPress(Sender: TObject; var Key: Word;
Учись, тёзка, "наука сокращает и без того короткую нам жизнь" © ас Пушкин

Последний раз редактировалось digitalis; 19.06.2019 в 22:16.
digitalis вне форума Ответить с цитированием
Старый 20.06.2019, 02:26   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Учись, тёзка
Как однако легко было учить во времена MS-DOS. Были два прерывания 16-е и 9-е. Из кратких описаний этих прерываний было понятно, что 16-е обрабатывает сами нажатия клавиш клавиатуры. А 9-е учтя работу 16-го уже делало ввод символа в текстовое поле.
Как сейчас учить новичков так чтобы они поняли, а не "уверовали" я не знаю.

2 Женя32 поверьте в то, что в обработчиках событий OnKeyDown и OnKeyUp в текстовое поле любого вида ещё не введен никакой символ. После его введения сработает обработчик OnKeyPress, в котором вы уже сможете получить этот символ и всё поле целиком..

Последний раз редактировалось northener; 20.06.2019 в 02:36.
northener вне форума Ответить с цитированием
Старый 20.06.2019, 07:01   #4
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Надо всего лишь вывод обновить.
Image1.refresh;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 20.06.2019, 10:44   #5
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Надо всего лишь вывод обновить.
Image1.refresh;
Не получается...
Я когда-то делал..., но подзабыл...
Там как-то через while делается...

Код:
While Canvas Do
begin
//тело цикла
end;
Женя32 вне форума Ответить с цитированием
Старый 20.06.2019, 11:06   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Женя32 Посмотреть сообщение
While Canvas Do
ошибаетесь.

вы путаете с With
Код:
With Canvas Do
в вашем случае можно использовать
Код:
With Image1.Canvas Do
begin
 Brush.Color:= $008000FF;
 Font.Color:= clLime;
 Font.Size:= 24;
 TextOut(10, 10, Edit1.Text);
end;
но это просто сокращает запись. не более того.
Вам нужно
1) использовать обработчик события onKeyPress
2) после вывода на канву дописать Image1.refresh;

Последний раз редактировалось Serge_Bliznykov; 20.06.2019 в 11:09.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.06.2019, 11:40   #7
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье

Всем, вроде разобрался, нужно было событие Chenge использовать...
Но, возник другой вопрос: Как вывести текст по верх картинки, загруженной в imege?
Вот так, при вводе картинка исчезает, и становиться белый фон:

Код:
  with Image1.Canvas do
  begin
    Image1.refresh;
     FillRect(Canvas.ClipRect);
   // Brush.Color := clRed;
    FillRect(Rect(0, 0, 100, 100));
   // Brush.Color := clBlue;
    TextOut(10, 20, 'Not Transparent!');
    OldBkMode := SetBkMode(Handle, TRANSPARENT);
    TextOut(100, 100, Edit1.Text);  //кор.вывод
    SetBkMode(Handle, OldBkMode);

  end;
Женя32 вне форума Ответить с цитированием
Старый 20.06.2019, 12:13   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

выкиньте этот код.
достаточно так
Код:
  with Image1.Canvas do
  begin
    Font.Color:=clred;
    Font.Size:=44;
    brush.style:=bsClear;
    TextOut(100, 100, Edit1.Text);  //кор.вывод
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.06.2019, 12:28   #9
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
выкиньте этот код.
достаточно так
Код:
  with Image1.Canvas do
  begin
    Font.Color:=clred;
    Font.Size:=44;
    brush.style:=bsClear;
    TextOut(100, 100, Edit1.Text);  //кор.вывод
  end;
Спасибо!
А как вывести текст по верх картинки??
Женя32 вне форума Ответить с цитированием
Старый 20.06.2019, 12:57   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А это не поверх? При повторном выводе повторно и картинку загрузить в image
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
public void someMethod() { this.run = false; Canvas canvas = null; doDraw(canvas); Tatana Java Мобильная разработка (Android) 10 15.12.2016 12:05
Delphi DX10 вывод текста на Canvas vohuanrok Общие вопросы Delphi 10 13.05.2016 10:44
Форматированный вывод текста в Edit mak15 Общие вопросы C/C++ 4 14.12.2015 17:29
TreeView, Canvas, Вывод текста Kotaries Общие вопросы Delphi 1 18.07.2014 18:16
Вывод в edit текста с переменной NecroSlider Общие вопросы C/C++ 4 29.07.2008 14:42