wwselfld.pas
来自「infopower 4000 for delphi 2006」· PAS 代码 · 共 1,421 行 · 第 1/3 页
PAS
1,421 行
unit Wwselfld;
{
//
// Dialog to support wwDBGrid field property selection
//
// Copyright (c) 1995-2001 by Woll2Woll Software
//
// 7/31/97 - DisplayLabel property only used for useTfields=true
}
interface
{$i wwIfDef.pas}
uses WinTypes, WinProcs, Classes, Graphics, Forms, Controls, Buttons,
StdCtrls, db, wwTable, wwaddlk, sysutils, dialogs,
TabNotBk, Tabs, ExtCtrls, DBTables, wwDBLook, wwcommon, wwstr,
wwdbcomb, wwdbgrid, wwQuery, wwQBE, Wwdbdlg, wwidlg, wwprpfld, wwdatainspector,
{$ifdef wwDelphi6Up}
designintf,
{$else}
dsgnintf,
{$endif}
{$ifdef win32}
wwriched,
{$endif}
wwtypes, Mask, wwdbedit, Wwdotdot, wwdbigrd, ipdsgn, wwedtpic;
type
TwwSelectedPropertyType = (sptNone, sptDataSetType, sptRecordViewType, sptObjectViewType);
TSelFieldsForm = class(TForm)
OKBtn: TBitBtn;
CancelBtn: TBitBtn;
HelpBtn: TBitBtn;
GroupBox1: TGroupBox;
DstList: TListBox;
AddFieldsButton: TButton;
RemoveFieldsButton: TButton;
SelectedFieldCaption: TGroupBox;
FieldNotebook: TNotebook;
DisplayWidthLabel: TLabel;
Label2: TLabel;
DisplayWidth: TEdit;
DisplayTitle: TEdit;
Label3: TLabel;
ControlTypeEdit: TComboBox;
ControlTypeNotebook: TNotebook;
Label10: TLabel;
Label11: TLabel;
BitmapScalingCombo: TComboBox;
RasterCombo: TComboBox;
Label6: TLabel;
Label7: TLabel;
CheckOnValue: TEdit;
CheckOffValue: TEdit;
Label9: TLabel;
PictureMaskLabel: TLabel;
DesignMaskButton: TButton;
Bevel1: TBevel;
Label4: TLabel;
Label5: TLabel;
LookupFieldCaption: TLabel;
LookupTableCaption: TLabel;
FieldTabSet: TTabSet;
AutoFillCheckbox: TCheckBox;
PictureDescription: TMemo;
Button4: TButton;
EditLookupButton: TButton;
Panel1: TPanel;
UsePictureMask: TCheckBox;
UseTFieldCheckbox: TCheckBox;
DBRichEditComboList: TwwDBComboBox;
Label1: TLabel;
InsertNewLineButton: TBitBtn;
ReadOnlyCB: TCheckBox;
ShrinkToFit: TCheckBox;
PictureMaskEdit: TwwDBComboDlg;
DBLookupComboList: TwwDBComboBox;
ControlAlwaysPaints: TCheckBox;
RTFControlAlwaysPaints: TCheckBox;
GroupName: TEdit;
GroupNameLabel: TLabel;
function InDestList(Value: string): Boolean;
procedure ExcludeItems;
procedure DstListClick(Sender: TObject);
procedure EditLookupButtonClick(Sender: TObject);
procedure ClearLinkButtonClick(Sender: TObject);
procedure SelectDest(index: integer);
procedure FormActivate(Sender: TObject);
procedure DisplayWidthChange(Sender: TObject);
procedure DisplayTitleChange(Sender: TObject);
procedure FieldTabSetClick(Sender: TObject);
procedure OKBtnClick(Sender: TObject);
procedure ControlTypeEditChange(Sender: TObject);
procedure ExcludeBtnClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure SortAvailCheckboxClick(Sender: TObject);
procedure HelpBtnClick(Sender: TObject);
procedure DesignMaskButtonClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure PictureMaskEditInitDialog(Dialog: TwwLookupDlg);
procedure PictureMaskEditChange(Sender: TObject);
procedure PictureMaskEditCloseUp(Sender: TObject;
LookupTable: TDataSet; FillTable: TDataset; modified: Boolean);
procedure RemoveFieldsButtonClick(Sender: TObject);
procedure AddFieldsButtonClick(Sender: TObject);
procedure DstListDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure DstListDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure DstListMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormShow(Sender: TObject);
procedure ScrollTimerOnTimer(Sender: TObject);
procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure UseTFieldCheckboxClick(Sender: TObject);
procedure InsertNewLineButtonClick(Sender: TObject);
procedure ReadOnlyCBClick(Sender: TObject);
procedure PictureMaskEditCustomDlg(Sender: TObject);
procedure DBLookupComboListDropDown(Sender: TObject);
procedure DBLookupComboListCloseUp(Sender: TwwDBComboBox;
Select: Boolean);
procedure GroupNameChange(Sender: TObject);
private
gridTable: TDataSet;
curField: TField;
dragFromRow: integer;
initialized: boolean;
SrcListItems: TStrings;
ScrollTimer: TTimer;
GoForwards, GoBackwards: Boolean;
useTFields: boolean;
GSelected: TStrings;
InSelectDest: boolean;
Component: TComponent;
controlType: TStrings;
propertyType: TwwSelectedPropertyType;
OrigColor: TColor;
procedure refreshSourceList;
// procedure AddEditControls(curForm: TComponent);
procedure getLookupFields(curField: Tfield;
var databasename, tableName, fieldName, index: wwSmallString;
var indexFields: string;
var joins: string;
var useExtension: char;
var foundIndex: integer);
procedure getControlInfo(curField: Tfield;
var controlName: wwSmallString; { formerly String }
controlData: TStrings);
procedure setControlInfo(curField: TField;
controlName: String;
controlData: TStrings);
procedure saveControlInfo;
procedure SavePictureMasks;
// procedure UpdateSelected(FieldName: string; val: string;
// SelectedProperty: TwwUpdateSelected);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
function wwSelectTableFields(
AComponent: TComponent;
dataSet: TDataSet;
var fields: TStrings;
var AuseTFields: boolean;
ADesigner:
{$ifdef wwDelphi6Up}
IDesigner;
{$else}
{$ifdef wwDelphi4Up}
IFormDesigner;
{$else}
TFormDesigner;
{$endif}
{$endif}
// {$ifdef wwDelphi4Up}IFormDesigner{$else}TFormDesigner{$endif};
APropertyType: TwwSelectedPropertyType): boolean;
implementation
{$R *.DFM}
uses wwprppic, wwlocate, typinfo;
{type SmallString = String[64];}
const LINKS_TABSETNAME = '&Links';
//var callingDesigner: {$ifdef wwDelphi4Up}IFormDesigner{$else}TFormDesigner{$endif};
destructor TSelFieldsForm.Destroy;
begin
SrcListItems.Free;
ScrollTimer.enabled:= False;
ScrollTimer.Free;
inherited Destroy;
end;
constructor TSelFieldsForm.Create(AOwner: TComponent);
begin
initialized:= False;
inherited Create(AOwner);
curField:= Nil;
SrcListItems:= TStringList.create;
ScrollTimer:= TTimer.create(self);
ScrollTimer.onTimer:= ScrollTimerOnTimer;
ScrollTimer.interval:= 50;
end;
procedure TSelFieldsForm.ScrollTimerOnTimer(Sender: TObject);
begin
if GoForwards then DstList.TopIndex:= DstList.TopIndex + 1
else if GoBackwards then DstList.TopIndex:= DstList.TopIndex - 1;
end;
Function wwSupportsInfoPower(ctrl: TComponent): boolean;
var PropInfo: PPropInfo;
begin
if Ctrl.InheritsFrom(TWinControl) then
begin
PropInfo:= Typinfo.GetPropInfo(ctrl.ClassInfo,'InfoPower');
result:= PropInfo<>Nil;
if not result then
if (Typinfo.GetPropInfo(ctrl.ClassInfo,'DataSource')<>nil) and
((Typinfo.GetPropInfo(ctrl.ClassInfo,'DataField')<>nil) or
wwIsClass(ctrl.ClassType, 'TwwDataInspector')) then
result:=True;
end
else result:= False;
end;
function wwSelectTableFields(
AComponent: TComponent;
dataSet: TDataSet;
var fields: TStrings;
var AUseTFields: boolean;
ADesigner: //{$ifdef wwDelphi4Up}IFormDesigner{$else}TFormDesigner{$endif};
{$ifdef wwDelphi6Up}
IDesigner;
{$else}
{$ifdef wwDelphi4Up}
IFormDesigner;
{$else}
TFormDesigner;
{$endif}
{$endif}
APropertyType: TwwSelectedPropertyType): boolean;
var i: integer;
parts : TStrings;
thisIndex: integer;
{ curField: TField;}
// selString: string;
// tempcomponent: TComponent;
origSelected: TStrings;
tempForm: TSelFieldsForm;
{$ifdef wwDelphi5Up}
OwnerComponent: TComponent;
{$endif}
procedure AddEditControls(curForm: TComponent);
var i: integer;
tempComponent: TComponent;
begin
for i:= 0 to curForm.ComponentCount-1 do begin
tempcomponent:= curForm.components[i];
if (tempcomponent is TwwDBCustomEdit) or (tempcomponent is TwwDBCustomLookupCombo) then
tempForm.DBLookupComboList.items.add(tempComponent.name)
else if (tempcomponent is TwwCustomRichEdit) then
tempForm.DBRichEditComboList.items.add(tempcomponent.name)
else if wwSupportsInfoPower(tempcomponent) then
tempForm.DBLookupComboList.items.add(tempcomponent.name)
{$ifdef wwDelphi5Up}
else if (tempComponent is TFrame) then begin
AddEditControls(tempComponent);
end
{$endif}
end;
end;
begin
parts := TStringList.create;
// callingDesigner:= designer;
result:= False;
origSelected:= nil;
tempForm:= TSelFieldsForm.create(Application);
with tempForm do
{ with TSelFieldsForm.create(Application) do}
try
if not wwDataSet(dataSet) then begin
MessageDlg('Data source must reference an InfoPower compatible TDataSet.', mtError,
[mbok], 0);
exit;
end;
Component:= AComponent;
gridTable:= dataSet;
ControlType:= nil; { Delphi 5}
if wwGetControlInfoInDataSet(Component) then
controlType:= wwGetControlType(gridTable);
if ControlType=nil then
controlType:= wwGetControlType(Component);
useTFields:= AUseTFields;
GSelected:= Fields;
OrigSelected:= TStringList.create;
OrigSelected.assign(GSelected);
// Don't error out if talble inactive
if (not gridTable.active) and (gridtable.fieldcount=0) then begin
MessageDlg('Cannot edit field properties. Dataset must be active or have persistent fields.',
mtError, [mbok], 0);
exit;
end;
gridTable.designer.Free; { reset dataset designer }
{ Initialize list of data-sources }
DBLookupComboList.items.clear;
DBRichEditComboList.items.clear;
// if (callingDesigner<>Nil) and (callingDesigner.form=nil) then
// showmessage('calling designer form is nil');
if ADesigner<>Nil then
begin
{$ifdef wwDelphi5Up}
ownerComponent:= wwGetOwnerFrameOrForm(Component);
if OwnerComponent is TCustomFrame then
AddEditControls(OwnerComponent)
else
{$endif}
{$ifdef wwDelphi6Up}
AddEditControls(ADesigner.Root)
{$else}
AddEditControls(ADesigner.Form)
{$endif}
end
else begin
AddEditControls(GetParentForm(TControl(Component)));
showmessage('calling designer is nil');
end;
{ 5/2/97 - Included controls on same form as dataset }
{ if (callingDesigner.Form<>gridtable.owner) then begin
for i:= 0 to gridtable.owner.ComponentCount-1 do begin
component:= gridtable.owner.components[i];
if (component is TwwDBCustomEdit) or (component is TwwDBCustomLookupCombo) then
DBLookupComboList.items.add('DataSetForm.' + Component.Name)
end
end;
}
gridTable.disableControls;
Screen.cursor:= crHourGlass;
gridTable.getFieldNames(SrcListItems);
{ Fill selected fields grid }
for i:= 0 to fields.count-1 do begin
strBreakApart(fields[i], #9, parts);
curField:= gridTable.FindField(parts[0]);
if curField<>Nil then begin
{ added in case no grid is used to show fields - i.e. LookupDialog}
if AUseTFields then begin
curField:= gridTable.fieldByName(parts[0]);
curField.displayWidth:= strtoint(parts[1]);
curField.displayLabel:= parts[2];
end;
DstList.items.add(parts[0]);
thisIndex:= SrcListItems.indexOf(parts[0]);
if thisIndex>=0 then SrcListItems.delete(thisIndex);
end
else if (wwNewLineString=parts[0]) then begin
DstList.items.add(parts[0]);
end
end;
gridTable.enableControls;
Screen.cursor:= crDefault;
tempform.propertyType:= APropertyType;
if ApropertyType=sptRecordViewType then
begin
useTFieldCheckbox.checked:= False;
useTFieldCheckbox.enabled:= False;
end
else begin
if ApropertyType= sptDataSetType then
useTFieldCheckbox.enabled:= False;
InsertNewLineButton.visible:= False;
AddFieldsButton.left:= DstList.left;
AddFieldsbutton.width:= DstList.width div 2;
RemoveFieldsbutton.width:= DstList.width div 2;
RemoveFieldsButton.left:= DstList.Left + DstList.Width - RemoveFieldsButton.Width;
end;
Result := ShowModal = IDOK;
if Result then begin
AUseTFields:= UseTFields;
end
else begin
GSelected.assign(OrigSelected);
end;
if Result and useTFields then begin
gridTable.disableControls;
if AUseTFields then begin
// fields.clear;
for i:= 0 to SrcListItems.count-1 do begin
curField:= gridTable.fieldByName(SrcListItems[i]);
curField.visible:= False;
end;
end;
for i:= 0 to DstList.items.count-1 do begin
curField:= gridTable.findField(DstList.items[i]);
if curField=nil then begin {5/12/97}
// if useTFields then fields.add(DstList.items[i]);
continue;
end;
if AUseTFields then begin
// selString:= curField.fieldName + #9 +
// inttostr(curField.displayWidth) + #9 +
// curField.displayLabel;
// fields.add(selString);
curField.index:= i;
curField.visible:= True;
end
end;
gridTable.enableControls;
end;
finally
Free;
parts.Free;
origSelected.Free;
end;
end;
procedure TSelFieldsForm.SelectDest(index: integer);
var lkDatabase, lkTable, lkField, lkIndex: wwSmallString;
lkIndexFields: string;
lkJoins: string;
lkFoundIndex: integer;
lkUseExtension: char;
controlData: TStrings;
controlName: wwSmallString;
i: integer;
tempMask: string;
tempAutoFill, tempUsePictureMask: boolean;
apos, aindex: integer;
foundControl: boolean;
begin
InSelectDest:= True;
try
editLookupButton.enabled:= False;
if DstList.items.count=0 then index:= -1;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?