📄 wwselfld.pas
字号:
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 Windows, 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,
wwprprx,
{$ifdef wwDelphi6Up}
designintf,
{$else}
dsgnintf,
{$endif}
{$ifdef win32}
wwriched,
{$endif}
wwtypes, Mask, wwdbedit, Wwdotdot, wwdbigrd, ipdsgn, wwedtpic, ComCtrls;
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: TPageControl;
DisplayWidthLabel: TLabel;
Label2: TLabel;
DisplayWidth: TEdit;
DisplayTitle: TEdit;
Label3: TLabel;
ControlTypeEdit: TComboBox;
ControlTypeNotebook: TNotebook;
Label10: TLabel;
Label11: TLabel;
BitmapScalingCombo: TComboBox;
RasterCombo: TComboBox;
Label9: TLabel;
Bevel1: TBevel;
Label4: TLabel;
Label5: TLabel;
LookupFieldCaption: TLabel;
LookupTableCaption: TLabel;
Button4: TButton;
EditLookupButton: TButton;
Panel1: TPanel;
UseTFieldCheckbox: TCheckBox;
DBRichEditComboList: TwwDBComboBox;
Label1: TLabel;
InsertNewLineButton: TBitBtn;
ReadOnlyCB: TCheckBox;
ShrinkToFit: TCheckBox;
DBLookupComboList: TwwDBComboBox;
ControlAlwaysPaints: TCheckBox;
RTFControlAlwaysPaints: TCheckBox;
GroupName: TEdit;
GroupNameLabel: TLabel;
DesignMaskButton: TButton;
PictureMaskEdit: TwwDBComboDlg;
AutoFillCheckbox: TCheckbox;
UsePictureMask: TCheckbox;
MaskTabControl: TPageControl;
PictureDescription: TMemo;
RegexPage: TTabSheet;
PictureMaskPage: TTabSheet;
RegexEdit: TwwDBComboDlg;
RegexDescription: TMemo;
CaseSensitiveRegexCheckBox: TCheckBox;
Button1: TButton;
RegexErrorMsgEdit: TMemo;
CheckOnValue: TEdit;
CheckOffValue: TEdit;
TabSheetDisplay: TTabSheet;
TabSheet3: TTabSheet;
TabSheetLinks: TTabSheet;
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);
procedure Button1Click(Sender: TObject);
procedure RegexEditCustomDlg(Sender: TObject);
procedure RegexEditChange(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 SaveRegexMasks;
// 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -