Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.007 c
4-92803
Alek Aaz
2002-09-17 08:19
2002.10.28
Ресурс занят


1-92517
ev
2002-10-17 20:43
2002.10.28
как сделать TStringGrid и TListBox со скролом справа?


4-92798
gosha
2002-09-16 09:43
2002.10.28
Locked WINXP/2000


1-92548
777
2002-10-15 23:01
2002.10.28
глюк.


1-92456
IVANWIN
2002-10-17 23:30
2002.10.28
Формат отображения строки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский