![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
эта штука будет рисовать крест в первом столбце. но, собственно говоря, его рисовать можно где угодно, в том же вычисляемом поле. у меня оно называется Selected, соответственно код будет такой:
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Bgladiator |
|
|||
|
Unregistered |
А покакому признаку выводить на печать в моей процедуре печати (см. выше)?
|
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
щас будем думать
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Bgladiator |
|
|||
|
Unregistered |
И ещё, А какого типа у тебя это поле Selected - fData, fCalculated?
|
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
оно Calculated, c datatype = ftString. фишка в том,что нам просто нужно место, на котором мы сами нарисуем чего нам надо, и чтобы там ничего не рисовала система. в случае отрисовки на первом поле грида может быть наложение данных, которые отрисует сам грид. а когда рисуешь в отдельном поле, гарантированно пустом, можно этого не боятся.
так, щас один глюк подправлю и скину код. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| x77 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
в общем, смысл такой. отчёт придётся выводить полностью руками. для этого в свойствах отчёта отключается DataSet (свойство должно быть пустым). после этого в отчёте начинает возникать замечательное событие OnNeedData, в котором можно запихать в текущий банд всё, что угодно. у меня на одной форме (Unit1, Form1) лежит Table1, прицепленная к таблице biolife.db. во втором модуле (Unit2, Form2) находится QuickRep1. приведу оба текста.
во втором модуле на QuickRep1 лежат обычные метки, TQRLabel. фишка в том, чтобы динамически сформировать их значения, перебирая руками таблицу.
вот, в принципе, и всё -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
||||
|
|||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
З.Ы. а всё-таки - оптимальный вариант - TRxMemoryTable. тебе не пришлось бы переделывать отчёт, просто поменять у него датасорс, ,переназначив на виртуальную таблицу. при нажатии на печать ты бы обнулял её, пробегал по выбранным полям, добавляя их туда, и делал Preview. и всё.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| BGladiator |
|
|||
|
Unregistered |
Спасибо тебе большое сейчас буду пробовать. И, если несложно расскажи (покажи) как это можно сделать с помощью TRxMemoryTable. Никогда такой фишкой не пользовался.
|
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
сначала надо установить RxLib. TRxMemoryTable - это аналог TTable, с аналогичными своствами и методами, с той только разницей, что таблицы физически не существует. т.е. ты делаешь ей Insert, Update, Delete, и всё это хранится у тебя в памяти. тебе надо будет создать такую таблицу, в ней создать поля, абсолютно аналогичные полям в твоей таблице. после этого обработчик из unit1 будет выглядеть примерно так:
если я ничего не путаю, то TMemoryTable может быть указана в качестве dataset'а для QR. т.е. там вешаются обычные data-aware контролы, обычным образом указываются для них источники данных, и весь код, приведённый в Unit2 становится просто не нужен. ещё один момент, который я вчера впопыхах опустил. Bookmark'и в конце концов надо бы освобождать. т.е. где-то на OnDestroy формы привесить код, который освобождает всю, выделенную под них память. Это сообщение отредактировал(а) x77 - 16.9.2003, 13:07 -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| BGladiator |
|
|||
|
Unregistered |
А как же мне формировать мой QuickReport. Сейчас он у меня формировался в отдельной форме и без единой строчки текста. Т. е. я шлёпал на форму пару Caption, к примеру
Напечатано QRSysData1 'кол.'+STR(PAGENUMBER) Затем пару Expression, такого типа qrLineData.TEL_ATS_ATS+'-'+qrLineData.TEL_NUMBER +qrLineData.TYPE_TELE_CONNECTS+' '; qrLineData.SPR_MPLEX_NAME+ ' ' + qrLineData.LINE_DATA_CALC+' ' +IF(qrLineData.INDICATION = '', '', '['+qrLineData.INDICATION+']') и т. д. Теперь, если я хочу выбрать , к примеру другой источник (ну место qrLineData наш TRxMemoryTable) я не могу, я так понял что ему нужно только Query. Но и элементы Query из формы где находится мой Grid я не вижу только те которые находятся в моей второй форме со всеми Query. Если прописать мою форму с Grid-ом в USES, то возникает закономерная ошибка CIRCULAR UNIT REFERENCE. Можно ли как то в таком случае осуществить такую же форматированную печать моего отчёта. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
не совсем понял.
насчёт circular и пр.: прописывается uses не в интерфейсной части, а в implementation. тогда всё будет видно и никаких циклических ссылок не возникнет. посмотри, как выше у меня объявлены два модуля:
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
если не касаться TRxMemoryTable и закончить, для начала, с вариантом выше, то там всё форматирование делается руками. ты же выводишь отчёт построчно. т.е. в любой момент можешь начать новый банд, вывести номер строки (соответственно, придётся их учитывать) и т.д.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| BGladiator |
|
|||
|
Unregistered |
И ещё ответь пожалуйста можно ли как-то в процедуре печати задать фильтр чтобы печатались только выбраные строки Grida вместо моего Filter := 'SELECTION ='+'''X''';.
Привожу мою процедуру печати: procedure TLineData.aPrintExecute(Sender: TObject); Var pr:TrepLineData; begin inherited; pr:=nil; CurrentIndex := 0; with Grd.DataSource.DataSet do try Filter := 'SELECTION ='+'''X'''; Filtered := True; pr:=TrepLineData.Create(nil); // pr.Preview; pr.PrinterSetup; pr.print; pr.free; Filtered := False; pr:=nil; except on Exception do if pr<>nil then pr.free; end; end; Большое спасибо. |
|||
|
||||
| x77 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
мда. как ты думаешь, нафига я всё это писал? ещё раз. процедура печати выглядит так (это вместо твоей):
после того, как отчёт запускается на превью, у него срабатывает событие BeforePrint:
после этого начинает срабатывать событие OnNeedData, в котором возвращаемый параметр MoreData определяет, будет ли оно вызвано ещё раз или нет. в этом событии мы двигаемся перебираем записи, выбранные в гриде, и печатаем только их:
хочешь, я сброшу тебе этот проект, посмотришь сам, как оно там всё устроено. только мыло дай. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
||||||
|
|||||||
| BGladiator |
|
|||
|
Unregistered |
Скидывай на мыло: [email protected]. Огромное тебе спасибо, только вот как будет происходить сама печать, если мне надо вывести сначала заголовок а потом все мои поля отформатированными - строка за строкой.
Спасибо тебе за ответы и извиняюсь за глупые вопросы. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |