Конференция "Прочее" » Как повернуть текст на 90 градусов? [D7, WinXP]
 
  • [i2e] (12.09.08 09:00) [0]
    Нашел способ с помощью TLogFont, но как-то весьма хлопотно получается.
    Можно ли это сделать быстро и достаточно просто? Для Label или для StaticText.
  • KilkennyCat © (12.09.08 10:02) [1]
    а программировать вообще хлопотно.
  • TLogFont (12.09.08 10:04) [2]
    Через создание меня делай.
    Обещаю вращать быстро.
  • Anatoly Podgoretsky © (12.09.08 10:10) [3]
    [i2e]   (12.09.08 09:00)  
    Заплати кому ни будь, количество хлопот при этом стремится к нулю.
  • Vlad Oshin © (12.09.08 10:13) [4]

    > Anatoly Podgoretsky ©   (12.09.08 10:10) [3]

    это надо кошелек открывать, доставать, закрывать.. весьма хлопотно получается
  • KilkennyCat © (12.09.08 10:14) [5]

    > Vlad Oshin ©   (12.09.08 10:13) [4]


    ... отдавать....
  • brother © (12.09.08 10:18) [6]
    еще и накапливать, чтоб отдавать)
  • [i2e] (12.09.08 10:26) [7]
    какие все глумливые, наверно поддали в честь праздника?
    ладно, сам спросил, сам и расскажу, как сделал.
    благо текст хоть и немалый, но статичный, просто повернул его изображение в Paint и эту картинку разместил по месту.
    количество хлопот оказалось минимально.
    всем коллегам огромная благодарность за бесценные советы.
  • brother © (12.09.08 10:34) [8]
    > Как повернуть текст на 90 градусов?


    > просто повернул его изображение в Paint и эту картинку разместил
    > по месту.

    значит, каков вопрос, таков ответ...
  • Anatoly Podgoretsky © (12.09.08 10:40) [9]
    > [i2e]  (12.09.2008 10:26:07)  [7]

    Вот так тебе и операцию по удалению гланд будут делать.
  • KilkennyCat © (12.09.08 10:54) [10]
    А Микрософт  - отсталые... по-прежнему, даже в дотнетовском мсдне считают, что нужен логфонт...
  • Vlad Oshin © (12.09.08 11:22) [11]
    есть вариант

    for i 1..length(s)
    Canvas.textout(x,y,s[i])
    y:=y-Canvas.Font.Height

    только залочить как-то канву потом
  • [i2e] (12.09.08 12:33) [12]
    ребяты, поглумились на славу.
    из всей переписки лишь один совет в тему.

    ситуация мне напоминает знаете что?
    машина есть? вот едешь по дороге весь такой правильный, пешеходов на поворотах пропускаешь, кому надо дорогу даешь, из ряда в ряд не прыгаешь. правильный, не мешающий никому водитель, образец.
    и вдруг, разогнавшись чуть больше, вылетаешь на пешеходник, например.
    и какая-нибудь курва начинает базлать: а! носятся тут, житья нет! наворовали денег, накупили машин! ...и т.д. потом покажет средний палец, чего-нибудь еще посоветует.
    и такая досада берёт, когда получишь такую хрень ни за что.
    и думаешь, да идите вы в ж.., уважаемые, буду как все, таким же быдлом. и погнали...

    ребята, давайте жить дружно. и уважать друг друга, по крайней мере своих коллег.

    всем спасибо.
  • {RASkov} © (12.09.08 12:39) [13]
    > [12] [i2e]   (12.09.08 12:33)

    Хех.... прикольно.... хорошо хоть бабку(или кого-там) не сшиб :)

    > и уважать друг друга

    Вот с этого и нужно было начинать.
    Теперь перечитай свой пост [0] и посмотри какая реализация[7] задуманного тебя устроила.... И где тут уважение?
  • KilkennyCat © (12.09.08 12:42) [14]
    продай машину, займись программированием.
  • Anatoly Podgoretsky © (12.09.08 13:36) [15]
    Правила дорожного движения обсуждаются в Прочее, была там такая длинная ветка - можно или нельзя
  • KSergey © (12.09.08 14:38) [16]
    Во-первых, мне не понятно недовольство автора.
    Во-вторых мне не понятно что такое "повернуть"? Вариант из [11] текст не поворачивает, вообще-то, но может автора и это устроит?

    А с картинкой повернутой - это плохо. У пользователя могут быть настроены нестандартные шрифты или увеличенные.
  • han_malign © (12.09.08 16:50) [17]
    SetWorldTransform
  • PEAKTOP © (13.09.08 02:16) [18]
    > Можно ли это сделать быстро и достаточно просто? Для Label
    > или для StaticText


    Курить хэлп по классу TCanvas, особенно методы TextHeight и TextWidth. Идея должна придти сама...

    Если так и не пришла, то создаем Graphics.TBitmap в памяти, заливаем белым, выводим текст на нем чёрным. Непосредственно на объекте - копируем пикселы с поворотом. Canvas.Pixels[x,y] := tmpBitmap.Canvas.Pixels[y,x];

    Метод годится только для поворота на 90, 180 и 270 градусов.
  • GrayFace © (13.09.08 20:48) [19]
    PEAKTOP ©   (13.09.08 2:16) [18]
    Непосредственно на объекте - копируем пикселы с поворотом. Canvas.Pixels[x,y] := tmpBitmap.Canvas.Pixels[y,x];

    Мало того, что тормоза, дак еще и при каждой перерисовке.
  • GrayFace © (13.09.08 20:55) [20]
    Кстати, тут нужен не TextWidth, а ширина Lebel'а, т.к. он считает ширину текста внутри строки, а тут нужно еще учитывать края - при шрифте italic реально нужная ширина больше, чем TextWidth.
  • Renegat © (13.09.08 21:07) [21]
    Вот, на скорую руку:

    program Hello;
    uses Windows;

    const
     PHS = 'Hello, world!';
     FNS = 'Verdana';

    var
     DC, WW, WH, TL, MF, TF: DWORD;

    function BuildFont(FName:PChar; FSize:word; Width:LongInt; i, u:boolean; Angle:Integer):HFONT;
    var
     LF: LOGFONT;
    begin
     FillChar(LF, SIZEOF(LOGFONT), 0);
     with LF do begin
       lfHeight         := -FSize;
       lfWeight         := Width;
       lfItalic         := abs(longInt(i));
       lfUnderline      := abs(longInt(u));
       lfCharSet        := DEFAULT_CHARSET;
       lfOutPrecision   := OUT_DEFAULT_PRECIS;
       lfClipPrecision  := CLIP_DEFAULT_PRECIS;
       lfQuality        := DEFAULT_QUALITY;
       lfPitchAndFamily := FF_DONTCARE or DEFAULT_PITCH;
       lfEscapement     := Angle;
       lfOrientation    := Angle;
     end;
     lstrcpy(LF.lfFaceName, FName);
     Result:=CreateFontIndirect(LF);
    end;

    begin
     Randomize;
     DC:=GetDC(0);
     WW:=GetSystemMetrics(SM_CXSCREEN);
     WH:=GetSystemMetrics(SM_CYSCREEN);
     TL:=Length(PHS);
     MF:=BuildFont(FNS, 17, FW_NORMAL, False, False, Random(45)*10);
     TF:=SelectObject(DC, MF);

     repeat
       if GetAsyncKeyState(VK_ESCAPE)<0 then break;

       SetBkMode(DC, TRANSPARENT);
       SetTextColor(DC, RGB(Random(256), Random(256), Random(256)));
       TextOut(DC, Random(WW), Random(WH), PHS, TL);

       Sleep(10);
     until 1=0;

     SelectObject(DC, TF);
     InvalidateRect(0, nil, True);
     ReleaseDC(0, DC);
     DeleteDC(DC);
     DeleteObject(MF);
    end.



    Должно сработать.
    зы. Опять же, извиняюсь за выкладывание длинных листингов...
  • Renegat © (13.09.08 21:09) [22]
    ззы. DeleteDC - выкинуть. Он тут не нужен =)
 
Конференция "Прочее" » Как повернуть текст на 90 градусов? [D7, WinXP]
Есть новые Нет новых   [134442   +15][b:0][p:0.002]