Меню Рубрики

Установка ehlib для delphi xe

Components for Delphi and C++ Builder.

Установка Ehlib6.1.129 на Embarcadero RAD Sudio XE3 СBuilder

Для печати Предыдущая тема | Следующая тема
Автор Сообщение
Андрей

Зарегистрирован: 04 окт 2012, 23:22
Сообщений: 6

.
Плюс ко всему, у меня, вроде как после этого, отвязался установленный ранее AsyncPro (тоже не может найти *.bpl, хотя пути прописаны и файлы по ним лежат).
Подскажите пожалуйста, с чем это может быть связано и как лечить?=)

На всякий случай скриншот окошка установки:

И содержимое лога

Installation log
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\Common\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\RADStudioXE3\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DEMOS C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DataDrivers C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DataService C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\HLP C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\LangResources C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\LangResources\Russian\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok

C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Bin\dcc32.exe -$Y- -$L- -$D- -B -JPHNE -JL -NSData.Win;Bde;Vcl;Vcl.Imaging;Data;Winapi;System;System.Win;Datasnap EhLib170.dpk
Fatal: F1026 File not found: ‘EhLib170.dpk’

Installation log
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\Common\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\RADStudioXE3\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DEMOS C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DataDrivers C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DataService C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\HLP C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\LangResources C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\LangResources\Russian\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok

C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Bin\dcc32.exe -$Y- -$L- -$D- -B -JPHNE -JL —
NSData.Win;Bde;Vcl;Vcl.Imaging;Data;Winapi;System;System.Win;Datasnap EhLib170.dpk
Fatal: F1026 File not found: ‘EhLib170.dpk’

Installation log
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\Common\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\RADStudioXE3\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DEMOS C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DataDrivers C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DataService C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\HLP C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\LangResources C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\LangResources\Russian\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok

C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Bin\dcc32.exe -$Y- -$L- -$D- -B -JPHNE -JL -NSData.Win;Bde;Vcl;Vcl.Imaging;Data;Winapi;System;System.Win;Datasnap EhLib170.dpk
Fatal: F1026 File not found: ‘EhLib170.dpk’

Installation log
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\Common\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\RADStudioXE3\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DEMOS C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DataDrivers C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\DataService C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\HLP C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\LangResources C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib :Ok
Copy D:\Inst\Adds_To_XE\Ehlib6.1.129\LangResources\Russian\*.* C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Components\EhLib\Lib :Ok

источник

Компонент EhLib 9.3

Помогите пожалуйста у меня в Делфи (10.3 Riо) не устанавливается компоненты EhLib 9.4. Все время ошибки при установки но в интернете прочел, что только версия EhLib 9.3 подходит для Riо
у кого есть EhLib 9.3 поделитесь пожалуйста.

Ehlib
подскажите че за ошибка при установки библиотеки Ehlib SQLConnEdEh.pas(110) Error: Undeclared.

EhLib
Подскажите, где можно скачать ExLib для Delphi XE (RAD Studio).

Ehlib
У меня Делфи вот такую ошибку выдает Unit GridsEh was compiled with different version of.

EhLib
Здраствуйте, может кто подскажет как сделать как на скрине. Компонент DBGridEh.

Комментарий модератора
Любая версия есть на сайте производителя. Другие варианты на форуме не рассматриваются

Это платные компоненты. Зачем они тебе?

Все остальное — платно . Так что ссылки (если таковые будут вообще) на сторонние сайты загрузки, торренты и т.д. — будут удалены согласно правилам форума.

Добавлено через 1 минуту
Ну и еще из бесплатного:

Ты меня спровоцировал и я зашёл в гугол и за 30 секунд нашёл Full Source.
Гугол — хороший. Роскомнадзор — плохой.

Расскажите кто-нибудь, чо, хоть, это за компоненты такие за несколько сотен баксов?

