С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 35

Как очищать TextOut(x,y)?

12.12.2016, 20:30. Показов 3599. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем.
Подскажите, как очищать TextOut(x,y)?
При нажатии кнопки текст выводиться на image1 по координатам например (10,10), а при нажатии другой кнопки по координатам(40,50). Но у меня по старым координатам остается.

Delphi
1
2
3
4
image1.Canvas.Draw(20,20,btmp);
btmp.Free;
image1.Canvas.TextOut(200,15,FloatToStr(w) );
Image1.Canvas.TextOut(10,130,floatToStr(h));
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.12.2016, 20:30
Ответы с готовыми решениями:

Как очищать таблицу?
Суть: Если в таблице больше 10 строк, то удалять самую раннюю строку, то есть которая была добавлена раньше всех остальных десяти. ...

Как правильно очищать память?
Как правильно очищать память? char *filePath; // инициализируется в другом участке кода. ... char *fileNameChar; ...

Нужно ли очищать char * old value как?
#include <iostream> #include <string> #include <stdio.h> int main() { long adr=1; char * str1,...

26
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
12.12.2016, 20:32
перерисовать?
Refresh
Repaint
??
0
0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 35
12.12.2016, 20:34  [ТС]
а можно поподробнее?
как правильно прописать
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
12.12.2016, 20:57
Delphi
1
2
3
image1.Canvas.Refresh
//или
image1.Canvas.Repaint
0
0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 35
12.12.2016, 21:02  [ТС]
не помогло
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,657
Записей в блоге: 21
12.12.2016, 21:25
вы нарисовали цветочек на листе бумаги
потом написали поверх слово "опа
как стереть слово?

вот точно так же...
0
0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 35
12.12.2016, 21:29  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
вот точно так же..
это как же?
0
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
12.12.2016, 23:05
Svetlaya666,

Delphi
1
   Image1.Picture.Bitmap := nil;
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
13.12.2016, 01:15
Цитата Сообщение от Svetlaya666 Посмотреть сообщение
При нажатии кнопки текст выводиться на image1 по координатам например (10,10), а при нажатии другой кнопки по координатам(40,50). Но у меня по старым координатам остается.

image1.Canvas.Draw(20,20,btmp);
btmp.Free;
image1.Canvas.TextOut(200,15,FloatToStr( w) );
Image1.Canvas.TextOut(10,130,floatToStr( h));
когда в коде - одно, а на словах другое, невозможно понять, чего же человек хочет и чем его код не устраивает
0
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
13.12.2016, 06:43
Svetlaya666, надо либо нарисовать поверх старого текста прямоугольник, соответствующий цвету заливки, либо скопировать соответствующий кусок текстуры, если в качестве фона - текстура. А поверх этого дела вывести новый текст. Либо целиком перерисовать весь битмап с нуля. Канва не содержит в себе информации об отдельных элементах, она представляет из себя холст с массивом пикселей разных цветов.

NIKOLAYY, а утечек памяти таким образом не будет? Все же битмап - это экземпляр класса, и просто так занулять ссылки на него, имхо, не очень правильно.
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
13.12.2016, 06:54
Цитата Сообщение от Nanotentacle Посмотреть сообщение
Все же битмап - это экземпляр класса, и просто так занулять ссылки на него, имхо, не очень правильно.
В данном случае это свойство, а объект должен сам позаботиться о тос что делать при таком изменении свойства
0
0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 35
13.12.2016, 19:49  [ТС]
YuryK, Если ты понимаешь в делфи, то помоему все ясно и понятно, различны лишь координаты, помоему точность координат никак не относиться к моей проблеме

Добавлено через 21 минуту
NIKOLAYY, если так прописываю, рисунок перестает выводиться в image совсем
0
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
13.12.2016, 19:54
Svetlaya666, весьма логично, что перестаёт. Вы ж битмап удаляете. После удаления все надо нарисовать заново, но уже с новыми значениями, и все будет красиво.
0
0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 35
13.12.2016, 20:43  [ТС]
Nanotentacle, не получается
....расчеты.....
(потом вывод картинки и текста)
Image1.Picture.Bitmap:=nil;
btmp:=TBitMap.Create;
btmp.LoadFromFile('D:\Diplom\Picture\Lef t.bmp');
image1.Canvas.Draw(20,20,btmp);
btmp.Free;
image1.Canvas.TextOut(130,15,FloatToStr( w) );
Image1.Canvas.TextOut(10,130,floatToStr( h));
Image1.Canvas.TextOut(100,250,floatToStr (t));
Image1.Canvas.TextOut(200,250,floatToStr (gl));

