mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 04:22:21 +01:00 
			
		
		
		
	-------------------------------------------------------
Addfunction / frFuncStr
  - Fixed string functions - accounted for UTF8 strings
DialogControls
  - Fixed reports generation with built-in query mode, MDI (multiple reports open for viewing at the same time)
  - Fixed UNDO in editor
  - Added property HINT for dialog controls
  - A new component - TlrRadioGroup
lrOfficeImport
  - New tool reports designer to import data from a spreadsheet as a report template
source
  - The object TfrMemoView added new handlers
    - OnClick - Event when you click on TfrMemoView in playback mode built reports
    - OnMouseEnter - Event at the Enter of the mouse over TfrMemoView in playback mode built reports
    - OnMouseLeave - Event at the Leave of the mouse TfrMemoView in playback mode built reports
  - The object TfrMemoView added new properties
    - Cursor - the mouse cursor when moving over TfrMemoView in playback mode built reports
    - DetailReport - a reference to the detail-report - called when the user clicks the mouse on TfrMemoView in playback mode built reports
  - A mechanism to detail-report - call a detailed report of the current report
  - In ineterpretatore added new features (for compatibility with FastReport 2.5):
      - FINALPASS
      - CURY
      - PAGEHEIGH
      - PAGEWIDTH
  - In the reports, the editor started saving paramerov editor (the location of the Object Inspector, fonts)
  - In the reports, the editor corrected the addition of new tools (implemented a new tool - Import report template from excel/OpenOffice)
  - Editor of reports finalized Inspector data - now you can also insert variables
  - For export to txt implemented request form export options
images
  - Made in the resources icon tool insert fields in a report from the editor
Demo included (detail_reports)
And new extensions:
- import report template from calc/excel
- send email from report preview (for sending used local mail app, installed on user PC - in windows its TheBat! and Mozilla Thunderbird).
  In future I'm plan make direct send.
git-svn-id: trunk@46079 -
		
	
			
		
			
				
	
	
		
			140 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
 | 
						|
{*****************************************}
 | 
						|
{                                         }
 | 
						|
{             FastReport v2.3             }
 | 
						|
{             DB related stuff            }
 | 
						|
{                                         }
 | 
						|
{  Copyright (c) 1998-99 by Tzyganenko A. }
 | 
						|
{                                         }
 | 
						|
{*****************************************}
 | 
						|
 | 
						|
unit LR_DBRel;
 | 
						|
 | 
						|
interface
 | 
						|
 | 
						|
{$I LR_Vers.inc}
 | 
						|
 | 
						|
uses
 | 
						|
  SysUtils, Classes, DB;
 | 
						|
 | 
						|
const
 | 
						|
  frEmptyBookmark = nil;
 | 
						|
 | 
						|
type
 | 
						|
  { TODO -oalexs : Remove this }
 | 
						|
  TfrBookmark = TBookmark;
 | 
						|
  TfrTDataSet =class(TDataSet);
 | 
						|
  TfrTField = class(TField);
 | 
						|
  TfrTBlobField = class(TBlobField);
 | 
						|
 | 
						|
function frIsBlob(Field: TfrTField): Boolean;
 | 
						|
function frIsBookmarksEqual(DataSet: TfrTDataSet; b1, b2: TfrBookmark): Boolean;
 | 
						|
procedure frGetFieldNames(DataSet: TfrTDataSet; List: TStrings);
 | 
						|
function frGetBookmark(DataSet: TfrTDataSet): TfrBookmark;
 | 
						|
procedure frFreeBookmark(DataSet: TfrTDataSet; Bookmark: TfrBookmark);
 | 
						|
procedure frGotoBookmark(DataSet: TfrTDataSet; Bookmark: TfrBookmark);
 | 
						|
function frGetDataSource(Owner: TComponent; d: TDataSet): TDataSource;
 | 
						|
 | 
						|
function lrGetFieldValue(F:TField):Variant;
 | 
						|
 | 
						|