спасибо за ответ, но бесплатные тоже есть. Вот когда у меня был Delphi xe8 то у меня был и ehlib 9.1 и абсолютно бесплатно с качал с интернета не давал не какие сообщение о пробной версии или ограничение. Но когда я переходил с XE8 на XE10.3 (Rio) то у меня проблемы с добавлением библиотеки. У меня есть ehlib 9.4 но не подходит ошибка выдает, хотя там есть компоненты с версии XE1 до XE10.3 а ehlib 9.4 это последняя версия от ЕХЛИБ ) думаю проблема в другом
помогите пожалуйста только не говорите что надо переходит обратно в XE8 (

Добавлено через 9 минут
Ошибка:
Checking project dependencies.
Compiling DclEhLib260.dproj (Release, Win32)
dcc32 command line for «DclEhLib260.dpk»
[dcc32 Fatal Error] EhLib260.dpk(1): E2225 Never-build package ‘EhLib260’ must be recompiled (15177) []
[dcc32 Fatal Error] DclEhLib260.dpk(37): E2202 Required package ‘EhLib260’ not found

источник

Инструкция по установке компонентов на Delphi

Для работы компонентов понадобится

Набор библиотек JEDI API распаковываем в папку (путь указываю для примера, каждый может распаковывать туда куда душе будет угодно, главное что-бы путь в Environment Variables был прописан правильно):

Набор моих библиотек распаковываем в папку (про расположение папки см. выше):

  • $(JEDI)\jwa\branches\2.3\Common
  • $(JEDI)\jwa\branches\2.3\Includes
  • $(JEDI)\jwa\branches\2.3\SaCMAPI
  • $(JEDI)\jwa\branches\2.3\Win32API
  • $(KANDIRAL)\Release\$(ProductVersion)\$(Platform)
  • $(KANDIRAL)\Resources
  • $(KANDIRAL)\Common
  • $(KANDIRAL)\Automation
  • $(KANDIRAL)\File
  • $(KANDIRAL)\Media
  • $(KANDIRAL)\Net
  • $(KANDIRAL)\Utils
  • $(KANDIRAL)\Graphics
  • Kandiral150.groupproj Delphi XE
  • Kandiral160.groupproj Delphi XE2
  • Kandiral170.groupproj Delphi XE3
  • Kandiral180.groupproj Delphi XE4
  • Kandiral190.groupproj Delphi XE5
  • Kandiral200.groupproj Delphi XE6
  • Kandiral210.groupproj Delphi XE7
  • Kandiral220.groupproj Delphi XE8
  • Kandiral230.groupproj Delphi 10 Seattle
  • Kandiral240.groupproj Delphi 10.1 Berlin
  • Kandiral250.groupproj Delphi 10.2 Tokyo
  • Kandiral260.groupproj Delphi 10.3 Rio

Если всё сделано правильно, то в палитре компонентов должны появиться установленные элементы.

При установке путей к библиотекам нужно указать платформу «32-bit Windows»

В некоторых версиях компилятор ругается на файл с картинками

Мне, во всех случаях возникновения этой ошибки, помог перезапуск Delphi.

Если перезапуск Delphi не помогает, то идём следующим путем

Первый способ. Убираем из пакета файл с картинками. На работу библиотек это не повлияет, просто сами компоненты будут без картинок. Для этого в «Project Manager» на названии пакета (например KRCommon160) жмём правой кнопкой мыши и в контекстном меню выбираем «View Source»

Второй способ. Подключаем картинки старого формата. В каждом пакете есть файл типа «ИмяПакета.dcr», в нем содержатся картинки всех компонентов (которые я уже нарисовал). Но есть и еще dcr файлы, которые сделаны в imageedit от Delphi 7. Второй способ заключается в том, что-бы заменить новый файл с картинками на старые. Для этого в «Project Manager» на названии пакета (например KRCommon160) жмём правой кнопкой мыши и в контекстном меню выбираем «View Source»

И вместо файла KRCommon.dcr подключаем все остальные dcr файлы из папки Common

Перекомпилируем пакет. Аналогично проделываем с остальными пакетами где вылетает ошибка.

источник

Установка ehlib для delphi xe

NiJazz
Дата 10.2.2004, 22:21 (ссылка) | (нет голосов) Загрузка .

Jazz coder

Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

December
Дата 10.2.2004, 23:29 (ссылка) | (нет голосов) Загрузка .

Antitheorist

Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

NiJazz Там же файло-мануал прилагается! Я не раз по нему ставил, без проблем.

Блин, сейчас сервер выключен, не могу найти его.

Опытный

Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Georg4
Дата 10.2.2004, 23:55 (ссылка) | (нет голосов) Загрузка .
NiJazz
Дата 11.2.2004, 10:49 (ссылка) | (нет голосов) Загрузка .

Jazz coder

Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Cashey
Дата 11.2.2004, 11:33 (ссылка) | (нет голосов) Загрузка .

Бессмертный

Профиль
Группа: Завсегдатай
Сообщений: 3439
Регистрация: 13.11.2002
Где: в столице

Cashey
Дата 11.2.2004, 12:17 (ссылка) | (нет голосов) Загрузка .

Бессмертный

Профиль
Группа: Завсегдатай
Сообщений: 3439
Регистрация: 13.11.2002
Где: в столице

Вот выписка из readme у меня по ней поставить удалось

Цитата
1. Delphi 4.x — 7.x:

Uninstall previous or evaluation version of EhLib from Delphi IDE.
Remove or copy to other directory this files to prevent crossing this
and new version of EhLib. Copy files from Common and Delphi[X] directories
to your EhLib directory.

Use «File\Open. » menu item of Delphi IDE to open the EhLib package EhLib.DPK.
In «Package. » window click «Install» button to install the library.
Add, (if need) EhLib directory in Tools->Environment Options->Library->
Library Path.

Kesh
Дата 11.2.2004, 15:16 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Kesh
Дата 11.2.2004, 15:18 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Цитата(Cashey @ 11.2.2004, 08:33)
У меня на отсутствие модуля не ругался, но как его зарегить так и не разобрался. А без этого он в откомпилированном варианте матерится не приличными словами. Кто-нить его регил?
PS Я этот вопрос уже задавал, но он остался без ответа.

Ну прям даже не знаю, у меня даже не спросил.

December
Дата 11.2.2004, 20:41 (ссылка) | (нет голосов) Загрузка .

Antitheorist

Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

NiJazz
Дата 12.2.2004, 08:27 (ссылка) | (нет голосов) Загрузка .

Jazz coder

Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Cashey
Дата 12.2.2004, 10:10 (ссылка) | (нет голосов) Загрузка .

Бессмертный

Профиль
Группа: Завсегдатай
Сообщений: 3439
Регистрация: 13.11.2002
Где: в столице

NiJazz а ты им PM пошли, тогда отзовутся.

NiJazz
Дата 12.2.2004, 10:44 (ссылка) | (нет голосов) Загрузка .

Jazz coder

Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

December
Дата 12.2.2004, 21:24 (ссылка) | (нет голосов) Загрузка .

Antitheorist

Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

X-Vlad
Дата 13.2.2004, 12:54 (ссылка) | (нет голосов) Загрузка .

Опытный

Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Цитата
У меня на отсутствие модуля не ругался, но как его зарегить так и не разобрался. А без этого он в откомпилированном варианте матерится не приличными словами. Кто-нить его регил?
PS Я этот вопрос уже задавал, но он остался без ответа.

прога материлась когда дельфи незапущен? если да то уменя тож такое было. Списался с автором — решил.

Medved
Дата 13.2.2004, 13:39 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

А в чем собственно проблема? Ставиться библиотека так же как и остальные.
Единственный ньюанс, как уже сказали выше, необходимо скопировать все файлы из папки common в папку где лежат файлы dpk (для D7 в папку Delphi7).
Или же (по задумке автора) при установке этих компонент просто в опциях указать путь к папке common.

Какого модуля не хватает? Можеть быть Вы просто не указали путь к исходникам? (Tools->Environment Options->Library->Library Path)

NiJazz
Дата 13.2.2004, 14:28 (ссылка) | (нет голосов) Загрузка .

Jazz coder

Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Сделал так: Tools->Environment Options->Library->Library Path

Указал путь к папке . \EhLib\Common\. Сохранил.

Открыл пакет, . \EhLib\Delphi6\EhLib60.dpk, потом нажал Install (Установить). Перед этим на всякий случай: Build (Построить). Выдаётся ошибка: File not found: ‘DBSumLst.dcu’. При этом красным выделяется строка с ошибкой: PropStorageEh in ‘PropStorageEh.pas’;.

Kesh
Дата 13.2.2004, 15:13 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DB,
<$IFDEF EH_LIB_6>Variants, <$ENDIF>
TypInfo <,dbugintf>;

type
TGroupOperation = (goSum, goAvg, goCount);

TDBSum = class(TCollectionItem)
private
procedure SetGroupOperation(const Value: TGroupOperation);
procedure SetFieldName(const Value: String);
protected
FFieldName: String;
FGroupOperation: TGroupOperation;
Value: Currency;
// For Average
FNotNullRecordCount: Integer;
FSumValueAsSum: Currency;
VarValue: Variant;
public
SumValue: Currency;
procedure Assign(Source: TPersistent); override;
published
property FieldName: String read FFieldName write SetFieldName;
property GroupOperation: TGroupOperation read FGroupOperation write SetGroupOperation;
end;

TDBSumCollection = class(TCollection)
protected
FOwner: TPersistent;
function GetItem(Index: Integer): TDBSum;
function GetOwner: TPersistent; override;
procedure SetItem(Index: Integer; Value: TDBSum);
procedure Update(Item: TCollectionItem); override;
public
function GetSumByOpAndFName(AGroupOperation: TGroupOperation; AFieldName: String): TDBSum;
property Items[Index: Integer]: TDBSum read GetItem write SetItem; default;
end;

TDBSumListProducer = class(TPersistent)
private
FVirtualRecords: Boolean;
protected
Changing: Boolean;
FActive: Boolean;
FDataSet: TDataSet;
FDesignTimeWork: Boolean;
FEventsOverloaded: Boolean;
FExternalRecalc: Boolean;
Filter: String;
Filtered: Boolean;
FMasterDataset: TDataset;
FMasterPropInfo: PPropInfo;
FOldRecNo: Integer;
FOnAfterRecalcAll: TNotifyEvent;
FOnRecalcAll: TNotifyEvent;
FOwner: TComponent;
FSumCollection: TDBSumCollection;
FSumListChanged: TNotifyEvent;
FTryedInsert: Boolean;
FVirtualRecList: TList;
OldAfterCancel: TDataSetNotifyEvent;
OldAfterClose: TDataSetNotifyEvent;
OldAfterEdit: TDataSetNotifyEvent;
OldAfterInsert: TDataSetNotifyEvent;
OldAfterOpen: TDataSetNotifyEvent;
OldAfterPost: TDataSetNotifyEvent;
OldAfterScroll: TDataSetNotifyEvent;
OldBeforeDelete: TDataSetNotifyEvent;
OldMasterAfterScroll: TDataSetNotifyEvent;
function GetRecNo: Integer; virtual;
function FindVirtualRecord(Bookmark: TBookmark): Integer; virtual;
function GetMasterDataSet(APropInfo: PPropInfo): TDataSet;
function GetOwner: TPersistent; override;
procedure SetRecNo(const Value: Integer); virtual;
procedure SetVirtualRecords(const Value: Boolean);
procedure DataSetAfterCancel(DataSet: TDataSet); virtual;
procedure DataSetAfterClose(DataSet: TDataSet); virtual;
procedure DataSetAfterEdit(DataSet: TDataSet); virtual;
procedure DataSetAfterInsert(DataSet: TDataSet); virtual;
procedure DataSetAfterOpen(DataSet: TDataSet); virtual;
procedure DataSetAfterPost(DataSet: TDataSet); virtual;
procedure DataSetAfterScroll(DataSet: TDataSet); virtual;
procedure DataSetBeforeDelete(DataSet: TDataSet); virtual;
procedure DoSumListChanged;
procedure Loaded;
procedure MasterDataSetAfterScroll(DataSet: TDataSet);
procedure ResetMasterInfo;
procedure ReturnEvents; virtual;
procedure SetActive(const Value: Boolean);
procedure SetDataSet(Value: TDataSet);
procedure SetExternalRecalc(const Value: Boolean);
procedure SetSumCollection(const Value: TDBSumCollection);
procedure Update;
public
constructor Create(AOwner: TComponent);
destructor Destroy; override;
function IsSequenced: Boolean; virtual;
function RecordCount: Integer; virtual;
procedure Activate(ARecalcAll: Boolean);
procedure Assign(Source: TPersistent); override;
procedure ClearSumValues; virtual;
procedure Deactivate(AClearSumValues: Boolean);
procedure RecalcAll; virtual;
procedure SetDataSetEvents; virtual;
property Active: Boolean read FActive write SetActive default True;
property DataSet: TDataSet read FDataSet write SetDataSet;
property ExternalRecalc: Boolean read FExternalRecalc write SetExternalRecalc;
property RecNo: Integer read GetRecNo write SetRecNo;
property SumCollection: TDBSumCollection read FSumCollection write SetSumCollection;
property VirtualRecords: Boolean read FVirtualRecords write SetVirtualRecords;
property SumListChanged: TNotifyEvent read FSumListChanged write FSumListChanged;
property OnAfterRecalcAll: TNotifyEvent read FOnAfterRecalcAll write FOnAfterRecalcAll;
property OnRecalcAll: TNotifyEvent read FOnRecalcAll write FOnRecalcAll;
end;

TDBSumList = class(TComponent)
private
function GetActive: Boolean;
function GetDataSet: TDataSet;
function GetExternalRecalc: Boolean;
function GetOnAfterRecalcAll: TNotifyEvent;
function GetOnRecalcAll: TNotifyEvent;
function GetRecNo: Integer;
function GetSumCollection: TDBSumCollection;
function GetSumListChanged: TNotifyEvent;
function GetVirtualRecords: Boolean;
procedure SetOnAfterRecalcAll(const Value: TNotifyEvent);
procedure SetOnRecalcAll(const Value: TNotifyEvent);
procedure SetRecNo(const Value: Integer);
procedure SetSumListChanged(const Value: TNotifyEvent);
procedure SetVirtualRecords(const Value: Boolean);
protected
FSumListProducer: TDBSumListProducer;
procedure DataSetAfterClose(DataSet: TDataSet);
procedure DataSetAfterEdit(DataSet: TDataSet);
procedure DataSetAfterInsert(DataSet: TDataSet);
procedure DataSetAfterOpen(DataSet: TDataSet);
procedure DataSetAfterPost(DataSet: TDataSet);
procedure DataSetAfterScroll(DataSet: TDataSet);
procedure DataSetBeforeDelete(DataSet: TDataSet);
procedure DoSumListChanged;
procedure Loaded; override;
procedure MasterDataSetAfterScroll(DataSet: TDataSet);
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure SetActive(const Value: Boolean);
procedure SetDataSet(Value: TDataSet);
procedure SetExternalRecalc(const Value: Boolean);
procedure SetSumCollection(const Value: TDBSumCollection);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function IsSequenced: Boolean;
function RecordCount: Integer;
procedure Activate(ARecalcAll: Boolean);
procedure ClearSumValues; virtual;
procedure Deactivate(AClearSumValues: Boolean);
procedure RecalcAll; virtual;
procedure SetDataSetEvents;
property RecNo: Integer read GetRecNo write SetRecNo;
published
property Active: Boolean read GetActive write SetActive default True;
property DataSet: TDataSet read GetDataSet write SetDataSet;
property ExternalRecalc: Boolean read GetExternalRecalc write SetExternalRecalc;
property SumCollection: TDBSumCollection read GetSumCollection write SetSumCollection;
property VirtualRecords: Boolean read GetVirtualRecords write SetVirtualRecords;
property SumListChanged: TNotifyEvent read GetSumListChanged write SetSumListChanged;
property OnAfterRecalcAll: TNotifyEvent read GetOnAfterRecalcAll write SetOnAfterRecalcAll;
property OnRecalcAll: TNotifyEvent read GetOnRecalcAll write SetOnRecalcAll;
end;

constructor TDBSumListProducer.Create(AOwner: TComponent);
<$ifdef eval>
<$INCLUDE eval>
<$else>
begin
<$endif>
inherited Create;
FDesignTimeWork := False;
FOwner := AOwner;
FSumCollection := TDBSumCollection.Create(TDBSum);
FSumCollection.FOwner := Self;
FActive := True;
FVirtualRecList := TList.Create;
end;

destructor TDBSumListProducer.Destroy;
begin
Deactivate(False);
FVirtualRecList.Free;
FSumCollection.Free;
inherited;
end;

procedure TDBSumListProducer.Assign(Source: TPersistent);
begin
if Source is TDBSumListProducer then
begin
Active := TDBSumListProducer(Source).Active;
DataSet := TDBSumListProducer(Source).DataSet;
ExternalRecalc := TDBSumListProducer(Source).ExternalRecalc;
SumCollection.Assign(TDBSumListProducer(Source).SumCollection);
SumListChanged := TDBSumListProducer(Source).SumListChanged;
VirtualRecords := TDBSumListProducer(Source).VirtualRecords;
OnAfterRecalcAll := TDBSumListProducer(Source).OnAfterRecalcAll;
OnRecalcAll := TDBSumListProducer(Source).OnRecalcAll;
end
else inherited Assign(Source);
end;

< obsolete
function GetMasterSource(ADataSet:TDataSet): TDataSet;
var PropInfo: PPropInfo;
PropValue: TDataSource;
begin
Result := nil;
PropValue := nil;
PropInfo := GetPropInfo(ADataSet.ClassInfo, ‘MasterSource’);
if (PropInfo <> nil) then begin
if PropInfo^.PropType^.Kind = tkClass then
try
PropValue := (TObject(GetOrdProp(ADataSet, PropInfo)) as TDataSource);
except // if PropInfo is not TDataSource or not inherited of
end;
end;
if (PropValue <> nil) then Result := PropValue.DataSet;
end;
>

function TDBSumListProducer.GetMasterDataSet(APropInfo: PPropInfo): TDataSet;
var PropValue: TDataSource;
begin
Result := nil;
PropValue := nil;
if (APropInfo <> nil) then
begin
if APropInfo^.PropType^.Kind = tkClass then
try
PropValue := (TObject(GetOrdProp(FDataSet, APropInfo)) as TDataSource);
except // if PropInfo is not TDataSource or not inherited of
end;
end;
if (PropValue <> nil)
then Result := PropValue.DataSet;
end;

procedure TDBSumListProducer.ResetMasterInfo;
begin
//if (AMasterSource = FMasterDataSet) then Exit;
if Assigned(FMasterDataSet) then
begin
FMasterDataSet.AfterScroll := OldMasterAfterScroll;
end;
OldMasterAfterScroll := nil;
FMasterPropInfo := GetPropInfo(FDataSet.ClassInfo, ‘MasterSource’);
FMasterDataSet := GetMasterDataSet(FMasterPropInfo);
if Assigned(FMasterDataSet)
then OldMasterAfterScroll := FMasterDataSet.AfterScroll;
if Assigned(FMasterDataSet)
then FMasterDataSet.AfterScroll := MasterDataSetAfterScroll;
end;

procedure TDBSumListProducer.SetDataSetEvents;
begin
if Assigned(FDataSet) and (FEventsOverloaded = False) then // Set new events
begin

FMasterPropInfo := GetPropInfo(FDataSet.ClassInfo, ‘MasterSource’);
FMasterDataSet := GetMasterDataSet(FMasterPropInfo);

OldAfterEdit := FDataSet.AfterEdit;
OldAfterInsert := FDataSet.AfterInsert;
OldAfterOpen := FDataSet.AfterOpen;
OldAfterPost := FDataSet.AfterPost;
OldAfterScroll := FDataSet.AfterScroll;
OldBeforeDelete := FDataSet.BeforeDelete;
OldAfterClose := FDataSet.AfterClose;
OldAfterCancel := FDataSet.AfterCancel;
if Assigned(FMasterDataSet)
then OldMasterAfterScroll := FMasterDataSet.AfterScroll;

FDataSet.AfterEdit := DataSetAfterEdit;
FDataSet.AfterInsert := DataSetAfterInsert;
FDataSet.AfterOpen := DataSetAfterOpen;
FDataSet.AfterPost := DataSetAfterPost;
FDataSet.AfterScroll := DataSetAfterScroll;
FDataSet.BeforeDelete := DataSetBeforeDelete;
FDataSet.AfterClose := DataSetAfterClose;
FDataSet.AfterCancel := DataSetAfterCancel;
if Assigned(FMasterDataSet)
then FMasterDataSet.AfterScroll := MasterDataSetAfterScroll;

procedure TDBSumListProducer.ReturnEvents;
var i: Integer;
begin
if Assigned(FDataSet) and (FEventsOverloaded = True) then
begin // Return old events
FDataSet.AfterEdit := OldAfterEdit;
FDataSet.AfterInsert := OldAfterInsert;
FDataSet.AfterOpen := OldAfterOpen;
FDataSet.AfterPost := OldAfterPost;
FDataSet.AfterScroll := OldAfterScroll;
FDataSet.BeforeDelete := OldBeforeDelete;
FDataSet.AfterClose := OldAfterClose;
FDataSet.AfterCancel := OldAfterCancel;
if Assigned(FMasterDataSet) then begin
FMasterDataSet.AfterScroll := OldMasterAfterScroll;
end;

OldMasterAfterScroll := nil;
OldAfterEdit := nil;
OldAfterInsert := nil;
OldAfterOpen := nil;
OldAfterPost := nil;
OldAfterScroll := nil;
OldBeforeDelete := nil;
OldAfterClose := nil;
OldAfterCancel := nil;

FMasterPropInfo := nil;
FMasterDataSet := nil;

FEventsOverloaded := False;
for i := 0 to FVirtualRecList.Count — 1
do FDataSet.FreeBookmark(FVirtualRecList[i]);
FVirtualRecList.Clear;
end;
end;

procedure TDBSumListProducer.SetDataSet(Value: TDataSet);
var OldActive: Boolean;
begin
if Assigned(Value) and (FDataSet = Value) and (csDestroying in Value.ComponentState) then
begin
ReturnEvents;
FDataSet := nil;
end;
if (FDataSet = Value) then Exit;
if not (csLoading in FOwner.ComponentState) and
(FDesignTimeWork or not (csDesigning in FOwner.ComponentState)) then
begin
OldActive := Active;
Deactivate(True);
FDataSet := Value;
if OldActive then Activate(True);
end else
FDataSet := Value;
end;

procedure TDBSumListProducer.Loaded;
begin
// inherited;
if Assigned(FDataSet) and Active then begin
Activate(True);
end;
end;

procedure TDBSumListProducer.RecalcAll;
var i: Integer;
item: TDBSum;
NeedRecalc: Boolean;
begin
if (not FDesignTimeWork and (csDesigning in FOwner.ComponentState)) or
(csLoading in FOwner.ComponentState) or (Active = False) or not Assigned(DataSet) or
(DataSet.Active = False) or (FEventsOverloaded = False) then Exit;
try
ClearSumValues;
FOldRecNo := -1;

if Assigned(OnRecalcAll) then OnRecalcAll(Self);
if ExternalRecalc then Exit;

NeedRecalc := False;
for i := 0 to FSumCollection.Count — 1 do
if (TDBSum(FSumCollection.Items[i]).GroupOperation = goCount) or
(TDBSum(FSumCollection.Items[i]).FieldName <> ») then
begin
NeedRecalc := True;
Break;
end;

if not FDataSet.IsSequenced and VirtualRecords then
NeedRecalc := True;

if NeedRecalc then
begin
FDataSet.DisableControls;
for i := 0 to FVirtualRecList.Count — 1
do FDataSet.FreeBookmark(FVirtualRecList[i]);
FVirtualRecList.Clear;
Changing := True;

FDataSet.First;
while FDataSet.Eof = False do
begin
for i := 0 to FSumCollection.Count — 1 do
begin
item := TDBSum(FSumCollection.Items[i]);
if (item.GroupOperation = goCount) or (item.FieldName <> ») then
begin
case Item.GroupOperation of
goSum:
if (FDataSet.FieldByName(Item.FieldName).IsNull = False) then
Item.SumValue := Item.SumValue + FDataSet.FieldByName(Item.FieldName).AsFloat;
goCount:
if (Item.FieldName = ») or not FDataSet.FieldByName(Item.FieldName).IsNull then
Item.SumValue := Item.SumValue + 1;
goAvg:
begin
if (FDataSet.FieldByName(Item.FieldName).IsNull = False) then
Inc(Item.FNotNullRecordCount);
Item.FSumValueAsSum := Item.FSumValueAsSum + FDataSet.FieldByName(Item.FieldName).AsFloat;
end;
end;
end;
end;
if not FDataSet.IsSequenced and VirtualRecords then
FVirtualRecList.Add(Pointer(FDataSet.GetBookmark));
FDataSet.Next;
end;
FDataSet.First;

for i := 0 to FSumCollection.Count — 1 do
with TDBSum(FSumCollection.Items[i]) do
if GroupOperation = goAvg then
if FNotNullRecordCount <> 0
then SumValue := FSumValueAsSum / FNotNullRecordCount
else SumValue := 0;

if Assigned(OnAfterRecalcAll) then OnAfterRecalcAll(Self);

//// SumValue := Cur;
finally
Filtered := FDataSet.Filtered;
Filter := FDataSet.Filter;
Changing := False;
DoSumListChanged;
end;
end;

procedure TDBSumListProducer.DataSetAfterEdit(DataSet: TDataSet);
var i: Integer;
item: TDBSum;
begin
if (Assigned(OldAfterEdit)) then
OldAfterEdit(DataSet);
if (Active = False) then Exit;

for i := 0 to FSumCollection.Count — 1 do
begin
item := TDBSum(FSumCollection.Items[i]);
if (item.GroupOperation = goCount) or (item.FieldName <> ») then
begin
case Item.GroupOperation of
goSum, goAvg:
begin
if (FDataSet.FieldByName(Item.FieldName).IsNull = False)
then Item.Value := FDataSet.FieldByName(Item.FieldName).AsFloat
else Item.Value := 0;
Item.VarValue := FDataSet.FieldByName(Item.FieldName).AsVariant;
end;
goCount:
if (Item.FieldName = ») or not FDataSet.FieldByName(Item.FieldName).IsNull
then Item.Value := 1
else Item.Value := 0;
end;
end;
end;
end;

procedure TDBSumListProducer.DataSetAfterInsert(DataSet: TDataSet);
var i: Integer;
Item: TDBSum;
ABookMark: TBookmark;
begin
if Active then
begin
for i := 0 to FSumCollection.Count — 1 do
begin
Item := TDBSum(FSumCollection.Items[i]);
if (item.GroupOperation = goCount) or (item.FieldName <> ») then
begin
case Item.GroupOperation of
goSum, goAvg:
begin
Item.Value := 0;
Item.VarValue := Null;
end;
goCount:
if not (Item.FieldName = ») and not FDataSet.FieldByName(Item.FieldName).IsNull
then Item.Value := 1
else Item.Value := 0;
end;
end;
end;

if not FDataSet.IsSequenced and VirtualRecords then
begin
ABookMark := FDataSet.GetBookmark;
if Assigned(ABookMark)
then FVirtualRecList.Add(Pointer(ABookMark))
else FTryedInsert := True;
end;
end;
if (Assigned(OldAfterInsert)) then
OldAfterInsert(DataSet);
end;

procedure TDBSumListProducer.DataSetAfterOpen(DataSet: TDataSet);
begin
if Active then RecalcAll;
if (Assigned(OldAfterOpen)) then
OldAfterOpen(DataSet);
end;

procedure TDBSumListProducer.DataSetAfterPost(DataSet: TDataSet);
var i: Integer;
item: TDBSum;
ARecNo, C: Integer;
begin
if Active then
begin
for i := 0 to FSumCollection.Count — 1 do
begin
item := TDBSum(FSumCollection.Items[i]);
if (item.GroupOperation = goCount) or (item.FieldName <> ») then
begin
case Item.GroupOperation of
goSum:
if (FDataSet.FieldByName(Item.FieldName).IsNull = False) then
Item.SumValue := Item.SumValue — Item.Value + FDataSet.FieldByName(Item.FieldName).AsFloat
else
Item.SumValue := Item.SumValue — Item.Value;
goCount:
if (Item.FieldName = ») or not FDataSet.FieldByName(Item.FieldName).IsNull
then Item.SumValue := Item.SumValue — Item.Value + 1
else Item.SumValue := Item.SumValue — Item.Value;
goAvg:
begin
if (FDataSet.FieldByName(Item.FieldName).IsNull = False) then
begin
if Item.VarValue = Null then Inc(Item.FNotNullRecordCount);
Item.FSumValueAsSum := Item.FSumValueAsSum — Item.Value + FDataSet.FieldByName(Item.FieldName).AsFloat
end else
begin
if Item.VarValue <> Null then Dec(Item.FNotNullRecordCount);
Item.FSumValueAsSum := Item.FSumValueAsSum — Item.Value;
end;
if Item.FNotNullRecordCount <> 0
then Item.SumValue := Item.FSumValueAsSum / Item.FNotNullRecordCount
else Item.SumValue := 0;
end;
end;
end;
end;

if not FDataSet.IsSequenced and VirtualRecords and FTryedInsert = True then
begin
ARecNo := FOldRecNo;
if (ARecNo = -1) or (ARecNo >= FVirtualRecList.Count) then ARecNo := 0;
if (FVirtualRecList.Count > 0) then
C := DataSet.CompareBookmarks(TBookMark(FVirtualRecList[ARecNo]), TBookMark(FDataSet.Bookmark))
else
C := 0;
if (C > 0) then
while C > 0 do
begin
Dec(ARecNo);
if (ARecNo = FVirtualRecList.Count) then Break;
C := DataSet.CompareBookmarks(TBookMark(FVirtualRecList[ARecNo]), TBookMark(FDataSet.Bookmark));
end;
FVirtualRecList.Insert(ARecNo, Pointer(FDataSet.GetBookmark));
FTryedInsert := False;
end;
DoSumListChanged;
end;
if (Assigned(OldAfterPost)) then
OldAfterPost(DataSet);
end;

procedure TDBSumListProducer.DataSetAfterScroll(DataSet: TDataSet);
begin
if (Assigned(OldAfterScroll)) then
OldAfterScroll(DataSet);
if (Active = False) then Exit;

if (Changing = False) then
begin
if ((DataSet.Filtered and (Filter <> DataSet.Filter)) or (Filtered <> DataSet.Filtered)) then
RecalcAll;
GetMasterDataSet(FMasterPropInfo)) then begin
ResetMasterInfo;
RecalcAll;
end;>
end;
end;

