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

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

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

Author24 — интернет-сервис помощи студентам
Привет всем.
Подскажите, как очищать 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2016, 20:30
Ответы с готовыми решениями:

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

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

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

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

26
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
12.12.2016, 20:32 2
перерисовать?
Refresh
Repaint
??
0
0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 35
12.12.2016, 20:34  [ТС] 3
а можно поподробнее?
как правильно прописать
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
12.12.2016, 20:57 4
Delphi
1
2
3
image1.Canvas.Refresh
//или
image1.Canvas.Repaint
0
0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 35
12.12.2016, 21:02  [ТС] 5
не помогло
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
12.12.2016, 21:25 6
вы нарисовали цветочек на листе бумаги
потом написали поверх слово "опа
как стереть слово?

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

Delphi
1
   Image1.Picture.Bitmap := nil;
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
13.12.2016, 01:15 9
Цитата Сообщение от 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
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
13.12.2016, 06:43 10
Svetlaya666, надо либо нарисовать поверх старого текста прямоугольник, соответствующий цвету заливки, либо скопировать соответствующий кусок текстуры, если в качестве фона - текстура. А поверх этого дела вывести новый текст. Либо целиком перерисовать весь битмап с нуля. Канва не содержит в себе информации об отдельных элементах, она представляет из себя холст с массивом пикселей разных цветов.

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

Добавлено через 21 минуту
NIKOLAYY, если так прописываю, рисунок перестает выводиться в image совсем
0
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
13.12.2016, 19:54 13
Svetlaya666, весьма логично, что перестаёт. Вы ж битмап удаляете. После удаления все надо нарисовать заново, но уже с новыми значениями, и все будет красиво.
0
0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 35
13.12.2016, 20:43  [ТС] 14
Nanotentacle, не получается
....расчеты.....
(потом вывод картинки и текста)
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));

может не в то место в коде вставила?
0
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
13.12.2016, 20:51 15
С коленки и с комментариями:
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
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
14.12.2016, 06:57 16
Вот честно, не лежит у меня сердце к занулению и удалению битмапа, который должен использоваться.

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

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
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
14.12.2016, 08:53 17

Не по теме:

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


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

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

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

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

Не по теме:

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

0
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
14.12.2016, 13:59 20
Nanotentacle, для быстрой и полной очистки.
еще момент (который в данной задаче не имеет значения). если ты нарисовал что-то на имаге, потом изменил размер имага, то для рисования будет доступна область со старыми размерами, пока ты не занилишь свойство picture, тем самым пересоздав канву с новыми размерами.
это так, для общего развития
0
14.12.2016, 13:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2016, 13:59
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru