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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 22:41   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Вопрос Рисуется хвост за текстом (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,759
По умолчанию

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

Не, не помогает. Пробовал.
----
Дописал код так:
Код:
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 байт, 133 просмотров)
Тип файла: png Во время перемещения через UpDown23.png (380 байт, 131 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

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

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

Код:
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
Сообщений: 689
По умолчанию

Ну тогда уже так:
Код:
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
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

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

Это из-за режима кисточки:
Код:
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
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

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

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


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не рисуется битмап 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 Паскаль, Turbo Pascal, PascalABC.NET 0 02.05.2011 21:04
Не рисуется спрайт в Delphix DOLBY Мультимедиа в Delphi 0 01.04.2009 23:09