procedure TDBSumListProducer.DataSetBeforeDelete(DataSet: TDataSet);
var i: Integer;
item: TDBSum;
begin
if (Assigned(OldBeforeDelete)) then
OldBeforeDelete(DataSet);
if (Active = False) then Exit;

for i := 0 to FSumCollection.Count — 1 do
begin
item := TDBSum(FSumCollection.Items[i]);
if (item.GroupOperation = goCount) or (item.FieldName <> ») then
begin
case Item.GroupOperation of
goSum:
Item.SumValue := Item.SumValue — FDataSet.FieldByName(Item.FieldName).AsFloat;
goCount:
if (Item.FieldName = ») or not FDataSet.FieldByName(Item.FieldName).IsNull
then Item.SumValue := Item.SumValue — 1;
goAvg:
begin
Item.FSumValueAsSum := Item.FSumValueAsSum — FDataSet.FieldByName(Item.FieldName).AsFloat;
if not FDataSet.FieldByName(Item.FieldName).IsNull then Dec(Item.FNotNullRecordCount);
if Item.FNotNullRecordCount <> 0
then Item.SumValue := Item.FSumValueAsSum / Item.FNotNullRecordCount
else Item.SumValue := 0;
end;
end;
end;
end;

if not FDataSet.IsSequenced and VirtualRecords then
begin
i := FindVirtualRecord(TBookmark(FDataSet.Bookmark));
if i >= 0 then
begin
FDataSet.FreeBookmark(FVirtualRecList[i]);
FVirtualRecList.Delete(i);
end;
end;

