![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Доброго дня.
Задача довольно истоптаная - рисовать вертикально текст в ячейках грида. Но есть 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. |