Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.28;
Скачать: CL | DM;

Вниз

StringGrid- или чтот похожее   Найти похожие ветки 

 
Romych   (2002-10-17 09:16) [0]

Есть ли компонент, похожий на StringGrid ... который может скрывать некоторые столбцы. (Задача такая надо вывести два столбца, а 2-3 со служебной информацией не надо выводить) можна конечно воспользоваться масивои,... но это утруднит программу, так, как надо часто добавлять строки,... если кто знает как поступить пожалуйста посоветуйте!!!


 
Song ©   (2002-10-17 09:17) [1]

Сделай их ширину 0


 
MBo ©   (2002-10-17 09:18) [2]

сделай у этих столбцов нулевую ширину


 
Romych   (2002-10-17 13:14) [3]

Спасибо попробую! А


 
Romych   (2002-10-17 13:26) [4]

Есть ли у кого примерчик, как рисовать в DrawGrid, Много ли используется ресурсов, для перерисовки большого количества строк?


 
Separator ©   (2002-10-17 13:37) [5]

В общем способов куча, вот как я делаю в своем проекте:

procedure TMyStringGrid.DrawCell(ACol, ARow : Longint; ARect : TRect;
AState : TGridDrawState);
var
St: string;
RW, L, Tmp: integer;
BCl, PCl, FCl: TColor;
TSt: TTypeStr;

begin
Canvas.Font:= Font;
St:= Cells[ACol, ARow];
L:= ARect.Left;
RW:= ARect.Right-ARect.Left;
with Canvas do
begin
FCl:= Font.Color;
PCl:= Pen.Color;
BCl:= Brush.Color;
if (ARow=0) or (ACol=0) then
begin
PCl:= clBlack;
BCl:= clSilver;
end
else
begin
PCl:= clSilver;
BCl:= clWhite
end;
if gdFocused in AState then
PCl:= clBlue;

// Определение отступа
TSt:= TypeStr(St);
if TSt= tsDate then
St:= TimeToStr(StrToDateTime(St));
Tmp:= RW-TextWidth(St);
if (TSt<>tsString) and (Tmp>0) then
L:= L+Tmp-3
else
L:= L+1;
if (Tmp>0) and (gdFixed in AState) then
L:= L+(Tmp div 2)-1;
if St= "Нет связи" then
FCl:= clRed
else if Pos("Par", St)=1 then
FCl:= clBlue
else if Pos("Бит №", St)=1 then
BCl:= clWhite;

// Закрашивание ячейки
Brush.Color:= BCl;
Brush.Style:= bsSolid;
FillRect(ARect);

// Вывод текста
Font.Color:= FCl;
TextOut(L+1, ARect.Top+5, St);

// Рисование рамки
Pen.Style:= psSolid;
Pen.Width:= 1;
Pen.Color:= PCl;
MoveTo(ARect.Left, ARect.Top);
LineTo(ARect.Left, ARect.Bottom);
LineTo(ARect.Right, ARect.Bottom);
LineTo(ARect.Right, ARect.Top);
LineTo(ARect.Left, ARect.Top)
end
end;


 
Separator ©   (2002-10-17 13:42) [6]

Вот еще, взято из кулибы:

{ Код заказного компонента для Delphi.

Позволяет переносить текст в TStringGrid, отсюда и его имя - TWrapGrid.
Автор Luis J. de la Rosa.
E-mail: delarosa@ix.netcom.com
Вы свободны в использовании, распространении и улучшении кода.


Для использования: Выберите в Delphi пункты меню "Options" - "Install Components".
Нажмите "Add".
Найдите и выберите файл с именем "Wrapgrid.PAS".
Нажмите "OK".
После этого вы увидете компонент во вкладке "Samples" палитры компонентов
Delphi.
После этого вы можете использовать компонент вместо стандартного TStringGrid.


Пожалуйста шлите любые комментарии и пожелания на адрес delarosa@ix.netcom.com.
Успехов!


Несколько дополнительных замечаний по коду:
Методы Create и DrawCell были перекрыты. Everything else should
behave just like a TStringGrid.
The Create sets the DefaultDrawing to False, so you don"t need to.


Also, I am using the pure block emulation style of programming, making my
code easier to read.
}

unit Wrapgrid;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, Grids;

type

TWrapGrid = class(TStringGrid)
private
{ Private declarations }
protected
{ Protected declarations }
{ Процедура DrawCell осуществляет перенос текста в ячейке }
procedure DrawCell(ACol, ARow : Longint; ARect : TRect;
AState : TGridDrawState); override;
public
{ Public declarations }
{ Процедура Create перекрывается для того, чтобы использовать процедуру DrawCell
по умолчанию }
constructor Create(AOwner : TComponent); override;
published
{ Published declarations }
end;

procedure Register;

implementation

constructor TWrapGrid.Create(AOwner : TComponent);
begin

