Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 15.05.2012, 22:41   #1
artemavd
Модератор
Заслуженный модератор
 
Регистрация: 05.06.2008
Адрес: г.Иркутск
Сообщений: 4,168
Репутация: 819
Вопрос Рисуется хвост за текстом (TextOut)

День добрый! Такая ситуация. Вывожу текст на img2: TImage так:
Код:

procedure TForm13.sUpDown2Click(Sender: TObject; Button: TUDBtnType);
begin
//заголовок
 Form13.img2.Canvas.Font.Color:=Form13.sEdit15.Font.Color;
 Form13.img2.Canvas.Font.Name:=Form13.sEdit15.Font.Name;
 Form13.img2.Canvas.Font.Style:=Form13.sEdit15.Font.Style;
 Form13.img2.Canvas.Font.Size:=Form13.sEdit15.Font.Size;
 Form13.img2.Canvas.TextOut(StrToInt(Form13.sEdit13.Text),
                            StrToInt(Form13.sEdit14.Text),
                            Form13.sEdit15.Text);
end;

Аналогичный код и если двигать через второй UpDown1 влево-вправо. Если UpDown2 нажата стрелочка вниз, то при отрисовке текста за некоторыми буквами остаются линии и тянутся вслед за текстом. При отрисовке текста влево-вправо-вверх такого не наблюдается. В чем тут дело? Как можно очистить только что нарисованный текст и добавить новый? И как установить прозрачность текста, который выводится через TextOut?
__________________
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума   Ответить с цитированием
Старый 16.05.2012, 08:08   #2
FaTaL
Профессионал
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,728
Репутация: 458
По умолчанию

Repaint компонента или формы не?
FaTaL вне форума   Ответить с цитированием
Старый 16.05.2012, 08:35   #3
artemavd
Модератор
Заслуженный модератор
 
Регистрация: 05.06.2008
Адрес: г.Иркутск
Сообщений: 4,168
Репутация: 819
По умолчанию

Не, не помогает. Пробовал.
----
Дописал код так:
Код:

procedure TForm13.sUpDown23Click(Sender: TObject; Button: TUDBtnType);
begin
//факс
  Form13.img2.Repaint;
  Form13.img2.Canvas.Brush.Style:=bsClear;
  Form13.img2.Canvas.Font.Color:=Form13.sLabel36.Font.Color;
  Form13.img2.Canvas.Font.Name:=Form13.sLabel36.Font.Name;
  Form13.img2.Canvas.Font.Style:=Form13.sLabel36.Font.Style;
  Form13.img2.Canvas.Font.Size:=Form13.sLabel36.Font.Size;
  SetBkMode(Form13.img2.Canvas.Handle,TRANSPARENT);
  Form13.img2.Canvas.TextOut(StrToInt(Form13.sEdit38.Text),
                                StrToInt(Form13.sEdit39.Text),
                                'Факс: ' + Form13.sEdit11.Text);
end;

текст выводится прозрачным (картинка №1), но при изменении его координат через UpDown23 за текстом остается сплошной цвет что-то типа (картинка №2) заливки.
Изображения
Тип файла: png До перемещения через UpDown23.png (382 байт, 41 просмотров)
Тип файла: png Во время перемещения через UpDown23.png (380 байт, 41 просмотров)
__________________
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 16.05.2012 в 09:14.
artemavd вне форума   Ответить с цитированием
Старый 16.05.2012, 09:41   #4
3D Hunter
Сумрачная тень
Участник клуба
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Адрес: Россия
Сообщений: 677
Репутация: 182
По умолчанию

Проблема у вас в следующем: перед сдвигом текста вы не перерисовываете изображение. Т.е. сначала нужно стереть текст предыдущий с битмапа (вызвать Draw() с исходным изображением), а потом вызвать TextOut() уже нового сдвинутого текста. В противном случае у вас получается шлейф наложения.
__________________
"ковыряю изнутри" (с)
3D Hunter вне форума   Ответить с цитированием
Старый 16.05.2012, 09:46   #5
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,762
Репутация: 2097
По умолчанию

Код:

form12.img2.canvas.fillrect(Rect(0,0,100,100));
form12.img12.canvas.TextOut(.......);

