Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2010, 17:03   #1
Александр Маркелов
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 14
По умолчанию Выравнивание данных в ячейках StringGrid

Привет всем! Подскажите: как выровнять данные(цифры) посередине в ячейках StringGrid.
Александр Маркелов вне форума Ответить с цитированием
Старый 18.06.2010, 17:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот для себя делал:
Код:
 // Вывод с переносом слов
 procedure DrawTextInRect(AText:String;ACanvas:TCanvas;ARect:TRect;Centered:Boolean=false);

var l,i,x,y:integer;s:string;
 function GetLenRect:Integer;begin Result:=ARect.Right-ARect.Left;end;
 function GetHeigthRect:Integer;begin Result:=ARect.Bottom-ARect.Top;end;
 function GetRows:Integer; begin  Result:=ACanvas.TextWidth(AText) div GetLenRect+1; end;
 function CenterByWidth:integer; begin  Result:=(GetLenRect-ACanvas.TextWidth(s)) div 2; end;
 function CenterByHeight:integer;
 begin
  Result:=(GetHeigthRect div 2)-(GetRows*ACanvas.TextHeight('W') div 2);
 end;
begin s:='';l:=1;  
 for i:=0 to GetRows-1 do begin
  while (ACanvas.TextWidth(s)<GetLenRect)and(l<=length(atext)) do begin
   if atext[l]=#13 then atext[l]:=' ';
   if atext[l]<>#10 then s:=s+atext[l];
   inc(l);
  end;
  x:=ARect.Left;
  y:=ARect.Top+i*ACanvas.TextHeight('W');
  if Centered then begin
   x:=x+CenterByWidth;
   y:=y+CenterByHeight;
  end;
  ACanvas.TextOut(x,y,s);  s:='';
 end;
end;
пример для OnDrawCell Грида
Код:
 DrawTextInRect('Это текст',StringGrid.Canvas,Rect,true);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2010, 16:07   #3
Александр Маркелов
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 14
По умолчанию

Виталий, привет! Что-то мне совсем непонятно что к чему. Прошу прощения, конечно, я человек начинающий! Видимо еще и потому, что нет комментариев. Я написал приложение с секундомером(я еще задавал вопрос по выводу промежуточных результатов. С этим я разобрался - вывел результаты в таблицу StringGrid. Вот бы их подровнять по ценру, и вообще освоить выравнивание. Можно было бы и не вредничать и оставить как есть, но хочется довести все до ума.
Александр Маркелов вне форума Ответить с цитированием
Старый 22.06.2010, 18:34   #4
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

сейчас напишу,вспомню ....
За помощь: Нажмите на весы слева от сообщения!
savva вне форума Ответить с цитированием
Старый 22.06.2010, 18:49   #5
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

StringGrid1.Canvas.TextOut(Rect.Lef t+DefaultColWidth div 4, Rect.Top+DefaultRowHeight div 4,Cells[j,i]);
За помощь: Нажмите на весы слева от сообщения!
savva вне форума Ответить с цитированием
Старый 22.06.2010, 19:00   #6
Александр Маркелов
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 14
Хорошо

Цитата:
Сообщение от Stilet Посмотреть сообщение
Вот для себя делал:
Код:
 // Вывод с переносом слов
 procedure DrawTextInRect(AText:String;ACanvas:TCanvas;ARect:TRect;Centered:Boolean=false);

var l,i,x,y:integer;s:string;
 function GetLenRect:Integer;begin Result:=ARect.Right-ARect.Left;end;
 function GetHeigthRect:Integer;begin Result:=ARect.Bottom-ARect.Top;end;
 function GetRows:Integer; begin  Result:=ACanvas.TextWidth(AText) div GetLenRect+1; end;
 function CenterByWidth:integer; begin  Result:=(GetLenRect-ACanvas.TextWidth(s)) div 2; end;
 function CenterByHeight:integer;
 begin
  Result:=(GetHeigthRect div 2)-(GetRows*ACanvas.TextHeight('W') div 2);
 end;
begin s:='';l:=1;  
 for i:=0 to GetRows-1 do begin
  while (ACanvas.TextWidth(s)<GetLenRect)and(l<=length(atext)) do begin
   if atext[l]=#13 then atext[l]:=' ';
   if atext[l]<>#10 then s:=s+atext[l];
   inc(l);
  end;
  x:=ARect.Left;
  y:=ARect.Top+i*ACanvas.TextHeight('W');
  if Centered then begin
   x:=x+CenterByWidth;
   y:=y+CenterByHeight;
  end;
  ACanvas.TextOut(x,y,s);  s:='';
 end;
end;
пример для OnDrawCell Грида
Код:
 DrawTextInRect('Это текст',StringGrid.Canvas,Rect,true);
Нашел ваш ответ на подобный вопрос, датированный сентябрем 2007 года (гораздо короче и проще):
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var cr:TRect;
begin
with StringGrid1.Canvas do begin
cr:=StringGrid1.CellRect(acol,arow) ;
FillRect(cr);
TextOut(cr.left+((cr.Right-cr.Left) div 2)-(TextWidth(StringGrid1.Cells
[acol,arow]) div 2),
cr.Top,StringGrid1.Cells[acol,arow]);
end;
end;
Замечательно работает. Вот бы комментарии добавить!? Чтобы конкретно разобраться. Заранее благодарен.
Александр Маркелов вне форума Ответить с цитированием
Старый 24.06.2010, 15:22   #7
Александр Маркелов
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 14
По умолчанию

Цитата:
Сообщение от savva Посмотреть сообщение
StringGrid1.Canvas.TextOut(Rect.Lef t+DefaultColWidth div 4, Rect.Top+DefaultRowHeight div 4,Cells[j,i]);
Компилятор говорит: не объявлена переменная Cells!?
Александр Маркелов вне форума Ответить с цитированием
Старый 24.06.2010, 15:24   #8
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

ну ты перед этим объяви i,j как нибудь,или свои цифры вбей.
За помощь: Нажмите на весы слева от сообщения!
savva вне форума Ответить с цитированием
Старый 24.06.2010, 16:15   #9
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Как вариант использовать, если это допустимо, сторонний компонент ... например из набора компонентов JEDI
SERG1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена данных в ячейках, скролом valerij Microsoft Office Excel 6 05.12.2009 15:24
выравнивание данных в ячейках - ? Evgenii БД в Delphi 13 10.08.2009 17:32
StringGrid: выравнивание содержимого столбца по правому краю Art_ Компоненты Delphi 2 06.05.2009 17:30
Выравнивание форм в ячейках таблицы Antoha HTML и CSS 3 30.03.2009 23:15
Сложение данных в разных ячейках viter.alex Microsoft Office Excel 20 14.01.2009 18:30