{ Создаем TStringGrid }
inherited Create(AOwner);


{ Заставляем компонент перерисовываться нашей процедурой по умолчанию DrawCell }
DefaultDrawing := FALSE;
end;

{ Процедура DrawCell осуществляет перенос текста в ячейке }
procedure TWrapGrid.DrawCell(ACol, ARow : Longint; ARect : TRect;

AState : TGridDrawState);
var

Sentence, { Выводимый текст }
CurWord : String; { Текущее выводимое слово }
SpacePos, { Позиция первого пробела }
CurX, { Х-координата "курсора" }
CurY : Integer; { Y-координата "курсора" }
EndOfSentence : Boolean; { Величина, указывающая на заполненность ячейки }
begin

{ Инициализируем шрифт, чтобы он был управляющим шрифтом }
Canvas.Font := Font;


with Canvas do begin
{ Если это фиксированная ячейка, тогда используем фиксированный цвет }
if gdFixed in AState then begin
Pen.Color := FixedColor;
Brush.Color := FixedColor;
end
{ в противном случае используем нормальный цвет }
else begin
Pen.Color := Color;
Brush.Color := Color;
end;


{ Рисуем подложку цветом ячейки }
Rectangle(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
end;


{ Начинаем рисование с верхнего левого угла ячейки }
CurX := ARect.Left;
CurY := ARect.Top;


{ Здесь мы получаем содержание ячейки }
Sentence := Cells[ACol, ARow];


{ для каждого слова ячейки }
EndOfSentence := FALSE;
while (not EndOfSentence) do begin
{ для получения следующего слова ищем пробел }
SpacePos := Pos(" ", Sentence);
if SpacePos > 0 then begin
{ получаем текущее слово плюс пробел }
CurWord := Copy(Sentence, 0, SpacePos);


{ получаем остальную часть предложения }
Sentence := Copy(Sentence, SpacePos + 1, Length(Sentence) - SpacePos);
end
else begin
{ это - последнее слово в предложении }
EndOfSentence := TRUE;
CurWord := Sentence;
end;


with Canvas do begin
{ если текст выходит за границы ячейки }
if (TextWidth(CurWord) + CurX) > ARect.Right then begin
{ переносим на следующую строку }
CurY := CurY + TextHeight(CurWord);
CurX := ARect.Left;
end;


{ выводим слово }
TextOut(CurX, CurY, CurWord);
{ увеличиваем X-координату курсора }
CurX := CurX + TextWidth(CurWord);
end;
end;
end;

procedure Register;
begin

{ Вы можете изменить закладку Samples на любую другую
палитре компонентов Delphi }
RegisterComponents("Samples", [TWrapGrid]);
end;

end.


 
Romych   (2002-10-17 14:03) [7]

Есть ли какой то типизированый Grid скажем, я точно знаю что первый столбец имеет длину 10 символов, а в StringGrid длина не ограничена будет наверное лишние действия, Заранее благодарю.


 
Romych   (2002-10-17 22:19) [8]

Так слыхал кто про Grid с типизированными полями, ....


 
MBo ©   (2002-10-17 22:28) [9]

>лишние действия
????


 
Romych   (2002-10-17 22:52) [10]

Я хочу загнать в Grid базу данных, и вот думаю не буду ли я слишком расточителен давая всеп полям строку неопределееной длины :)?


 
MBo ©   (2002-10-17 23:06) [11]

нет, не расточительно.
А надо ли в Grid?


 
Romych   (2002-10-18 00:19) [12]

А что бы Вы посоветовали для вывода большой таблицы?


 
MBo ©   (2002-10-18 00:20) [13]

А DBGrid?


 
Romych   (2002-10-18 00:36) [14]

С BDE для простой программы не пригодна, на небольших таблиц плюсов не вижу:
1) большой размер файла инсталяции
2) Не коректно работеат с маленькими таблицами
....


 
Romych   (2002-10-18 09:13) [15]

Я хочу загнать в Grid базу данных, и вот думаю не буду ли я слишком расточителен давая всем полям строку неопределееной длины :)?


 
MBo ©   (2002-10-18 09:14) [16]

MBo © (17.10.02 23:06)
нет, не расточительно.



Страницы: 1 вся ветка

Текущий архив: 2002.10.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
3-92323
wHammer
2002-10-04 14:41
2002.10.28
Переодический реквизит


4-92821
Пенсионер
2002-09-13 12:35
2002.10.28
Помогите ламеру осуществить хитрый перехват нажатие кнопки?


14-92695
raiv
2002-10-08 09:56
2002.10.28
Уважаемые знатоки Delphi, у меня к Вам вот такой вопрос.


1-92587
sasw
2002-10-17 07:30
2002.10.28
Форма


3-92351
Gaber
2002-10-07 11:18
2002.10.28
Как связать 2 таблицы ...