procedure TDBSumListProducer.DataSetAfterClose(DataSet: TDataSet);
var
i: integer;
begin
if Active then
begin
ClearSumValues;
DoSumListChanged;
Changing := False;
end;

if Assigned(FDataSet) and Assigned(FVirtualRecList) and (FVirtualRecList.Count > 0) then
for i := 0 to FVirtualRecList.Count — 1 do
FDataSet.FreeBookmark(FVirtualRecList[i]);
FVirtualRecList.Clear;

if (Assigned(OldAfterClose)) then
OldAfterClose(DataSet);
end;

procedure TDBSumListProducer.SetSumCollection(const Value: TDBSumCollection);
begin
FSumCollection.Assign(Value);
end;

procedure TDBSumListProducer.SetActive(const Value: Boolean);
begin
if (FActive = Value) then Exit;
if (Value = True) then Activate(True);
if (Value = False) then Deactivate(True);
end;

procedure TDBSumListProducer.Activate(ARecalcAll: Boolean);
begin
FActive := True;
if (csLoading in FOwner.ComponentState) or
(not FDesignTimeWork and (csDesigning in FOwner.ComponentState)) then Exit;
SetDataSetEvents;
if ARecalcAll then RecalcAll;
end;

procedure TDBSumListProducer.Deactivate(AClearSumValues: Boolean);
begin
FActive := False;
if (csLoading in FOwner.ComponentState) or
(not FDesignTimeWork and (csDesigning in FOwner.ComponentState)) then Exit;
ReturnEvents;
if AClearSumValues then ClearSumValues;
end;