может не в то место в коде вставила?
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
13.12.2016, 20:51
С коленки и с комментариями:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure Image1Paint(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var   PaintText:String;// Переменная для текста
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Image1Click(Sender: TObject);
begin
 
end;
 
procedure TForm1.Image1Paint(Sender: TObject);
begin
//Событие OnPaint для Image решает или просто отрисовывает текст
  //перерисовывая и саму картинку
  Image1.Canvas.TextOut(10,10,PaintText);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  PaintText:='123456';  //Нажатие кнопки задает текст и заставляет
  Image1.Repaint;       //Картинку перерисоваться
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  PaintText:='';        //То же самое, но текст задается пустым
  Image1.Repaint;       //За счет чего происходит только обновление картинки
end;
 
end.
0
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
14.12.2016, 06:57
Вот честно, не лежит у меня сердце к занулению и удалению битмапа, который должен использоваться.

Делайте вот так каждый раз, как надо перерисовать новые числа:

Delphi
1
2
3
4
5
6
7
8
9
//Image1.Picture.Bitmap:=nil;
btmp:=TBitMap.Create; 
btmp.LoadFromFile('D:\Diplom\Picture\Left.bmp');
image1.Canvas.Draw(20,20,btmp);
btmp.Free;
image1.Canvas.TextOut(130,15,FloatToStr(w) );
Image1.Canvas.TextOut(10,130,floatToStr(h));
Image1.Canvas.TextOut(100,250,floatToStr(t));
Image1.Canvas.TextOut(200,250,floatToStr(gl));
и все будет хорошо. А в идеале сделать btmp глобальной переменной и исключить из этого кода строки
Delphi
1
2
3
4
btmp:=TBitMap.Create; 
btmp.LoadFromFile('D:\Diplom\Picture\Left.bmp');
...
btmp.Free;
0
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
14.12.2016, 08:53

Не по теме:

Че там не работает не понятно.. Я загрузил текст, почистил текст, затем снова загрузил и все работает..
Может ей надо заливкой под цвет фона заливать текст в имаге, может ей только половину текста нужно залить что бы какая то часть изображения осталась.. Может просто исходник посмотреть че там у нее творится и какие куски кода в каких местах стоят, просто может чел копирнул куски кода и не зная куда их ставить вставил куда нибудь наугад..


Delphi
1
2
3
4
5
//Загрузил текст:
image1.Canvas.TextOut(X, Y, 'Текст' );
 
//Почистил текст:
Image1.Picture.Bitmap:=nil;
0
 Аватар для Teodor7
53 / 53 / 5
Регистрация: 22.11.2016
Сообщений: 268
14.12.2016, 09:26
Вопрос неправильно сформулирован. На чем Svetlaya666, рисуете свой TextOut?
На чистом фоне, на рисунке, на векторной графике? Что было до отрисовки TextOut?
На чистом фоне Вам ответили - надо поверх старого текста нарисовать прямоугольник.
На рисунке предварительно скопировать подложку, фон. И при необходимости ей и затирать копированием.
Полезными функциями будут TextWidth() и TextHeigth().

А методы "удалить всё" - это круто!

Добавлено через 3 минуты
TextOut после отрисовки уже "принадлежит" Bitmapу.
Поэтому его не оторвать.
Можно весь процесс отрисовки вынести в процедуру и просто перерисовывать всё с новым TextOut и рисование до и после.

Можно использовать Label, который "плавает" отдельно от битмапа.
0
14.12.2016, 10:02

Не по теме:

NIKOLAYY, ещё раз: зачем занулять битмап, если на нем тут же планируется рисовать? На нем надо просто нарисовать, и все.

0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
14.12.2016, 13:59
Nanotentacle, для быстрой и полной очистки.
еще момент (который в данной задаче не имеет значения). если ты нарисовал что-то на имаге, потом изменил размер имага, то для рисования будет доступна область со старыми размерами, пока ты не занилишь свойство picture, тем самым пересоздав канву с новыми размерами.
это так, для общего развития
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.12.2016, 13:59
Помогаю со студенческими работами здесь

Как очищать и удалять элементы на странице?
День добрый! Очень нужна помощь. Столкнулся с проблемой. Есть страница, на эту страницу php методом загружаются div-ы. Их кол-во зависит...

Как правильно очищать вектор указателей
Привет Всем! Есть вопрос по вектору указателей, как правильно очищать память при таком случае очищение происходит существенно медленнее чем...

Нужно ли очищать термопласту,если да то как?
Вообщем после сборке ПК,походу заляпал разъём видюхи и материнки термопластой.Картинки есть.Видео есть- вроде в норме.Вообщем может...

Как заставить браузер очищать кэш сайта
Уже 4 часа пытаюсь разобраться как в файле .htaccess прописать команду чтобы браузер принудительно очищал кэш. Может у меня проблема в...

Как очищать ленточную форму в access 2010?
как очищать ленточную форму в access 2010. При запуске access запускается форма склад. Мне нужно сделать: Есть форма приход ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru