Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Вертикальный текст


Автор: ksili 30.3.2006, 04:27
Как на канве отрисовать вертикальный текст? Чтобы как обычное слово, но повёрнутое на 90 градусов. В стандартных средствах обнаружил только возможность писать справа налево

Автор: sexton 30.3.2006, 08:49
Если текст на канве, то вот тебе цитата из бессмертного drkb (на билдер вроде не проблема перегнать):
Цитата

var
  Hfont: Thandle;
  logfont: TLogFont;
  font: Thandle;
  count: integer;
begin
  LogFont.lfheight := 30;
  logfont.lfwidth := 10;
  logfont.lfweight := 900;
  LogFont.lfEscapement := -200;
  logfont.lfcharset := 1;
  logfont.lfoutprecision := out_tt_precis;
  logfont.lfquality := draft_quality;
  logfont.lfpitchandfamily := FF_Modern;
  font := createfontindirect(logfont);
  Selectobject(Form1.canvas.handle, font);
  SetTextColor(Form1.canvas.handle, rgb(0, 0, 200));
  SetBKmode(Form1.canvas.handle, transparent);
  {textout(form1.canvas.handle,10,10,'Повернутый',7);}
  for count := 1 to 100 do
  begin
    canvas.textout(Random(form1.width), Random(form1.height), 'Повернутый');
    SetTextColor(form1.canvas.handle, rgb(Random(255), Random(255),
      Random(255)));
  end;
  deleteobject(font);
end;


Автор: Evgesha 17.5.2006, 21:50
Цитата(sexton @  30.3.2006,  08:49 Найти цитируемый пост)
на билдер вроде не проблема перегнать


 smile 
Как раз и проблема может кто поможет? 

Автор: _hunter 18.5.2006, 10:43
с чем именно проблема? функуии не меняются; вместо ":=" пиши "="; все из var' а позаноси в {}; все.
 

Автор: sexton 18.5.2006, 12:04
еще кое-где поменять . на -> 

Автор: Evgesha 18.5.2006, 15:27
 smile 
Не получается у меня хоть лопни 

Автор: _hunter 18.5.2006, 15:36
что именно не получается? 

Автор: Evgesha 18.5.2006, 15:52
Половину кода перевел а начиная со строки   font = CreateFontIndirect(logfont); не могу

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{

  THandle  Hfont;
  TLogFont logfont ;
  THandle font;
  int count;
  logfont.lfHeight = 30;
  logfont.lfWidth = 10;
  logfont.lfWeight = 900;
  logfont.lfEscapement = -200;
  logfont.lfCharSet = 1;
  logfont.lfOutPrecision = OUT_TT_PRECIS;
  logfont.lfQuality = DRAFT_QUALITY;
  logfont.lfPitchAndFamily = FF_MODERN;

  font = CreateFontIndirect(logfont);
  SelectObject(Form1->Canvas->Handle, font);
  SetTextColor(Form1->Canvas->Handle, RGB(0, 0, 200));
  SetBKmode(Form1->Canvas->Handle, Transparent);
  {textout(Form1->canvas->handle,10,10,"Text",7);}
  for count = 1 to 100 do
  {
    canvas.textout(Random(Form1->width), Random(Form1->height), "Perevernutij");
    SetTextColor(Form1->Canvas->handle, rgb(Random(255), Random(255),
      Random(255)));
  };
  deleteobject(font);
};
}
 

Автор: Romikgy 18.5.2006, 16:02
font = CreateFontIndirect(&logfont);
а так? 

Автор: Evgesha 18.5.2006, 16:17
Ты будешь смеяться но я только что в хелбе тоже самое нашел все равно ошибка 

Автор: Evgesha 18.5.2006, 16:33
 smile  smile  smile  smile  smile  

Автор: Evgesha 18.5.2006, 16:50
 smile  Все проблему решил  smile  Вот код кому надо:
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  LOGFONT n;

    Canvas->Brush->Style = bsClear;
    ZeroMemory(&n, sizeof(LOGFONT));

    n.lfHeight = 20;
    n.lfEscapement = 10 * 90; //------------------- A zdes gradusi stavit
    n.lfOrientation = 10 * 45;
    n.lfCharSet = DEFAULT_CHARSET;
    strcpy(n.lfFaceName, "Tahoma");

    Canvas->Font->Handle = CreateFontIndirect(&n);
    Canvas->TextOut(100, 100, "Rotated text");
}
 

Автор: Romikgy 18.5.2006, 17:01
А что за ошибку пишет? 

Автор: Evgesha 18.5.2006, 17:16
Где 

Автор: Romikgy 19.5.2006, 08:29
Evgesha, уже проехали, эта мессагу надо вставить до твоей 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)