procedure TDBSumListProducer.DoSumListChanged;
begin
if Assigned(SumListChanged) then SumListChanged(Self);
end;

procedure TDBSumListProducer.ClearSumValues;
var i: Integer;
item: TDBSum;
begin
for i := 0 to FSumCollection.Count — 1 do
begin
item := TDBSum(FSumCollection.Items[i]);
item.SumValue := 0;
item.Value := 0;
item.FSumValueAsSum := 0;
item.FNotNullRecordCount := 0;
end;
DoSumListChanged;
end;

procedure TDBSumListProducer.SetExternalRecalc(const Value: Boolean);
begin
if (FExternalRecalc = Value) then Exit;
FExternalRecalc := Value;
RecalcAll;
end;

procedure TDBSumListProducer.MasterDataSetAfterScroll(DataSet: TDataSet);
begin
if (Assigned(OldMasterAfterScroll)) then
OldMasterAfterScroll(DataSet);

if (Active = False) then Exit;
if Changing = False then RecalcAll;
end;

procedure TDBSumListProducer.DataSetAfterCancel(DataSet: TDataSet);
begin
if (Assigned(OldAfterCancel)) then
OldAfterCancel(DataSet);
FTryedInsert := False;
end;

function TDBSumListProducer.GetOwner: TPersistent;
begin
Result := FOwner;
end;