если нет исходной картинки иначе вариант предыдущего поста.
__________________
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 16.05.2012 в 09:48.
evg_m вне форума   Ответить с цитированием
Старый 16.05.2012, 09:50   #6
3D Hunter
Сумрачная тень
Участник клуба
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Адрес: Россия
Сообщений: 677
Репутация: 182
По умолчанию

Ну тогда уже так:
Код:

procedure TForm13.sUpDown23Click(Sender: TObject; Button: TUDBtnType);
begin
//факс
  Form13.img2.Repaint;
  Form13.img2.Canvas.Brush.Style:=bsClear;
  Form13.img2.Canvas.Font.Color:=Form13.sLabel36.Font.Color;
  Form13.img2.Canvas.Font.Name:=Form13.sLabel36.Font.Name;
  Form13.img2.Canvas.Font.Style:=Form13.sLabel36.Font.Style;
  Form13.img2.Canvas.Font.Size:=Form13.sLabel36.Font.Size;
  Form13.img2.Canvas.FillRect(img2.Canvas.ClipRect);
  SetBkMode(Form13.img2.Canvas.Handle,TRANSPARENT);
  Form13.img2.Canvas.TextOut(StrToInt(Form13.sEdit38.Text),StrToInt(Form13.sEdit39.Text),'Факс: ' + Form13.sEdit11.Text);
end;

__________________
"ковыряю изнутри" (с)
3D Hunter вне форума   Ответить с цитированием
Старый 16.05.2012, 10:54   #7
artemavd
Модератор
Заслуженный модератор
 
Регистрация: 05.06.2008
Адрес: г.Иркутск
Сообщений: 4,168
Репутация: 819
По умолчанию

ХЗ, но шлейф все равно рисуется за текстом
__________________
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума   Ответить с цитированием
Старый 16.05.2012, 12:40   #8
3D Hunter
Сумрачная тень
Участник клуба
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Адрес: Россия
Сообщений: 677
Репутация: 182
По умолчанию

Это из-за режима кисточки:
Код:

Form13.img2.Canvas.Brush.Style:=bsClear;

Поставьте bsSolid.

Простой пример:
Код:

procedure TForm1.FormCreate(Sender: TObject);
begin
  with Image1.Canvas do
  begin
    Brush.Color:=clBlue;
    Brush.Style:=bsSolid;
    FillRect(ClipRect);
    Font.Color:=clYellow;
  end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  with Image1.Canvas do
  begin
    FillRect(ClipRect);
    TextOut(x,y,'text');
  end;
end;

Замените на bsClear - перерисовка перестанет работать.
__________________
"ковыряю изнутри" (с)

Последний раз редактировалось 3D Hunter; 16.05.2012 в 12:43.
3D Hunter вне форума   Ответить с цитированием
Старый 16.05.2012, 17:27   #9
artemavd
Модератор
Заслуженный модератор
 
Регистрация: 05.06.2008
Адрес: г.Иркутск
Сообщений: 4,168
Репутация: 819
По умолчанию

Здорово! Спасибо 3D Hunter . Заработало. Только объясни: почему ранее загруженная картинка в дизайнере становится просто белой и исчезает? Надпись двигается как надо, а вот задний фон - белый, а должна быть картинка.
__________________
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума   Ответить с цитированием
Старый 16.05.2012, 17:37   #10
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Адрес: RF Moscow
Сообщений: 5,398
Репутация: 2468

icq: 438888048
По умолчанию

Ее нужно каждый раз заново рисовать, иначе она "затирается" Fillrect'ом.
Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
(вызвать Draw() с исходным изображением)
__________________
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не рисуется битмап Jugger Win Api 2 03.04.2012 15:15
Pascal хвост змейки zhenka619 Помощь студентам 1 30.12.2011 14:01
Хвост для кометы X@OC JavaScript, Ajax 0 29.07.2011 10:34
очередь с указателем на хвост и голову Anny_Apple Паскаль 0 02.05.2011 21:04
Не рисуется спрайт в Delphix DOLBY Мультимедиа в Delphi 0 01.04.2009 23:09


23:42.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru