|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Ввод текста вертикально StringGrid
Доброго дня.
Задача довольно истоптаная - рисовать вертикально текст в ячейках грида. Но есть 2 варианта - наклон всей строки на 90 или буквы стоят нормально а пишется сверху вниз слово(типо 1 буква в каждой строке - многострочная ячейка). Это боле- менее получается, но глючит... примеры есть но пока висяк... то пол буквы видно то вообще пропадает текст после ввода. Но вопрос основной такой - как наклонить ещё и курсор во время ввода???, а то колонка узкая и вводя текст видно только 1 букву. При нажатии Enter он только появляется в длину- высоту вдоль колонки. Ну или как вариант при редактировании такой ячейки появлялось бы микро окно с полем EDIT - туда ввёл горизонтально что надо а ано уже прорисовалось вертикально где надо. - как перехватить этот момент??? |
#2
|
||||
|
||||
При многострочной ячяе больно промежутки между букофф большие образуются, поэтому лучше текст рисовать посредством .canvas.textout или .canvas.textrect либо .drawtext
З.Ы. Вот пример через textout Код:
var t: LOGFONT; hf: HFONT; f: TFont; procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); begin // И используя его рисуем на каве ячеек. with TStringGrid(sender).Canvas do begin Font:= f; with aRect do TextOut(Left+(Right-Left) div 2, Top, 'DelphiSources'); end; end; procedure TForm1.FormCreate(Sender: TObject); begin // Создаем повернутый фонт with t do begin lfHeight:= 20; lfOrientation:= 90; // на 90 градусов lfEscapement:= 900; lfWeight:= FW_NORMAL; end; hf:= CreateFontIndirect(t); F:= TFont.Create; F.Handle:= hf; end; procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin f.Free; DeleteObject(hf); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 19.04.2017 в 16:11. |