procedure TDBSumListProducer.Update;
begin
if (csLoading in FOwner.ComponentState) then Exit;
if FEventsOverloaded then ReturnEvents;
end else begin
if not FEventsOverloaded then SetDataSetEvents;
RecalcAll;
end;>
RecalcAll;
end;

procedure TDBSumListProducer.SetVirtualRecords(const Value: Boolean);
begin
if (FVirtualRecords = Value) then Exit;
FVirtualRecords := Value;
if FVirtualRecords then RecalcAll;
end;

function TDBSumListProducer.GetRecNo: Integer;
begin
if not DataSet.IsSequenced and VirtualRecords and Active then
Result := FindVirtualRecord(TBookmark(DataSet.Bookmark)) + 1
else
Result := DataSet.RecNo;
end;

procedure TDBSumListProducer.SetRecNo(const Value: Integer);
begin
if not DataSet.IsSequenced and VirtualRecords and Active then
DataSet.GotoBookmark(TBookmark(FVirtualRecList[Value — 1]))
else
DataSet.RecNo := Value;
end;

function TDBSumListProducer.RecordCount: Integer;
begin
if Assigned(DataSet) and not DataSet.IsSequenced and VirtualRecords and Active then
Result := FVirtualRecList.Count
else if Assigned(DataSet) then
Result := DataSet.RecordCount
else Result := 0;
end;

function TDBSumListProducer.IsSequenced: Boolean;
begin
Result := (Assigned(DataSet) and DataSet.IsSequenced) or
(Assigned(DataSet) and VirtualRecords and Active and not ((FVirtualRecList.Count = 0) and not (DataSet.EOF and DataSet.BOF)));
// if VirtualRecords and Active and (FVirtualRecList.Count = 0) and not (DataSet.EOF and DataSet.BOF) then // Not yet recalculated
// Result := False;
end;

function TDBSumListProducer.FindVirtualRecord(Bookmark: TBookmark): Integer;
var
C: Integer;
begin
Result := -1;
if FOldRecNo = -1 then FOldRecNo := 0;

if FVirtualRecList.Count = 0 then Exit;
if FOldRecNo >= FVirtualRecList.Count then FOldRecNo := 0; //Raise Exception.Create(‘Unexpected error -1 in function FindVirtualRecord’);

C := DataSet.CompareBookmarks(TBookMark(FVirtualRecList[FOldRecNo]), Bookmark);

