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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2009, 23:49   #1
13th
Форумчанин
 
Аватар для 13th
 
Регистрация: 31.12.2008
Сообщений: 634
По умолчанию Выравнивание иобновление текста в TImage

Нарооод!!!!
Снова взываю к вам)))
как "наносить " текст - я вроде научился, но не пойму две вещи, но сначала код.
Код:
Form1.Button1Click(Sender:Tsender)
var i:integer;
dd:string;
begin
with Form1.Image1 do
begin

for i:=0 to Form1.Memo1.Lines.Count-1 do
begin

dd:=Form1.Memo1.Lines.String[i];
Canvas.textOut(100,15*i,dd);

end;
end;
end;
Значит проблема номер один:
После изменения текста в Мемо - он накладывается на предыдущий текст, в книге написано - есть два метода Repaint and invalidate , однако не один из них не работает.
Проблема номер два - как сделать так, что бы текст не выходил за рамки картинки? То есть допустим пример - чтоб вел себя как текст в Div'е с четко заданной шириной, как при HTML разметке
Возможно всё
Пишу обо всем
13th вне форума Ответить с цитированием
Старый 17.01.2009, 00:54   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Могу предложить мой любимый вариант для рисования текста на канве:
Код:
procedure TForm1.WriteText(ACanvas: TCanvas; ARect: TRect; DX, DY: Integer;
  const Text: string; Alignment: TAlignment);
const
  AlignFlags : array [TAlignment] of Integer =
    ( DT_LEFT or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX,
      DT_RIGHT or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX,
      DT_CENTER or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX );
var
  B, R: TRect;
  I, Left: Integer;
begin
  I := ColorToRGB(ACanvas.Brush.Color);
  if GetNearestColor(ACanvas.Handle, I) = I then
  begin                    
   case Alignment of
      taLeftJustify:
        Left := ARect.Left + DX;
      taRightJustify:
        Left := ARect.Right - ACanvas.TextWidth(Text) - 3;
    else
    Left := ARect.Left + (ARect.Right - ARect.Left) shr 1
        - (ACanvas.TextWidth(Text) shr 1);
    end;
    ExtTextOut(ACanvas.Handle, Left, ARect.Top + DY, ETO_OPAQUE or
      ETO_CLIPPED, @ARect, PChar(Text), Length(Text), nil);
  end;
  end;
Потом будем его использовать где угодно следующим образом:
WriteText(StringGrid1.Canvas, Rect, 2, 2, StringGrid1.Cells[Col,Row], al);

Какое угодно выравнивание...
Это для стринггрида, как вы догадались.
А слабо для себя использовать? Где ваша догадливость?
А ну-ка! Чем вы хуже нас?

Последний раз редактировалось rpy3uH; 19.01.2009 в 18:26.
mihali4 вне форума Ответить с цитированием
Старый 17.01.2009, 00:54   #3
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

1.Возможно вы непоставили перерисовывать текст при изменении содержимого memo
На Memo1.OnChange
Код:
Image1.repaint;
Ой, меня уже опередили
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 17.01.2009, 00:56   #4
ViktorXP
Форумчанин
 
Аватар для ViktorXP
 
Регистрация: 24.11.2006
Сообщений: 108
По умолчанию

Цитата:
есть два метода Repaint and invalidate , однако не один из них не работает.
все работает. только нужно правильно пользоватся. но тебе это не к чему
тебе нужна
Цитата:
Canvas.FillRect(....);
Цитата:
Проблема номер два - как сделать так, что бы текст не выходил за рамки картинки?
есть системная которая обрезает строку (тоесть выводит ее определенной строки а в конце, если она больше, ставит три точки), а чето наподобие DIV нету. это только самостоятельно высчитывать. (кстате подобных примеров в нете валом)
ViktorXP вне форума Ответить с цитированием
Старый 17.01.2009, 00:57   #5
13th
Форумчанин
 
Аватар для 13th
 
Регистрация: 31.12.2008
Сообщений: 634
Радость

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Какое угодно выравнивание...
Это для стринггрида, как вы догадались.
А слабо для себя использовать? Где ваша догадливость?
А ну-ка! Чем вы хуже нас?
Вообщее не понял смысл ))))))))) но за пример спасибо, буду разбирать

2 Dj_smart - всё гениальное просто . Спасибо

ту Виктор ХР - по поводу методов не сомневаюсь что они работают, но пока руки кривоваты))
Возможно всё
Пишу обо всем

Последний раз редактировалось 13th; 17.01.2009 в 01:00.
13th вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выравнивание текста, моргающий курсор alikon1 Общие вопросы Delphi 6 17.04.2009 00:41
Верт. выравнивание текста в дивах 13th HTML и CSS 21 12.01.2009 23:17
Выравнивание искаженного текста RealKultura Общие вопросы C/C++ 0 19.12.2008 23:25
Выравнивание текста SeregaIRK Общие вопросы Delphi 4 21.07.2008 15:17
выравнивание текста по ширине Алёна Общие вопросы Delphi 6 18.04.2007 11:31