Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проблема при отображении текста в StringGrid


Автор: faost 11.3.2005, 21:22
В FormShow вызываю

Код

DrawVerticalTextInCell(sStringGrid, 0, 0, 'VerticalText');


Функция вывода вертикальной надписи в ячейке StringGrid-a:
Код

procedure DrawVerticalTextInCell(StringGrid: TStringGrid; ACol,
  ARow: Integer; Text: String);
var
  LogFont: TLogFont;
  Rect: TRect;
begin
  Rect := sgHeader.CellRect(ACol, ARow);

  FillChar(LogFont, SizeOf(LogFont), 0);

  LogFont.lfHeight := 14;
  LogFont.lfWeight := 1;
  LogFont.lfEscapement := 900;
  LogFont.lfCharset := 1;
  LogFont.lfFaceName := 'Verdana';
  LogFont.lfOutprecision := out_tt_precis;
  LogFont.lfQuality := draft_quality;
  LogFont.lfPitchandfamily := FF_Modern;

  DrawVerticalText(StringGrid.Canvas, Rect.left, Rect.Bottom, Text, LogFont, clWhite);
end;


Функция вывода вертикального текста:

Код

procedure DrawVerticalText(Canvas: TCanvas; X, Y: Integer; Text: String; LogFont: TLogFont; Color: TColor);
var
  Font : hFont;
  F : TFont;
begin
  Font := CreateFontIndirect(LogFont);
  F := TFont.Create;
  F.Handle := Font;
  Canvas.Font := F;
  Canvas.Brush.Color := Color;
  Canvas.TextOut(X, Y, Text);
  F.Free;
  DeleteObject(Font);
end;


Надпись в ячейке не выводится. Но если создать на форме, допустим Button, и вписать в ButtonClick вписать такой же вызов DrawVerticalTextInCell как и в FormShow - при нажатии кнопки все будет работать.

В чем ошибка?

Автор: Satana 11.3.2005, 23:50
Попробуй вставить эту процедуру в OnDrawCell по идее должно сработать.

ЗЫ Ну вот ща попробовал выводит только тебе нужна будет еще высоту строки подбирать.

Автор: Santer 12.3.2005, 07:15
faost,
проблема в том, что после вызова OnShow происходит вызов OnPaint, и все, что ты нарисовал до этого, стирается

Автор: faost 12.3.2005, 22:53
У меня одна большая процедура Init, которая формирует динамически StringGrid и, в том числе, рисует вертикальный текст.

Если вставляю ее в OnPaint - вертикальный текст рисуется, но потом сразу пропадает, а в OnDrawCell - слишком много раз вызывается процедура, которая делает одно и тоже, что приводит просто к тормозам

Автор: Satana 13.3.2005, 00:37
faost
Объяви глобальную булевую переменную если она false то ставишь ее в тру и выводишь процедуру если она уже тру то не выводи процедуру да и делов то?

Автор: faost 13.3.2005, 19:18
Цитата(Satana @ 13.3.2005, 00:37)
faost
Объяви глобальную булевую переменную если она false то ставишь ее в тру и выводишь процедуру если она уже тру то не выводи процедуру да и делов то?

По идее так правильно, но почему-то при первом открытии рисуются не все или вообще ничего, но при следующих открытиях окна - все выводиться нормально.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)