if (C > 0) then
while C <> 0 do
begin
Dec(FOldRecNo);
if (FOldRecNo 0 do
begin
Inc(FOldRecNo);
if (FOldRecNo >= FVirtualRecList.Count) then Exit; //Raise Exception.Create(‘Unexpected error -3 in function FindVirtualRecord’);
C := DataSet.CompareBookmarks(TBookMark(FVirtualRecList[FOldRecNo]), Bookmark);
end;

procedure TDBSum.Assign(Source: TPersistent);
begin
if Source is TDBSum then
begin
GroupOperation := TDBSum(Source).GroupOperation;
FieldName := TDBSum(Source).FieldName;
Value := TDBSum(Source).Value;
SumValue := TDBSum(Source).SumValue;
end
else inherited Assign(Source);
end;

procedure TDBSum.SetFieldName(const Value: String);
begin
if (FFieldName = Value) then Exit;
FFieldName := Value;
Changed(False);
end;

procedure TDBSum.SetGroupOperation(const Value: TGroupOperation);
begin
if (FGroupOperation = Value) then Exit;
FGroupOperation := Value;
Changed(False);
end;

function TDBSumCollection.GetOwner: TPersistent;
begin
Result := FOwner;
end;

function TDBSumCollection.GetItem(Index: Integer): TDBSum;
begin
Result := TDBSum(inherited GetItem(Index));
end;

procedure TDBSumCollection.SetItem(Index: Integer; Value: TDBSum);
begin
inherited SetItem(Index, Value);
end;

procedure TDBSumCollection.Update(Item: TCollectionItem);
begin
TDBSumListProducer(FOwner).Update;
end;

function TDBSumCollection.GetSumByOpAndFName(
AGroupOperation: TGroupOperation; AFieldName: String): TDBSum;
var i: Integer;
begin
Result := nil;
for i := 0 to Count — 1 do
begin
if (AGroupOperation = Items[i].GroupOperation) and
(AnsiCompareText(AFieldName, Items[i].FieldName) = 0) then
begin
Result := Items[i];
Exit;
end;
end;
end;

constructor TDBSumList.Create(AOwner: TComponent);
begin
inherited;
FSumListProducer := TDBSumListProducer.Create(Self);
end;

destructor TDBSumList.Destroy;
begin
inherited;
FSumListProducer.Free;
end;

procedure TDBSumList.Activate(ARecalcAll: Boolean);
begin
FSumListProducer.Activate(ARecalcAll);
end;

procedure TDBSumList.ClearSumValues;
begin
FSumListProducer.ClearSumValues;
end;

procedure TDBSumList.DataSetAfterClose(DataSet: TDataSet);
begin
FSumListProducer.DataSetAfterClose(DataSet);
end;

procedure TDBSumList.DataSetAfterEdit(DataSet: TDataSet);
begin
FSumListProducer.DataSetAfterEdit(DataSet);
end;

procedure TDBSumList.DataSetAfterInsert(DataSet: TDataSet);
begin
FSumListProducer.DataSetAfterInsert(DataSet);
end;

procedure TDBSumList.DataSetAfterOpen(DataSet: TDataSet);
begin
FSumListProducer.DataSetAfterOpen(DataSet);
end;

procedure TDBSumList.DataSetAfterPost(DataSet: TDataSet);
begin
FSumListProducer.DataSetAfterPost(DataSet);
end;

procedure TDBSumList.DataSetAfterScroll(DataSet: TDataSet);
begin
FSumListProducer.DataSetAfterScroll(DataSet);
end;

procedure TDBSumList.DataSetBeforeDelete(DataSet: TDataSet);
begin
FSumListProducer.DataSetBeforeDelete(DataSet);
end;

procedure TDBSumList.Deactivate(AClearSumValues: Boolean);
begin
FSumListProducer.Deactivate(AClearSumValues);
end;

procedure TDBSumList.DoSumListChanged;
begin
FSumListProducer.DoSumListChanged;
end;

procedure TDBSumList.Loaded;
begin
inherited;
FSumListProducer.Loaded;
end;

procedure TDBSumList.MasterDataSetAfterScroll(DataSet: TDataSet);
begin
FSumListProducer.MasterDataSetAfterScroll(DataSet);
end;

procedure TDBSumList.RecalcAll;
begin
FSumListProducer.RecalcAll;
end;

procedure TDBSumList.SetActive(const Value: Boolean);
begin
FSumListProducer.SetActive(Value);
end;

procedure TDBSumList.SetDataSet(Value: TDataSet);
begin
FSumListProducer.SetDataSet(Value);
if Value <> nil then Value.FreeNotification(Self);
end;

procedure TDBSumList.SetDataSetEvents;
begin
FSumListProducer.SetDataSetEvents;
end;

procedure TDBSumList.SetExternalRecalc(const Value: Boolean);
begin
FSumListProducer.SetExternalRecalc(Value);
end;

procedure TDBSumList.SetSumCollection(const Value: TDBSumCollection);
begin
FSumListProducer.SetSumCollection(Value);
end;

function TDBSumList.GetActive: Boolean;
begin
Result := FSumListProducer.Active;
end;

function TDBSumList.GetDataSet: TDataSet;
begin
Result := FSumListProducer.DataSet;
end;

function TDBSumList.GetExternalRecalc: Boolean;
begin
Result := FSumListProducer.ExternalRecalc;
end;

function TDBSumList.GetOnRecalcAll: TNotifyEvent;
begin
Result := FSumListProducer.OnRecalcAll;
end;

function TDBSumList.GetSumCollection: TDBSumCollection;
begin
Result := FSumListProducer.SumCollection;
end;

function TDBSumList.GetSumListChanged: TNotifyEvent;
begin
Result := FSumListProducer.SumListChanged;
end;

procedure TDBSumList.SetOnRecalcAll(const Value: TNotifyEvent);
begin
FSumListProducer.OnRecalcAll := Value;
end;

procedure TDBSumList.SetSumListChanged(const Value: TNotifyEvent);
begin
FSumListProducer.SumListChanged := Value;
end;

function TDBSumList.IsSequenced: Boolean;
begin
Result := FSumListProducer.IsSequenced;
end;

function TDBSumList.RecordCount: Integer;
begin
Result := FSumListProducer.RecordCount;
end;

procedure TDBSumList.SetVirtualRecords(const Value: Boolean);
begin
FSumListProducer.VirtualRecords := Value;
end;

function TDBSumList.GetVirtualRecords: Boolean;
begin
Result := FSumListProducer.VirtualRecords;
end;

function TDBSumList.GetRecNo: Integer;
begin
Result := FSumListProducer.RecNo;
end;

procedure TDBSumList.SetRecNo(const Value: Integer);
begin
FSumListProducer.RecNo := Value;
end;

procedure TDBSumList.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) then
begin
if (AComponent is TDataSet) and (AComponent = DataSet) then
begin
DataSet := nil;
end;
end;
end;

function TDBSumList.GetOnAfterRecalcAll: TNotifyEvent;
begin
Result := FSumListProducer.OnAfterRecalcAll;
end;

procedure TDBSumList.SetOnAfterRecalcAll(const Value: TNotifyEvent);
begin
FSumListProducer.OnAfterRecalcAll := Value;
end;

NiJazz
Дата 13.2.2004, 16:27 (ссылка) | (нет голосов) Загрузка .

