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

Вниз

многострочность dbgrid (не в заголовках)   Найти похожие ветки 

 
Настенька!!! ©   (2004-10-24 19:12) [0]

У меня таблица с 2 столбцами. Во втором столбце (не в заголовке, а в записи)  текст очень длинный и он весь не вмещается. Как сделать так, что если текст не вмещается, перенести его на 2 строчку, т.е. сделать многострочным. Код для stringgrid не подходит, выдает ошибку. Может, есть еще какой-то способ.


 
Yuri-7   (2004-10-24 23:23) [1]

Есть такая библиотека bvcomp. Там есть такой компонент TbvDBGrid


 
ЮЮ ©   (2004-10-25 02:52) [2]

>Код для stringgrid не подходит, выдает ошибку.

Где код? Какая ошибка?


 
Настенька!!! ©   (2004-10-27 16:57) [3]

тут есть статья, называется многострочный стрингрид, но код для дбгрида почему-то не подходит. объясните в чем дело?


 
Val ©   (2004-10-27 17:03) [4]

обожаю помогать настеньке :)


 
Роман Снегирев   (2004-10-27 17:04) [5]

Настенька, я же дал тебе QuntumGrid


 
Val ©   (2004-10-27 17:09) [6]

>[5] Роман Снегирев   (27.10.04 17:04)
грид - не код


 
Настенька!!! ©   (2004-10-27 17:13) [7]

> Val спасибо за помощь, но где она?
ну мне нужен код с использованием стандартного грида. помогите!!!


 
Настенька!!! ©   (2004-10-27 17:21) [8]

Кто мне поможет с кодом? очень вас прошу, очень надо...


 
Наталия ©   (2004-10-28 07:07) [9]

Настенька, ты не проси, ты требуй - настойчиво, безапелляционно, предоставляя минимум информации, а лучше вообще ее не раскрывая.
А то "прошу,прошу"... Фи.


 
Настенька!!! ©   (2004-10-28 08:48) [10]

Люди, почему на такой легкий вопрос никто не может дать ответа?
Как в дбгриде, если текст не помещается, перенести его на 2, если надо, на 3 строку.


 
Наталия ©   (2004-10-28 08:57) [11]

А сама ты это как пыталась сделать? Код покажи.


 
BoxTer   (2004-10-28 09:00) [12]

Ниже код наследника TDBGrid.
Добавлено дополнительное свойство LinesPerRow. Установка значений данного свойства соответственно изменяет высоту строки, в зависимости от текущего шрифта. Текст в ячейках будет переноситься, если значение LinesPerRow больше чем единица. Все это произведение искусств оказалось чрезвычайно полезным и удивительно простым.

unit Dbmygrid;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, DB, DBTables, StdCtrls, ExtCtrls, Grids, DBGrids;

type

TMultiLineDBGrid = class(TDBGrid)
private
FLinesPerRow: Integer;
procedure  DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
procedure  LayoutChanged; override;
procedure SetLinesPerRow(ALinesPerRow: Integer);
public
property LinesPerRow: Integer read FLinesPerRow write SetLinesPerRow default 1;
constructor Create(AOwner: TComponent); override;
end;

implementation

constructor TMultiLineDBGrid.Create(AOwner: TComponent);
begin

inherited Create(AOwner);
FLinesPerRow := 1;
OnDrawDataCell := DrawDataCell;
end;

procedure TMultiLineDBGrid.LayOutChanged;
begin

inherited LayOutChanged;
DefaultRowHeight := DefaultRowHeight * LinesPerRow;
end;

procedure  TMultiLineDBGrid.DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
var

Format: Word;
C: array[0..255] of Char;
begin

if LinesPerRow = 1 then
Format := DT_SINGLELINE or DT_LEFT
else
Format  :=  DT_LEFT or DT_WORDBREAK;

Canvas.FillRect(Rect);

StrPCopy(C, Field.AsString);
WinProcs.DrawText(Canvas.Handle, C, StrLen(C), Rect, Format);
end;

procedure TMultiLineDBGrid.SetLinesPerRow(ALinesPerRow: Integer);
begin

if ALinesPerRow <> FLinesPerRow then
begin
FLinesPerRow := ALinesPerRow;
LayoutChanged;
end;
end;

end.


 
Настенька!!! ©   (2004-10-29 08:21) [13]

люди. а кто-нибудт пожет подсказать код на событие drawdatacell без создания наследника, а просто, в обычном гриде.
странно, мне казалось, это так просто, НО НИКТО НЕ ХОЧЕТ ПОМОЧЬ!!!


 
ЮЮ ©   (2004-10-29 08:28) [14]

>странно, мне казалось, это так просто, НО НИКТО НЕ ХОЧЕТ ПОМОЧЬ!!!

Помочь и сделать за тебя - разные вещи. Ты начни (покажи код), а мы поможем!


 
Наталия ©   (2004-10-29 08:58) [15]

