Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вертикальные надписи в StringGrid


KIR ©   (2005-03-01 12:07:00) 

Народ, подскажите, как вывести содержимое строки StringGrid'а вертикально?


KIR   (2005-03-02 11:34:00) [1]

Делаю так:

     Canv.Brush.Style := bsClear;
     FillChar(lf, SizeOf(lf), Byte(0));
     lf.lfHeight := -11;
     lf.lfEscapement := 10 * 45;
     lf.lfOrientation := 10 * 45;
     lf.lfCharSet := DEFAULT_CHARSET;
     lf.lfFaceName := 'MS Sans Serif';
     Canv.Font.Handle := CreateFontIndirect(lf);

и ничего не меняется...
Делаю так:

...
     lf.lfHeight := 15;
...

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


clickmaker   (2005-03-02 11:20:00) [2]


> KIR   (02.03.05 10:16) [11]

а где имя шрифта? lfFaceName


KIR   (2005-03-02 10:16:00) [3]

Точнее так:

...
    lf.lfEscapement := 10 * 45;
    lf.lfOrientation := 10 * 45;...


KIR   (2005-03-01 17:13:00) [4]

Делаю так:

procedure TRepForm.StringGrid2DrawCell(Sender: TObject; ACol,
 ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  Canv: TCanvas;
  S: String;
  lf: LOGFONT;
  al: UINT;
begin
  Canv := TStringGrid(Sender).Canvas;
  S := TStringGrid(Sender).Cells[ACol,ARow];
  Canv.FillRect(Rect);
  al := DT_CENTER;
  If ARow = 0 then
  begin
     Canv.Brush.Style := bsClear;
     FillChar(lf, SizeOf(lf), Byte(0));
     lf.lfHeight := 11;
     lf.lfEscapement := 10 * 90;
     lf.lfOrientation := 10 * 90;
     lf.lfCharSet := DEFAULT_CHARSET;
     Canv.Font.Handle := CreateFontIndirect(lf);
  end;
  DrawTextEx(Canv.Handle, PChar(S),-1,Rect,al,nil);
end;

А результата нет... в чем беда?


begin...end   (2005-03-01 16:03:00) [5]

> KIR   (01.03.05 16:02) [8]

FillChar(lf, SizeOf(lf), 0) или ZeroMemory(@lf, sizeof(lf))


KIR   (2005-03-01 16:02:00) [6]

Так как же правильно написать в итоге? Если не сложно, можно прям в моем примере поправить...


clickmaker   (2005-03-01 15:56:00) [7]


>  FillChar(Addr(lf), SizeOf(lf), Byte(0)); //constant object
> cannot be passed as var parametr

не надо тут Addr
если уж по адресу, то так
ZeroMemory(@lf, sizeof(LOGFONT));


KIR   (2005-03-01 15:13:00) [8]

Что-то не выходит, хотя пример взят из справки D7...


KIR   (2005-03-01 15:11:00) [9]

procedure TRepForm.StringGrid2DrawCell(Sender: TObject; ACol,
 ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  Canv: TCanvas;
  S: String;
  lf: LOGFONT;
  al: UINT;
begin
  Canv := TStringGrid(Sender).Canvas;
  S := TStringGrid(Sender).Cells[ACol,ARow];
  Canv.FillRect(Rect);
  al := DT_LEFT or DT_WORDBREAK or DT_END_ELLIPSIS or DT_NOPREFIX;
  If ARow = 0 then
  begin
     Canv.Brush.Style := bsClear;
     FillChar(Addr(lf), SizeOf(lf), Byte(0)); //constant object cannot be passed as var parametr
     lf.lfHeight := 20;
     lf.lfEscapement := 10 * 45;
     lf.lfOrientation := 10 * 45;
     lf.lfCharSet := DEFAULT_CHARSET;
     Canv.Font.Handle := CreateFontIndirect(Addr(lf));
  end;
  DrawTextEx(Canv.Handle, PChar(S),-1,Rect,al,nil);
end;


KIR   (2005-03-01 12:29:00) [10]

спас!


clickmaker   (2005-03-01 12:20:00) [11]

CreateFontIndirect
logfont.lfOrientation


KIR   (2005-03-01 12:16:00) [12]

Можно чуть подробнее про ориентацию. Где ее выставлять?


clickmaker   (2005-03-01 12:09:00) [13]

OnDrawCell
ставишь нужную ориентацию и рисуешь текст сам


Наверх

Титульная страница Поиск, карта сайта Написать письмо