Jazz coder

Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Medved
Дата 13.2.2004, 17:22 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Цитата(NiJazz @ 13.2.2004, 17:28)
Сделал так: Tools->Environment Options->Library->Library Path

Указал путь к папке . \EhLib\Common\. Сохранил.

Это надо делать после того, как установите преложение.

А добавлять надо тогда, когда вы открываете файл dpk. Там есть кнопка Option.

Цитата(NiJazz @ 13.2.2004, 17:28)
Открыл пакет, . \EhLib\Delphi6\EhLib60.dpk, потом нажал Install (Установить). Перед этим на всякий случай: Build (Построить). Выдаётся ошибка: File not found: ‘DBSumLst.dcu’. При этом красным выделяется строка с ошибкой: PropStorageEh in ‘PropStorageEh.pas’;.

Что нужно делать?

Вы переписали данные из папки common в папку Delphi6 (где лежит dpk файл \EhLib\Delphi6 )?

December
Дата 13.2.2004, 20:20 (ссылка) | (нет голосов) Загрузка .

Antitheorist

Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Medved
Дата 13.2.2004, 21:14 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Есть два способа установить EhLib
1. И самый простой:
Переписть все файлы из каталога «Ehlib\Common» в каталог «Ehlib\DelphiX» («X замените на ту версию Delphi, которая у вас стоит»), затем открыть dpk файл и инсталировать его.

2. Открыть требуемый dpk файл. В окне инсталяции этого dpk файла (Package — EhLib.dpk) нажать кнопку «Option» и перейти на закладку «Directories/Conditional» и в реквизите «Search Path» указать путь к папке «Ehlib\Common». Нажать кнопку Install и все. Как говорит MicroSoft: «Откинтесь на спинку кресла и наслаждайтесь процессом инсталяции»

Kesh
Дата 15.2.2004, 11:01 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

December
Дата 15.2.2004, 18:53 (ссылка) | (нет голосов) Загрузка .

Antitheorist

Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Kesh
Дата 15.2.2004, 20:05 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Опытный

Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Вы будете ржать!
У меня не устанавливается!
пишет Цицирую:
can`t be installed because it is not a design time package

Georg4
Дата 15.2.2004, 20:39 (ссылка) | (нет голосов) Загрузка .
December
Дата 15.2.2004, 23:51 (ссылка) | (нет голосов) Загрузка .

Antitheorist

Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

StayAtHome
Дата 16.2.2004, 01:09 (ссылка) | (нет голосов) Загрузка .

Домосед

Профиль
Группа: Участник
Сообщений: 456
Регистрация: 26.1.2004
Где: Украина

NiJazz
Дата 17.2.2004, 12:56 (ссылка) | (нет голосов) Загрузка .

Jazz coder

Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

[/QUOTE]can`t be installed because it is not a design time package[QUOTE]Та же фигня.

StayAtHome, теория — это, конечно, здорово! Но как нам с библиотекой быть?

December
[QUOTE]Georg4 На каком шаге ругается? [/QUOTE]Когда жмешь Install.

У меня библиотека лежит в . \Borland\Delphi 6\EhLib\
Может, ей какой-нибудь особый путь нужен?

Я скопировал все файлы из . \Borland\Delphi 6\EhLib\Common\ в . \Borland\Delphi 6\EhLib\Delphi 6\
Затем открыл в среде в . \Borland\Delphi 6\EhLib\Delphi 6\ файл EhLib6.dpk. Потом нажал Install. Выдалась ошибка как у Georg4.

Kesh
Дата 17.2.2004, 15:35 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

StayAtHome
Дата 18.2.2004, 01:23 (ссылка) | (нет голосов) Загрузка .

Домосед

Профиль
Группа: Участник
Сообщений: 456
Регистрация: 26.1.2004
Где: Украина

NiJazz
Я ж и говорю, инсталлировать надо только DclEhLibXX.dpk!
И только после того, как откомпилировались EhLibXX.dpk и DclEhLibXX.dpk
Где стоит библиотека, значения не имеет, главное, чтоб пути были прописаны. Все *.dcu перемести в lib.

Это сообщение отредактировал(а) StayAtHome — 18.2.2004, 01:27

Kesh
Дата 18.2.2004, 08:48 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Профиль
Группа: Участник
Сообщений: 8
Регистрация: 15.2.2004

Народ, у меня тоже проблема при запуске откомпил. exe файла вылетает скачайте полную версию
У меня C-Builder 5, я скачивал с сайта EhLib 3.3 Evaluation Setup for C++ Builder 5, что там надо добавить или переустановить(именно для C-Builder 5).

SeVa
Дата 19.2.2004, 14:00 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 8
Регистрация: 15.2.2004

всё уже поставил, всё оказалось очень просто.
Возник ещё такой вопрос:
вот делаю я проект с использованием этой библиотеки, у себя на компе всё поставил компиляю, всё нормально.
Но если я перенесу проект на другую машину то там, конечно же компиляться ничего не будет(т. к. там не стоит EhLib)

Можно ли сделать такой проект, что бы в нём уже была встроена библиотека, и этот проект можно было компилять везде.

SeVa
Дата 19.2.2004, 14:47 (ссылка) | (нет голосов) Загрузка .
Kesh
Дата 19.2.2004, 17:38 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Опытный

Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

А у меня когда я хочу проинсталлить DclEhLib60.dpk
выдает что не может найти файл DclEhLib60.bpl

Georg4
Дата 24.2.2004, 01:10 (ссылка) | (нет голосов) Загрузка .
Medved
Дата 24.2.2004, 06:01 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2010

CodeGold
Дата 20.1.2013, 10:30 (ссылка) | (нет голосов) Загрузка .
Akella
Дата 20.1.2013, 11:21 (ссылка) | (нет голосов) Загрузка .

Творец

Профиль
Группа: Модератор
Сообщений: 18484
Регистрация: 14.5.2003
Где: Корусант

Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2010

CodeGold
Дата 21.1.2013, 05:47 (ссылка) | (нет голосов) Загрузка .
Цитата(Akella @ 20.1.2013, 09:21)
А что, прилагаемые к билиотеке EhLib файлы readme.txt или installation.txt не судьба прочитать?
Akella
Дата 21.1.2013, 11:16 (ссылка) | (нет голосов) Загрузка .

Творец

Профиль
Группа: Модератор
Сообщений: 18484
Регистрация: 14.5.2003
Где: Корусант

Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2010

CodeGold
Дата 21.1.2013, 11:18 (ссылка) | (нет голосов) Загрузка .
Цитата(Akella @ 21.1.2013, 09:16)
К.О. подсказывает мне, что следует взять версию с поддержкой XE3

да, 6 версия поддерживает XE3, и стоит она 5 тыс рублей.

я долистал до 20 страницы гугла в поиска полной версии)))

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

kami
Дата 21.1.2013, 13:40 (ссылка) | (голосов:2) Загрузка .

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »

[ Время генерации скрипта: 0.3136 ] [ Использовано запросов: 21 ] [ GZIP включён ]

источник

Читайте также:  Установка готового сруба бани