Самый простой вариант - положи ниже DBGrid компонент DBMemo и отображай в нем свой длинный текст.


 
Настенька!!! ©   (2004-10-29 09:08) [16]

хорошо показываю код:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var s:string; Flag: Cardinal; H:integer;
begin
DbGrid1.Canvas.FillRect(Rect);
s := query1.fields[1].asstring;
Flag := DT_left or DT_WORDBREAK;
H := DrawText(DbGrid1.Canvas.Handle,PChar(s),length(s),Rect,Flag);
этот код не рабочий, все время ошибка насчет rect.


 
msguns ©   (2004-10-29 09:58) [17]

Настя, ужель так прям и надо показывать текст в несколько строк именно в гриде ? Чисто по опыту знаю, как режут глаз пустоты в таких гридах-как правило на одну запись с длинным текстом имеется энное кол-во с коротким или вообще с пустым. Не проще ли пересмотреть само решение ? Не сделать, к примеру, формочку (панельку) с мемо и эту формочку показывать по спец.кнопульке. Или сделать ее StayOnTop и по событию AfterScroll датасета всовывать туда содержимое пресловутого поля текущей записи.
Почему мы так упрямо пытаемся преодолеть канаву, не посмотрев по сторонам - а вдруг там есть объезд ?


 
Sergey13 ©   (2004-10-29 10:44) [18]

2Настенька!!! ©   (24.10.04 19:12)
Есть EhLib, там есть грид с реализованным сабжем. Там есть исходники. Можно или юзать его (бесплатно) или посмотреть реализацию.
http://www.ehlib.com/RUS/default.htm


 
ЮЮ ©   (2004-10-29 11:05) [19]

>этот код не рабочий, все время ошибка насчет rect.

в той ошибке по-русски сказано, что Rect надо передовать как var параметр, а в процедуре Rect опимана как const

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
 s: string;
 flag: Cardinal;
 h: integer;
 r: TRect;
begin
 DbGrid1.Canvas.FillRect(Rect);
 s := query1.fields[1].asstring;
 flag := DT_left or DT_WORDBREAK;
 r := Rect;
 h := DrawText(DbGrid1.Canvas.Handle, PChar(s),length(s), r, flag);
end;


остальной код, конечно, чушь - почему во всех столбцах пишется содержимое query1.fields[1], но это уже другая история


 
Настенька!!! ©   (2004-10-30 13:45) [20]

ну так подскажите что писать вместо query1.fields[1]. и еще, как автоматически выровнять высоту записей.


 
sniknik ©   (2004-10-30 15:10) [21]

может проще, скажеш задание, и за тебя напишут?
главное в цене сойтись.

Val ©   (27.10.04 17:03) [4]
> обожаю помогать настеньке :)
кажется я тебя понимаю... ;о))


 
Настенька!!! ©   (2004-10-31 08:51) [22]

ничего не понимаю, вопрос элементарный, но опять никто не хочет помочь с ответом.
Как автоматически выровнять высоту записей. в стринггриде есть свойство rowheights, а в дбгриде нет. как быть?


 
sniknik ©   (2004-10-31 09:51) [23]

вопрос элементарный, но ждеш ты не помоши а кода, это отвращает. ;)
а помогли тебе уже не раз, и ссылки и где искать...

> Как автоматически выровнять высоту записей. в стринггриде есть свойство rowheights
и это в статье должно быть, которую тебе дали но ты не читал
в виде исключения

type
 TMyDBGrid = class(TDBGrid);

...
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
 Field: TField; State: TGridDrawState);
begin
 TMyDBGrid(DBGrid1).RowHeights[2]:= 40;
end;


 
Настенька!!! ©   (2004-10-31 19:38) [24]

спасибо, хоть кто-то ответил. вы дали пример для 2 строки, а как для всей таблицы. свойства arow, как у стринггрида нет. как быть?


 
sniknik ©   (2004-10-31 20:44) [25]

http://delphi.vitpc.com/asp/viewitem.asp?UrlItem=/helloworld/nogrid.htm
тут все есть.
(сорри за повтор, уверен тебе это уже давали)


 
Настенька!!! ©   (2004-11-01 09:11) [26]

спасибо, буду смотреть.



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

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

Наверх




Память: 0.53 MB
Время: 0.06 c
3-1099310895
Артем К.
2004-11-01 15:08
2004.11.28
Проблемы с вычисляемым полем


4-1097750561
UserUserov
2004-10-14 14:42
2004.11.28
Послать переменную в другую программу??


1-1100563093
dolphin
2004-11-16 02:58
2004.11.28
как с string добыть ansichar


1-1100594952
hgd
2004-11-16 11:49
2004.11.28
Подскажите компонент или как?


6-1095681156
Senator
2004-09-20 15:52
2004.11.28
TServerSocket