Pionowy tekst w nagłówku DBGrid

0

Witam

W jaki sposób zrobić pionowy napis w nagłówku Grida.
Doszedłem do tego że właściwość

DBGrid1.titlefont.Orientation:= 2700;

ustawia tekst w pionie jednak rysowanie zaczyna się w lewym górnym rogu komórki i tekst jest niewidoczny.
Jak się za to zabrać aby pionowy tekst nagłówka wyświetlał się na środku komórki ?

0

Spróbuj tego:
orientation := -897

A jednym (innym) z pól nagłówka daj Baaaaaardzo dużą czcionkę, natomiast w reszcie pól normalnie.

Osobiście jednak uważam że chyba lepiej by było pokombinować z nagłówkiem tak jak wstawia się np. progres bara do komórek. Ale nie wiem jak to zrobić.
Być może Xdbgrid załatwiłby ten problem bo podobno jest niezły, ale nie używam go więc nie wiem.

Powodzenia.

0

Niestety to rozwiązanie sprawdza się tylko przy odpowiednio szerokich kolumnach.
Jeśli kolumna ma małą szerokość np 40, to napis nie jest na środku, no chyba że zmiejsze rozmiar czcionki na 4, wtedy napis jest na środku ale tekstu nie przeczytasz :)

Komponentów nie mogę doinstalować - turbo delphi explorer.

0

Grid'a czy DBGrid'a ? bo patrząc na tytuł i temat sam nie wiem.

Generalnie możesz potraktować DBGrid'a jak StringGrida (rzutowanie) i w ten sposób ustalić wysokość wiersza nagłówkowego (RowHeights[0]). Potem proponował bym pobawić się Canvas'em i namalować sobie ten tekst jak tylko chcesz - choćby i na ukos (keywords: DrawText, TLogFont, CreateFontIndirect).

b

0

Chodzi o DBGrida.

U mnie jest metoda textout (nie mam drawtext) dla canvasa.

dbgrid1.canvas.textout(x,y,'')

Chętnie bym porysował sobie bezpośrednio na canvasie, skąd jednak pobrać współrzędne kolumn, zliczać w pętli wszystkie poprzedzające właściwości width ?

x2:= dbgrid1.columns[0].width + dbgrid1.columns[1].width

czy jakoś łatwiej można ?

========================== EDIT ==========================

Rozwiązałem to w ten sposób ustawiając dodatkowo tekst pionowo:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
Begin
DBGrid1.Canvas.TextRect(rect,rect.left,80, dbgrid1.Columns[datacol].title.caption);
end;

Wszystko jest dobrze do czasu przewinięcia okna w bok, wtedy część tekstu znika, część się pojawia.
Rozwiązaniem jest DBGrid1.repaint, nie wiem jednak pod jakie zdarzenie to podpiąć żeby działało po przewinięciu poziomego scrolla.

1 użytkowników online, w tym zalogowanych: 0, gości: 1