const
 | 
						|
  TypeStringField = [ftString, ftMemo, ftFmtMemo, ftFixedChar, ftWideString,
 | 
						|
    ftFixedWideChar, ftWideMemo];
 | 
						|
 | 
						|
  TypeNumericField = [ftFloat, ftCurrency, ftBCD, ftDate,  ftTime, ftDateTime,
 | 
						|
    ftTimeStamp];
 | 
						|
 | 
						|
  TypeIntegerField = [ftSmallint, ftInteger, ftWord, ftAutoInc, ftLargeint];
 | 
						|
 | 
						|
  TypeBooleanField = [ftBoolean];
 | 
						|
 | 
						|
implementation
 | 
						|
uses LR_Utils;
 | 
						|
 | 
						|
function frIsBlob(Field: TfrTField): Boolean;
 | 
						|
begin
 | 
						|
  Result := (Field <> nil) and (Field.DataType in [ftBlob..ftTypedBinary]);
 | 
						|
end;
 | 
						|
 | 
						|
procedure frGetFieldNames(DataSet: TfrTDataSet; List: TStrings);
 | 
						|
begin
 | 
						|
  if not Assigned(DataSet) then exit;
 | 
						|
  if DataSet.FieldCount > 0 then
 | 
						|
    DataSet.GetFieldNames(List)
 | 
						|
  else
 | 
						|
  begin
 | 
						|
{    DataSet.Open;
 | 
						|
    DataSet.GetFieldNames(List);
 | 
						|
    DataSet.Close;}
 | 
						|
    DataSet.FieldDefs.Update;
 | 
						|
    DataSet.FieldDefs.GetItemNames(List);
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
function frGetBookmark(DataSet: TfrTDataSet): TfrBookmark;
 | 
						|
begin
 | 
						|
  Result := DataSet.GetBookmark;
 | 
						|
end;
 | 
						|
 | 
						|
procedure frGotoBookmark(DataSet: TfrTDataSet; Bookmark: TfrBookmark);
 | 
						|
begin
 | 
						|
  DataSet.GotoBookmark(BookMark);
 | 
						|
end;
 | 
						|
 | 
						|
function frGetDataSource(Owner: TComponent; d: TDataSet): TDataSource;
 | 
						|
var
 | 
						|
  i: Integer;
 | 
						|
  sl: TStringList;
 | 
						|
  ds: TDataSource;
 | 
						|
begin
 | 
						|
  sl := TStringList.Create;
 | 
						|
  Result := nil;
 | 
						|
  frGetComponents(Owner, TDataSource, sl, nil);
 | 
						|
  for i := 0 to sl.Count - 1 do
 | 
						|
  begin
 | 
						|
    ds := frFindComponent(Owner, sl[i]) as TDataSource;
 | 
						|
    if (ds <> nil) and (ds.DataSet = d) then
 | 
						|
    begin
 | 
						|
      Result := ds;
 | 
						|
      break;
 | 
						|
    end;
 | 
						|
  end;
 | 
						|
  sl.Free;
 | 
						|
end;
 | 
						|
 | 
						|
function lrGetFieldValue(F: TField): Variant;
 | 
						|
begin
 | 
						|
  if Assigned(F) then
 | 
						|
  begin
 | 
						|
    if F.IsNull then
 | 
						|
    begin
 | 
						|
      if F.DataType in TypeStringField then
 | 
						|
        Result:=''
 | 
						|
      else
 | 
						|
      if F.DataType in (TypeIntegerField + TypeNumericField) then
 | 
						|
        Result:=0
 | 
						|
      else
 | 
						|
      if F.DataType in TypeBooleanField then
 | 
						|
        Result:=false
 | 
						|
      else
 | 
						|
        Result:=null
 | 
						|
    end
 | 
						|
    else
 | 
						|
      Result:=F.Value;
 | 
						|
  end
 | 
						|
  else
 | 
						|
    Result:=null;
 | 
						|
end;
 | 
						|
 | 
						|
procedure frFreeBookmark(DataSet: TfrTDataSet; Bookmark: TfrBookmark);
 | 
						|
begin
 | 
						|
  DataSet.FreeBookmark(BookMark);
 | 
						|
end;
 | 
						|
 | 
						|
function frIsBookmarksEqual(DataSet: TfrTDataSet; b1, b2: TfrBookmark): Boolean;
 | 
						|
begin
 | 
						|
  Result := DataSet.CompareBookmarks(b1, b2) = 0;
 | 
						|
end;
 | 
						|
 | 
						|
end.
 |