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

Вниз

Много строк в одной записи!   Найти похожие ветки 

 
ser_ega   (2004-11-10 21:12) [0]

Мастера подскажите! Как добавить запись у которой одно или несколько полей будет иметь много строк!
Примерно так:

|-|------|-------|
| |Серега| Физика|
|1|      | Химия |
| |      | Матем.|
|-|------|-------|
| |Макс  | Геогр.|
|2|      | Информ|
|-|------|-------|


 
Vit@ly ©   (2004-11-10 21:26) [1]

| Физика|
| Химия |
| Матем.|

А мемополе не спасет? :)


 
ser_ega   (2004-11-10 21:48) [2]

Так я пробовал уже! Но в этом поле все время написано TMemo, а не Физика, Матем, Химия...


 
Vit@ly ©   (2004-11-10 21:58) [3]

Так ты видимо говоришь о DBGrid?
Есть решения по отображению в гриде мемеполей. Поищи


 
ser_ega   (2004-11-10 22:01) [4]

А где искать?


 
Vit@ly ©   (2004-11-10 22:05) [5]

Королевство Делфи


 
Vit@ly ©   (2004-11-10 22:26) [6]

Как показать содержимое Memo-поля в DBGrid?

Поумолчанию, DBGrid не может отображать memo-поля. Однако, проблему можно решить при помощи события OnDrawDataCell в DBGrid.

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const  
                Rect: TRect; Field: TField; State:  
                TGridDrawState);  

var  
 P: array [0..50] of char; {размер массива, это количество необходимых символов}
 bs: TBlobStream;          {из memo-поля}  
 hStr: String;  

