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

Вниз

многострочность 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.036 c
1-1100215749
Семен
2004-11-12 02:29
2004.11.28
Как вытащить нужный мне текст?


4-1097774650
ALex B.
2004-10-14 21:24
2004.11.28
Win Api функция чтения из регистра.


3-1098930931
SDA
2004-10-28 06:35
2004.11.28
Как красиво удалить #tmp таблицу???!!!


9-1090864227
RyDmi
2004-07-26 21:50
2004.11.28
Как делать анимированные спрайты?


14-1100202820
Сенокур Петя
2004-11-11 22:53
2004.11.28
В чём делается формате pdf?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский