Текущий архив: 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.51 MB
Время: 0.033 c