begin  
 if Field is TMemoField then  
 begin  
   with (Sender as TDBGrid).Canvas do  
   begin   {Table1Notes это TMemoField}  
     bs := TBlobStream.Create(Table1Notes, bmRead);  
     FillChar(P,SizeOf(P),#0); {строка завершается нулём}  
     bs.Read(P, 50); {читаем 50 символов из memo в blobStream}  
     bs.Free;  
     hStr := StrPas(P);  
     while Pos(#13, hStr) > 0 do  {удаляем переносы каретки и}
       hStr[Pos(#13, hStr)] := " ";  
     while Pos(#10, hStr) > 0 do  {отступы строк}
       S[Pos(#10, hStr)] := " ";  

     FillRect(Rect);  {очищаем ячейку}
     TextOut(Rect.Left, Rect.Top, hStr);  {заполняем ячейку данными из memo}
   end;  
 end;  
end;
 

Замечание: перед тем, запустить пример, создайте объект TMemoField для memo-поля двойным кликом по компоненту TTable и добавлением memo-поля.

Взято с Исходников.ru http://www.sources.ru


 
ser_ega   (2004-11-10 23:24) [7]

Да вот я там тоже такое нашел! Только не могу понять что такое Table1Notes? И почему-то у меня не получается создать TMemoField! Я делаю двойнок клик по TTable, а выскакивает что то похожее на навигатор какой-то (кнопки вперед и назад)!
Может вы обьясните как правильно его создать!


 
ser_ega   (2004-11-11 22:07) [8]

Теперь когда обрабатывается эта процедура выскакивает ошибка  Cannot access field "ИФА" as type Integer! Что делать?


 
ser_ega   (2004-11-12 07:47) [9]

Что ни у кого не было такой ошибки?


 
sniknik ©   (2004-11-12 08:09) [10]

ну ты спросил, конечно не было, чтобы я назвал поле именем "ИФА" да ни за что.

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


 
ser_ega   (2004-11-12 22:54) [11]

Я так понимаю DBGrid1DrawDataCell вызывается сама, как только в DBGrid добавляются строки! Delphi не показывает в какой строке ошибка!
Может кто-то сделает исходник работающий с TmemoField или может подкажете где его найти!


 
sniknik ©   (2004-11-12 23:24) [12]

> Delphi не показывает в какой строке ошибка!
да ну? вреш небось?

http://delphimaster.net/view/1-1100159363/
обрати внимание на посты Digitman-а


 
ser_ega   (2004-11-12 23:34) [13]

Да не то время шоб врать!


 
ser_ega   (2004-11-12 23:44) [14]

Так интересно то что если DBGrid1DrawDataCell не включать то все добавляется, а с ним никак не хочет!


 
sniknik ©   (2004-11-13 01:14) [15]

всетаки ты вреш насчет ошибок, они не могут не показываться (сообщение то откудато увидел)

ну да ладно, вот переделал, делает то же самое(!!!, а не то что ты ожидал) что и в [6], но надеюсь понятнее будет (хоть и убрал коментарии ;)

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
 Field: TField; State: TGridDrawState);
const
 LEN_ST = 50;
var
 bs: TMemoryStream;
 hStr: String;
begin
 if not (Field is TMemoField) then Exit;

 bs:= TMemoryStream.Create;
 try
   TMemoField(Field).SaveToStream(bs);
   hStr:= StringOfChar(#0, LEN_ST);
   bs.Position:= 0;
   bs.Read(hStr[1], LEN_ST);
 finally
   bs.Free;
 end;

 hStr:= Trim(StringReplace(hStr, #13#10, " ", [rfReplaceAll]));
 TDBGrid(Sender).Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, hStr);
end;


 
ser_ega   (2004-11-13 22:53) [16]

Ладно уговорили, буду искать у себя ошибку! Т.к. всеравно ошибка выскакивает!
А вы мне не подскажете какие условия для Tmemofield и есть ли они вообще?


 
ser_ega   (2004-11-16 22:59) [17]

Подкажите что эта ошибка означает? Где мне искать ошибку?


 
ser_ega   (2004-11-19 20:01) [18]

Я вычислил что ошибка возникает даже без DBGrid1DrawDataCell! Может я не так как-то добавляю memo поле или TMemoField? Если не сложно расскажите поподробнее! Плииииииииииииззззз!


 
Term   (2004-11-19 20:05) [19]

да не мучайся возьми ehlib там всё это реализованно, хотя иной раз сделать самому полезно для общего развития


 
ser_ega   (2004-11-19 20:28) [20]

Что такое ehlib? Где его взять?


 
ser_ega   (2004-11-20 00:15) [21]

Ребя ну сильно горит добить мне эту прогу! П О Г И Т Е КТО Ч Е М МОЖЕТ!


 
ser_ega   (2004-11-20 13:31) [22]

ВСЕ я ошибку исправил! Но ни какого результата не добился - в ячейке вместо моего текста отображается (MEMO)! Что еще не так?


 
ser_ega   (2004-11-20 20:09) [23]

Я вычислил что это процедура вообще не вызывается! Как ее принудительно вызвать?


 
sniknik ©   (2004-11-21 11:19) [24]

ты думаеш так ктонибудь тебе поможет?
только по инфе о том что - была ошибка, ты ее исправил (с трудом, попутно выяснил что она не относится к DBGrid1DrawDataCell вообше, а какая то твоя), но желаемого не добился т.к. она (эта процедура) оказывается даже не вызывается...

с такими сведениями можно романы писать (накал страстей, куча эмоций, никаких фактов, можно домыслить), но не глюки искать.

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

по поводу моего кода в [15], предупреждаю еше раз, он делает то же что и в [6], а не то что ты возможно (скорее всего) ожидаеш!
т.что если добьешся что у тебя это заработает,не расстраивайся (сильно в всяком случае ;о)).

> Как ее принудительно вызвать?
книжки читать не пробовал? как крайнее средство.


 
ser_ega   (2004-11-21 12:41) [25]

я чето не пойму что ты имееш ввиду говоря
> а не то что ты возможно (скорее всего) ожидаеш!

Ты хочеш сказать что используя эти коды я не добьюсь того что хочу?


 
sniknik ©   (2004-11-21 13:58) [26]

> Ты хочеш сказать что используя эти коды я не добьюсь того что хочу?
естественно, и я честно сразу предупреждал.
просто переделал уже данный код в более понятный и не зависящий от задания/незадания какихто там полей.

тебе там просто первые 50 символов из мемо пола покажет, но никакой многострочности. (правда судя по тому что с этим элементарным не можеш справится, то за многострочный садится тебе рановато, это на порядок сложнее)
найди готовый компонент (советовали уже).


 
ser_ega   (2004-11-21 14:12) [27]

Ну так а зачем тогда этот весь базар? Я же вам четко вопрос задал!

Дайте ссылочку откуда этот компонет можна скачать! Он наподобии DBGrid? Можна будет потом сделать отчет используя Qreport?


 
ser_ega   (2004-11-21 15:12) [28]

Я скачал! А как его установить? Как чтобы он появился там где и DBgrid?


 
sniknik ©   (2004-11-21 17:07) [29]

> Ну так а зачем тогда этот весь базар? Я же вам четко вопрос задал!
да ну? перечитай, кто и на что отвечал. и потом если 2 + 2 не можеш сложить то куда тебе интегралы решать?
код то элементарный ты еще после > Vit@ly ©   (10.11.04 22:26) [6]
должен был понять что это не то, но ты начал обсуждать, типа хочеш понять... мой код был попыткой обьяснить (хотя бы начало).

p.s. отвечать на то что в > sniknik ©   (21.11.04 11:19) [24] ты я вижу не намерен, и подумать над этим, только дай да дай. до свидания.


 
Janb   (2004-11-22 08:03) [30]

Ser-ega
Замечание: перед тем, запустить пример, создайте объект TMemoField для memo-поля двойным кликом по компоненту TTable и добавлением memo-поля.

Это значит когда навигатор выйдет (как ты его назвал) наведи на него и нажми правую кнопку мыши там есть пункт new field дальше думаю поймешь. а насчет процедур ты просто не копируй его куда попало например процедуру procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
можешь найти на событиях дбгрида то есть в инспекторе объектов есть рядом events


 
serko   (2004-11-22 13:34) [31]

Спасибо но я вкурсе!



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

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

Наверх




Память: 0.54 MB
Время: 0.025 c
1-1101971248
ShotGuN
2004-12-02 10:07
2004.12.19
Как отловить MesssageBox?


9-1092186341
Xerx
2004-08-11 05:05
2004.12.19
Как работает OpenGL


3-1100688358
Iova
2004-11-17 13:45
2004.12.19
Как составить запрос по изменению типа поля таблицы?


9-1092904623
mr_black
2004-08-19 12:37
2004.12.19
Кратчайший путь от т.А к т.Б


9-1092082459
Zeal
2004-08-10 00:14
2004.12.19
Как вывести несколько спрайтов - одним?