Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема при отображении текста в StringGrid, Проблемы при выводе вертикального текста 
:(
    Опции темы
faost
Дата 11.3.2005, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 5.11.2004

Репутация: нет
Всего: 2



В 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 - при нажатии кнопки все будет работать.

В чем ошибка?
--------------------
Если у вас нет проблем, значит вы уже умерли
PM MAIL   Вверх
Satana
Дата 11.3.2005, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

Репутация: 1
Всего: 5



Попробуй вставить эту процедуру в OnDrawCell по идее должно сработать.

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

Это сообщение отредактировал(а) Satana - 11.3.2005, 23:56


--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
Santer
Дата 12.3.2005, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.3.2005

Репутация: нет
Всего: нет



faost,
проблема в том, что после вызова OnShow происходит вызов OnPaint, и все, что ты нарисовал до этого, стирается
PM MAIL   Вверх
faost
Дата 12.3.2005, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 5.11.2004

Репутация: нет
Всего: 2



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

Если вставляю ее в OnPaint - вертикальный текст рисуется, но потом сразу пропадает, а в OnDrawCell - слишком много раз вызывается процедура, которая делает одно и тоже, что приводит просто к тормозам
--------------------
Если у вас нет проблем, значит вы уже умерли
PM MAIL   Вверх
Satana
Дата 13.3.2005, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

Репутация: 1
Всего: 5



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


--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
faost
Дата 13.3.2005, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 5.11.2004

Репутация: нет
Всего: 2



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

По идее так правильно, но почему-то при первом открытии рисуются не все или вообще ничего, но при следующих открытиях окна - все выводиться нормально.
--------------------
Если у вас нет проблем, значит вы уже умерли
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.