| 1 | //kt -- Modified with SourceScanner on 8/8/2007 | 
|---|
| 2 | unit fODGen; | 
|---|
| 3 |  | 
|---|
| 4 | interface | 
|---|
| 5 |  | 
|---|
| 6 | uses | 
|---|
| 7 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, | 
|---|
| 8 | fODBase, ComCtrls, ExtCtrls, StdCtrls, ORDtTm, ORCtrls, ORFn, rODBase, | 
|---|
| 9 | DKLang; | 
|---|
| 10 |  | 
|---|
| 11 | type | 
|---|
| 12 | TDialogCtrl = class | 
|---|
| 13 | ID: string; | 
|---|
| 14 | DataType: Char; | 
|---|
| 15 | Required: Boolean; | 
|---|
| 16 | Preserve: Boolean; | 
|---|
| 17 | Prompt: TStaticText; | 
|---|
| 18 | Editor: TWinControl; | 
|---|
| 19 | IHidden: string; | 
|---|
| 20 | EHidden: string; | 
|---|
| 21 | end; | 
|---|
| 22 |  | 
|---|
| 23 | TfrmODGen = class(TfrmODBase) | 
|---|
| 24 | sbxMain: TScrollBox; | 
|---|
| 25 | procedure FormCreate(Sender: TObject); | 
|---|
| 26 | procedure FormClose(Sender: TObject; var Action: TCloseAction); | 
|---|
| 27 | private | 
|---|
| 28 | //kt Begin Mod (change Consts to Vars) 8/8/2007 | 
|---|
| 29 | TX_STOPSTART  : string;  //kt | 
|---|
| 30 | //kt End Mod ------------------- | 
|---|
| 31 | FilterOut: boolean; | 
|---|
| 32 | TsID: string; //treating specialty id | 
|---|
| 33 | TSDomain: string; | 
|---|
| 34 | AttendID: string; | 
|---|
| 35 | AttendDomain: string; | 
|---|
| 36 | procedure ControlChange(Sender: TObject); | 
|---|
| 37 | procedure LookupNeedData(Sender: TObject; const StartFrom: string; | 
|---|
| 38 | Direction, InsertAt: Integer); | 
|---|
| 39 | procedure PlaceControls; | 
|---|
| 40 | procedure PlaceDateTime(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 41 | procedure PlaceFreeText(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 42 | procedure PlaceHidden(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 43 | procedure PlaceNumeric(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 44 | procedure PlaceSetOfCodes(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 45 | procedure PlaceYesNo(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 46 | procedure PlaceLookup(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 47 | procedure PlaceMemo(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 48 | procedure PlaceLabel(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 49 | procedure SetupVars;  //kt | 
|---|
| 50 | protected | 
|---|
| 51 | FCharHt: Integer; | 
|---|
| 52 | FCharWd: Integer; | 
|---|
| 53 | FDialogItemList: TList; | 
|---|
| 54 | FDialogCtrlList: TList; | 
|---|
| 55 | FEditorLeft: Integer; | 
|---|
| 56 | FEditorTop: Integer; | 
|---|
| 57 | FFirstCtrl: TWinControl; | 
|---|
| 58 | FLabelWd: Integer; | 
|---|
| 59 | procedure InitDialog; override; | 
|---|
| 60 | procedure SetDialogIEN(Value: Integer); override; | 
|---|
| 61 | procedure Validate(var AnErrMsg: string); override; | 
|---|
| 62 | public | 
|---|
| 63 | procedure SetupDialog(OrderAction: Integer; const ID: string); override; | 
|---|
| 64 | end; | 
|---|
| 65 |  | 
|---|
| 66 | var | 
|---|
| 67 | frmODGen: TfrmODGen; | 
|---|
| 68 |  | 
|---|
| 69 | implementation | 
|---|
| 70 |  | 
|---|
| 71 | {$R *.DFM} | 
|---|
| 72 |  | 
|---|
| 73 | uses rCore, rOrders, uConst; | 
|---|
| 74 |  | 
|---|
| 75 | const | 
|---|
| 76 | HT_FRAME  = 8; | 
|---|
| 77 | HT_LBLOFF = 3; | 
|---|
| 78 | HT_SPACE  = 6; | 
|---|
| 79 | WD_MARGIN = 6; | 
|---|
| 80 | //TX_STOPSTART   = 'The stop date must be after the start date.';  <-- original line.  //kt 8/8/2007 | 
|---|
| 81 |  | 
|---|
| 82 |  | 
|---|
| 83 | procedure TfrmODGen.SetupVars; | 
|---|
| 84 | //kt Added entire function to replace constant declarations 8/8/2007 | 
|---|
| 85 | begin | 
|---|
| 86 | TX_STOPSTART   := DKLangConstW('fODGen_The_stop_date_must_be_after_the_start_datex'); | 
|---|
| 87 | end; | 
|---|
| 88 |  | 
|---|
| 89 | procedure TfrmODGen.FormCreate(Sender: TObject); | 
|---|
| 90 | var | 
|---|
| 91 | TheEvtType: string; | 
|---|
| 92 | IDs,TSstr, AttendStr: string; | 
|---|
| 93 | begin | 
|---|
| 94 | inherited; | 
|---|
| 95 | FilterOut := True; | 
|---|
| 96 | if Self.EvtID < 1 then | 
|---|
| 97 | FilterOut := False; | 
|---|
| 98 | if Self.EvtID > 0 then | 
|---|
| 99 | begin | 
|---|
| 100 | TheEvtType := Piece(EventInfo1(IntToStr(Self.EvtId)), '^', 1); | 
|---|
| 101 | if (TheEvtType = 'A') or (TheEvtType = 'T') or (TheEvtType = 'M') or (TheEvtType = 'O') then | 
|---|
| 102 | FilterOut := False; | 
|---|
| 103 | end; | 
|---|
| 104 | FillerID := 'OR';                     // does 'on Display' order check **KCM** | 
|---|
| 105 | IDs := GetPromptIDs; | 
|---|
| 106 | TSstr := Piece(IDs,'~',1); | 
|---|
| 107 | TsDomain := Piece(TSstr,'^', 1); | 
|---|
| 108 | TsID := Piece(TSstr,'^', 2); | 
|---|
| 109 | AttendStr := Piece(IDs,'~',2); | 
|---|
| 110 | AttendDomain := Piece(AttendStr,'^',1); | 
|---|
| 111 | AttendID := Piece(AttendStr,'^',2); | 
|---|
| 112 | FDialogItemList := TList.Create; | 
|---|
| 113 | FDialogCtrlList := TList.Create; | 
|---|
| 114 | end; | 
|---|
| 115 |  | 
|---|
| 116 | procedure TfrmODGen.FormClose(Sender: TObject; var Action: TCloseAction); | 
|---|
| 117 | var | 
|---|
| 118 | i: Integer; | 
|---|
| 119 | DialogCtrl: TDialogCtrl; | 
|---|
| 120 | begin | 
|---|
| 121 | with FDialogItemList do for i := 0 to Count - 1 do TDialogItem(Items[i]).Free; | 
|---|
| 122 | with FDialogCtrlList do for i := 0 to Count - 1 do | 
|---|
| 123 | begin | 
|---|
| 124 | DialogCtrl := TDialogCtrl(Items[i]); | 
|---|
| 125 | with DialogCtrl do | 
|---|
| 126 | begin | 
|---|
| 127 | if Prompt <> nil then Prompt.Free; | 
|---|
| 128 | if Editor <> nil then case DataType of | 
|---|
| 129 | 'D': TORDateBox(Editor).Free; | 
|---|
| 130 | 'F': TEdit(Editor).Free; | 
|---|
| 131 | 'N': TEdit(Editor).Free; | 
|---|
| 132 | 'P': TORComboBox(Editor).Free; | 
|---|
| 133 | 'R': TORDateBox(Editor).Free; | 
|---|
| 134 | 'S': TORComboBox(Editor).Free; | 
|---|
| 135 | 'W': TMemo(Editor).Free; | 
|---|
| 136 | 'Y': TORComboBox(Editor).Free; | 
|---|
| 137 | else Editor.Free; | 
|---|
| 138 | end; | 
|---|
| 139 | Free; | 
|---|
| 140 | end; | 
|---|
| 141 | end; | 
|---|
| 142 | FDialogItemList.Free; | 
|---|
| 143 | FDialogCtrlList.Free; | 
|---|
| 144 | inherited; | 
|---|
| 145 | end; | 
|---|
| 146 |  | 
|---|
| 147 | procedure TfrmODGen.SetDialogIEN(Value: Integer); | 
|---|
| 148 | { Sets up a generic ordering dialog on the fly.  Called before SetupDialog. } | 
|---|
| 149 | var | 
|---|
| 150 | DialogNames: TDialogNames; | 
|---|
| 151 | begin | 
|---|
| 152 | inherited; | 
|---|
| 153 | //StatusText('Loading Dialog Definition');  <-- original line.  //kt 8/8/2007 | 
|---|
| 154 | StatusText(DKLangConstW('fODGen_Loading_Dialog_Definition')); //kt added 8/8/2007 | 
|---|
| 155 | IdentifyDialog(DialogNames, DialogIEN); | 
|---|
| 156 | Caption := DialogNames.Display; | 
|---|
| 157 | Responses.Dialog := DialogNames.BaseName;                      // loads formatting info | 
|---|
| 158 | LoadOrderPrompting(FDialogItemList, DialogNames.BaseIEN);      // loads prompting info | 
|---|
| 159 | PlaceControls; | 
|---|
| 160 | StatusText(''); | 
|---|
| 161 | end; | 
|---|
| 162 |  | 
|---|
| 163 | procedure TfrmODGen.SetupDialog(OrderAction: Integer; const ID: string); | 
|---|
| 164 | var | 
|---|
| 165 | i: Integer; | 
|---|
| 166 | theEvtInfo: string; | 
|---|
| 167 | thePromptIen: integer; | 
|---|
| 168 | AResponse: TResponse; | 
|---|
| 169 | AnEvtResponse: TResponse; | 
|---|
| 170 | begin | 
|---|
| 171 | inherited; | 
|---|
| 172 | if OrderAction in [ORDER_COPY, ORDER_EDIT, ORDER_QUICK] then with Responses do | 
|---|
| 173 | begin | 
|---|
| 174 | Changing := True; | 
|---|
| 175 | // for copy & edit, SetDialogIEN hasn't been called yet | 
|---|
| 176 | if (Length(ID) > 0) and (DialogIEN = 0) then SetDialogIEN(DialogForOrder(ID)); | 
|---|
| 177 | with FDialogCtrlList do for i := 0 to Count -1 do with TDialogCtrl(Items[i]) do | 
|---|
| 178 | begin | 
|---|
| 179 | if (ID = 'EVENT') and ( Responses.EventIFN > 0 ) then | 
|---|
| 180 | begin | 
|---|
| 181 | thePromptIen := GetIENForPrompt(ID); | 
|---|
| 182 | if thePromptIen = 0 then | 
|---|
| 183 | thePromptIen := GetEventPromptID; | 
|---|
| 184 | AResponse := FindResponseByName('EVENT', 1); | 
|---|
| 185 | if AResponse <> nil then | 
|---|
| 186 | begin | 
|---|
| 187 | theEvtInfo := EventInfo1(AResponse.IValue); | 
|---|
| 188 | AResponse.EValue := Piece(theEvtInfo,'^',4); | 
|---|
| 189 | end; | 
|---|
| 190 | if AResponse = nil then | 
|---|
| 191 | begin | 
|---|
| 192 | AnEvtResponse := TResponse.Create; | 
|---|
| 193 | AnEvtResponse.PromptID  := 'EVENT'; | 
|---|
| 194 | AnEvtResponse.PromptIEN := thePromptIen; | 
|---|
| 195 | AnEvtResponse.Instance  := 1; | 
|---|
| 196 | AnEvtResponse.IValue    := IntToStr(Responses.EventIFN); | 
|---|
| 197 | theEvtInfo := EventInfo1(AnEvtResponse.IValue); | 
|---|
| 198 | AnEvtResponse.EValue := Piece(theEvtInfo,'^',4); | 
|---|
| 199 | Responses.TheList.Add(AnEvtResponse); | 
|---|
| 200 | end; | 
|---|
| 201 | end; | 
|---|
| 202 | if Editor <> nil then SetControl(Editor, ID, 1); | 
|---|
| 203 | if DataType = 'H' then | 
|---|
| 204 | begin | 
|---|
| 205 | AResponse := FindResponseByName(ID, 1); | 
|---|
| 206 | if AResponse <> nil then | 
|---|
| 207 | begin | 
|---|
| 208 | IHidden := AResponse.IValue; | 
|---|
| 209 | EHidden := AResponse.EValue; | 
|---|
| 210 | end; {if AResponse} | 
|---|
| 211 | end; {if DataType} | 
|---|
| 212 | end; {with TDialogCtrl} | 
|---|
| 213 | Changing := False; | 
|---|
| 214 | end; {if OrderAction} | 
|---|
| 215 | ControlChange(Self); | 
|---|
| 216 | if (FFirstCtrl <> nil) and (FFirstCtrl.Enabled) then SetFocusedControl(FFirstCtrl); | 
|---|
| 217 | end; | 
|---|
| 218 |  | 
|---|
| 219 | procedure TfrmODGen.InitDialog; | 
|---|
| 220 | var | 
|---|
| 221 | i: Integer; | 
|---|
| 222 | begin | 
|---|
| 223 | inherited; // inherited does a ClearControls (probably never called since always quick order) | 
|---|
| 224 | {NEED TO CLEAR CONTROLS HERE OR CHANGE ClearControls so can clear children of container} | 
|---|
| 225 | with FDialogCtrlList do for i := 0 to Count -1 do | 
|---|
| 226 | with TDialogCtrl(Items[i]) do if (Editor <> nil) and not Preserve then | 
|---|
| 227 | begin | 
|---|
| 228 | // treat the list & combo boxes differently so their lists aren't cleared | 
|---|
| 229 | if      (Editor is TListBox)    then TListBox(Editor).ItemIndex := -1 | 
|---|
| 230 | else if (Editor is TComboBox)   then | 
|---|
| 231 | begin | 
|---|
| 232 | TComboBox(Editor).Text := ''; | 
|---|
| 233 | TComboBox(Editor).ItemIndex := -1; | 
|---|
| 234 | end | 
|---|
| 235 | else if (Editor is TORComboBox) then | 
|---|
| 236 | begin | 
|---|
| 237 | TORComboBox(Editor).Text := ''; | 
|---|
| 238 | TORComboBox(Editor).ItemIndex := -1; | 
|---|
| 239 | end | 
|---|
| 240 | else ClearControl(Editor); | 
|---|
| 241 | end; | 
|---|
| 242 | if FFirstCtrl <> nil then ActiveControl := FFirstCtrl; | 
|---|
| 243 | end; | 
|---|
| 244 |  | 
|---|
| 245 | procedure TfrmODGen.Validate(var AnErrMsg: string); | 
|---|
| 246 | var | 
|---|
| 247 | i: Integer; | 
|---|
| 248 | ALabel, AMsg: string; | 
|---|
| 249 | AResponse: TResponse; | 
|---|
| 250 | DialogCtrl: TDialogCtrl; | 
|---|
| 251 | StartDT, StopDT: TFMDateTime; | 
|---|
| 252 |  | 
|---|
| 253 | procedure SetError(const x: string); | 
|---|
| 254 | begin | 
|---|
| 255 | if Length(AnErrMsg) > 0 then AnErrMsg := AnErrMsg + CRLF; | 
|---|
| 256 | AnErrMsg := AnErrMsg + x; | 
|---|
| 257 | end; | 
|---|
| 258 |  | 
|---|
| 259 | begin | 
|---|
| 260 | SetupVars;  //kt added 8/8/2007 to replace constants with vars. | 
|---|
| 261 | inherited; | 
|---|
| 262 | with FDialogCtrlList do for i := 0 to Count -1 do | 
|---|
| 263 | begin | 
|---|
| 264 | DialogCtrl := TDialogCtrl(Items[i]); | 
|---|
| 265 | with DialogCtrl do | 
|---|
| 266 | begin | 
|---|
| 267 | //    if Prompt <> nil then ALabel := Piece(Prompt.Caption, ':', 1) else ALabel := '<Unknown>';  <-- original line.  //kt 8/8/2007 | 
|---|
| 268 | if Prompt <> nil then ALabel := Piece(Prompt.Caption, ':', 1) else ALabel := DKLangConstW('fODGen_xUnknownx'); //kt added 8/8/2007 | 
|---|
| 269 | if Required then | 
|---|
| 270 | begin | 
|---|
| 271 | AResponse := Responses.FindResponseByName(ID, 1); | 
|---|
| 272 | if (AResponse = nil) or ((AResponse <> nil) and (AResponse.EValue = '')) | 
|---|
| 273 | //        then SetError(ALabel + ' is required.');  <-- original line.  //kt 8/8/2007 | 
|---|
| 274 | then SetError(ALabel + DKLangConstW('fODGen_is_requiredx')); //kt added 8/8/2007 | 
|---|
| 275 | end; | 
|---|
| 276 | if ((DataType = 'D') or (DataType = 'R')) and (Editor <> nil) then | 
|---|
| 277 | begin | 
|---|
| 278 | TORDateBox(Editor).Validate(AMsg); | 
|---|
| 279 | if Length(AMsg) > 0 then SetError('For ' + ALabel + ':  ' + AMsg); | 
|---|
| 280 | end; | 
|---|
| 281 | if (DataType = 'N') then | 
|---|
| 282 | begin | 
|---|
| 283 | AResponse := Responses.FindResponseByName(ID, 1); | 
|---|
| 284 | if (AResponse <> nil) and (Length(AResponse.EValue) > 0) then with AResponse do | 
|---|
| 285 | begin | 
|---|
| 286 | ValidateNumericStr(EValue, Piece(TEdit(Editor).Hint, '|', 2), AMsg); | 
|---|
| 287 | if Length(AMsg) > 0 then SetError('For ' + ALabel + ':  ' + AMsg); | 
|---|
| 288 | end; {if AResponse} | 
|---|
| 289 | end; {if DataType} | 
|---|
| 290 | end; {with DialogCtrl} | 
|---|
| 291 | end; {with FDialogCtrlList} | 
|---|
| 292 | with Responses do | 
|---|
| 293 | begin | 
|---|
| 294 | AResponse := FindResponseByName('START', 1); | 
|---|
| 295 | if AResponse <> nil then StartDT := StrToFMDateTime(AResponse.EValue) else StartDT := 0; | 
|---|
| 296 | AResponse := FindResponseByName('STOP',  1); | 
|---|
| 297 | if AResponse <> nil then StopDT  := StrToFMDateTime(AResponse.EValue) else StopDT  := 0; | 
|---|
| 298 | if (StopDT > 0) and (StopDT <= StartDT) then SetError(TX_STOPSTART); | 
|---|
| 299 | end; | 
|---|
| 300 | end; | 
|---|
| 301 |  | 
|---|
| 302 | procedure TfrmODGen.PlaceControls; | 
|---|
| 303 | var | 
|---|
| 304 | i: Integer; | 
|---|
| 305 | DialogItem: TDialogItem; | 
|---|
| 306 | DialogCtrl: TDialogCtrl; | 
|---|
| 307 | begin | 
|---|
| 308 | FCharHt := MainFontHeight; | 
|---|
| 309 | FCharWd := MainFontWidth; | 
|---|
| 310 | FEditorTop := HT_SPACE; | 
|---|
| 311 | FLabelWd := 0; | 
|---|
| 312 | with FDialogItemList do for i := 0 to Count - 1 do with TDialogItem(Items[i]) do | 
|---|
| 313 | if not Hidden then FLabelWd := HigherOf(FLabelWd, Canvas.TextWidth(Prompt)); | 
|---|
| 314 | FEditorLeft := FLabelWd + (WD_MARGIN * 2); | 
|---|
| 315 | with FDialogItemList do for i := 0 to Count - 1 do | 
|---|
| 316 | begin | 
|---|
| 317 | DialogItem := TDialogItem(Items[i]); | 
|---|
| 318 | if FilterOut then | 
|---|
| 319 | begin | 
|---|
| 320 | if ( compareText(TsID,DialogItem.Id)=0 ) or ( compareText(TSDomain,DialogItem.Domain)=0) then | 
|---|
| 321 | Continue; | 
|---|
| 322 | //    if (Pos('primary',LowerCase(DialogItem.Prompt)) > 0) then  <-- original line.  //kt 8/8/2007 | 
|---|
| 323 | if (Pos(DKLangConstW('fODGen_primary'),LowerCase(DialogItem.Prompt)) > 0) then //kt added 8/8/2007 | 
|---|
| 324 | Continue; | 
|---|
| 325 | if (compareText(AttendID,DialogItem.ID) = 0) or ( compareText(AttendDomain,DialogItem.Domain)=0 ) then | 
|---|
| 326 | Continue; | 
|---|
| 327 | end; | 
|---|
| 328 | DialogCtrl := TDialogCtrl.Create; | 
|---|
| 329 | DialogCtrl.ID       := DialogItem.ID; | 
|---|
| 330 | DialogCtrl.DataType := DialogItem.DataType; | 
|---|
| 331 | DialogCtrl.Required := DialogItem.Required; | 
|---|
| 332 | DialogCtrl.Preserve := Length(DialogItem.EDefault) > 0; | 
|---|
| 333 | case DialogItem.DataType of | 
|---|
| 334 | 'D': PlaceDateTime(DialogCtrl, DialogItem); | 
|---|
| 335 | 'F': PlaceFreeText(DialogCtrl, DialogItem); | 
|---|
| 336 | 'H': PlaceHidden(DialogCtrl, DialogItem); | 
|---|
| 337 | 'N': PlaceNumeric(DialogCtrl, DialogItem); | 
|---|
| 338 | 'P': PlaceLookup(DialogCtrl, DialogItem); | 
|---|
| 339 | 'R': PlaceDateTime(DialogCtrl, DialogItem); | 
|---|
| 340 | 'S': PlaceSetOfCodes(DialogCtrl, DialogItem); | 
|---|
| 341 | 'W': PlaceMemo(DialogCtrl, DialogItem); | 
|---|
| 342 | 'Y': PlaceYesNo(DialogCtrl, DialogItem); | 
|---|
| 343 | end; | 
|---|
| 344 | FDialogCtrlList.Add(DialogCtrl); | 
|---|
| 345 | if (DialogCtrl.Editor <> nil) and (FFirstCtrl = nil) then FFirstCtrl := DialogCtrl.Editor; | 
|---|
| 346 | end; | 
|---|
| 347 | end; | 
|---|
| 348 |  | 
|---|
| 349 | procedure TfrmODGen.PlaceDateTime(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 350 | const | 
|---|
| 351 | NUM_CHAR = 22; | 
|---|
| 352 | begin | 
|---|
| 353 | with DialogCtrl do | 
|---|
| 354 | begin | 
|---|
| 355 | Editor := TORDateBox.Create(Self); | 
|---|
| 356 | Editor.Parent := sbxMain; | 
|---|
| 357 | Editor.SetBounds(FEditorLeft, FEditorTop, NUM_CHAR * FCharWd, HT_FRAME * FCharHt); | 
|---|
| 358 | TORDateBox(Editor).DateOnly := Pos('T', DialogItem.Domain) = 0; | 
|---|
| 359 | with TORDateBox(Editor) do RequireTime := (not DateOnly) and (Pos('R', DialogItem.Domain) > 0); //v26.48 - RV  PSI-05-002 | 
|---|
| 360 | TORDateBox(Editor).Text := DialogItem.EDefault; | 
|---|
| 361 | TORDateBox(Editor).Hint := DialogItem.HelpText; | 
|---|
| 362 | TORDateBox(Editor).Caption := DialogItem.Prompt; | 
|---|
| 363 | if Length(DialogItem.HelpText) > 0 then TORDateBox(Editor).ShowHint := True; | 
|---|
| 364 | TORDateBox(Editor).OnExit := ControlChange; | 
|---|
| 365 | PlaceLabel(DialogCtrl, DialogItem); | 
|---|
| 366 | FEditorTop := FEditorTop + HT_FRAME + FCharHt + HT_SPACE; | 
|---|
| 367 | end; | 
|---|
| 368 | end; | 
|---|
| 369 |  | 
|---|
| 370 | procedure TfrmODGen.PlaceFreeText(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 371 | begin | 
|---|
| 372 | with DialogCtrl do | 
|---|
| 373 | begin | 
|---|
| 374 | Editor := TCaptionEdit.Create(Self); | 
|---|
| 375 | Editor.Parent := sbxMain; | 
|---|
| 376 | Editor.SetBounds(FEditorLeft, FEditorTop, | 
|---|
| 377 | sbxMain.Width - FEditorLeft - WD_MARGIN - GetSystemMetrics(SM_CXVSCROLL), | 
|---|
| 378 | HT_FRAME * FCharHt); | 
|---|
| 379 | TEdit(Editor).MaxLength := StrToIntDef(Piece(DialogItem.Domain, ':', 2), 0); | 
|---|
| 380 | TEdit(Editor).Text := DialogItem.EDefault; | 
|---|
| 381 | TEdit(Editor).Hint := DialogItem.HelpText; | 
|---|
| 382 | TCaptionEdit(Editor).Caption := DialogItem.Prompt; | 
|---|
| 383 | if Length(DialogItem.HelpText) > 0 then TEdit(Editor).ShowHint := True; | 
|---|
| 384 | TEdit(Editor).OnChange := ControlChange; | 
|---|
| 385 | PlaceLabel(DialogCtrl, DialogItem); | 
|---|
| 386 | FEditorTop := FEditorTop + HT_FRAME + FCharHt + HT_SPACE; | 
|---|
| 387 | end; | 
|---|
| 388 | end; | 
|---|
| 389 |  | 
|---|
| 390 | procedure TfrmODGen.PlaceNumeric(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 391 | const | 
|---|
| 392 | NUM_CHAR = 16; | 
|---|
| 393 | begin | 
|---|
| 394 | with DialogCtrl do | 
|---|
| 395 | begin | 
|---|
| 396 | Editor := TCaptionEdit.Create(Self); | 
|---|
| 397 | Editor.Parent := sbxMain; | 
|---|
| 398 | Editor.SetBounds(FEditorLeft, FEditorTop, NUM_CHAR * FCharWd, HT_FRAME * FCharHt); | 
|---|
| 399 | TEdit(Editor).MaxLength := NUM_CHAR; | 
|---|
| 400 | TEdit(Editor).Text := DialogItem.EDefault; | 
|---|
| 401 | TEdit(Editor).Hint := DialogItem.HelpText + '|' + DialogItem.Domain; | 
|---|
| 402 | TCaptionEdit(Editor).Caption := DialogItem.Prompt; | 
|---|
| 403 | if Length(DialogItem.HelpText) > 0 then TEdit(Editor).ShowHint := True; | 
|---|
| 404 | TEdit(Editor).OnChange := ControlChange; | 
|---|
| 405 | PlaceLabel(DialogCtrl, DialogItem); | 
|---|
| 406 | FEditorTop := FEditorTop + HT_FRAME + FCharHt + HT_SPACE; | 
|---|
| 407 | end; | 
|---|
| 408 | end; | 
|---|
| 409 |  | 
|---|
| 410 | procedure TfrmODGen.PlaceSetOfCodes(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 411 | const | 
|---|
| 412 | NUM_CHAR = 32; | 
|---|
| 413 | var | 
|---|
| 414 | x, y: string; | 
|---|
| 415 | begin | 
|---|
| 416 | with DialogCtrl do | 
|---|
| 417 | begin | 
|---|
| 418 | Editor := TORComboBox.Create(Self); | 
|---|
| 419 | Editor.Parent := sbxMain; | 
|---|
| 420 | TORComboBox(Editor).Style := orcsDropDown; | 
|---|
| 421 | TORComboBox(Editor).ListItemsOnly := True; | 
|---|
| 422 | TORComboBox(Editor).Pieces := '2'; | 
|---|
| 423 | Editor.SetBounds(FEditorLeft, FEditorTop, NUM_CHAR * FCharWd, HT_FRAME * FCharHt); | 
|---|
| 424 | x := DialogItem.Domain; | 
|---|
| 425 | repeat | 
|---|
| 426 | y := Piece(x, ';', 1); | 
|---|
| 427 | Delete(x, 1, Length(y) + 1); | 
|---|
| 428 | y := Piece(y, ':', 1) + U + Piece(y, ':', 2); | 
|---|
| 429 | TORComboBox(Editor).Items.Add(y); | 
|---|
| 430 | until Length(x) = 0; | 
|---|
| 431 | TORComboBox(Editor).SelectByID(DialogItem.IDefault); | 
|---|
| 432 | //TORComboBox(Editor).Text := DialogItem.EDefault; | 
|---|
| 433 | TORComboBox(Editor).Hint := DialogItem.HelpText; | 
|---|
| 434 | if Length(DialogItem.HelpText) > 0 then TORComboBox(Editor).ShowHint := True; | 
|---|
| 435 | TORComboBox(Editor).OnChange := ControlChange; | 
|---|
| 436 | PlaceLabel(DialogCtrl, DialogItem); | 
|---|
| 437 | FEditorTop := FEditorTop + HT_FRAME + FCharHt + HT_SPACE; | 
|---|
| 438 | end; | 
|---|
| 439 | end; | 
|---|
| 440 |  | 
|---|
| 441 | procedure TfrmODGen.PlaceYesNo(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 442 | const | 
|---|
| 443 | NUM_CHAR = 9; | 
|---|
| 444 | begin | 
|---|
| 445 | with DialogCtrl do | 
|---|
| 446 | begin | 
|---|
| 447 | Editor := TORComboBox.Create(Self); | 
|---|
| 448 | Editor.Parent := sbxMain; | 
|---|
| 449 | TORComboBox(Editor).Style := orcsDropDown; | 
|---|
| 450 | TORComboBox(Editor).ListItemsOnly := True; | 
|---|
| 451 | TORComboBox(Editor).Pieces := '2'; | 
|---|
| 452 | Editor.SetBounds(FEditorLeft, FEditorTop, NUM_CHAR * FCharWd, HT_FRAME * FCharHt); | 
|---|
| 453 | //  TORComboBox(Editor).Items.Add('0^No');  <-- original line.  //kt 8/8/2007 | 
|---|
| 454 | TORComboBox(Editor).Items.Add(DKLangConstW('fODGen_0xNo')); //kt added 8/8/2007 | 
|---|
| 455 | //  TORComboBox(Editor).Items.Add('1^Yes');  <-- original line.  //kt 8/8/2007 | 
|---|
| 456 | TORComboBox(Editor).Items.Add(DKLangConstW('fODGen_1xYes')); //kt added 8/8/2007 | 
|---|
| 457 | TORComboBox(Editor).SelectByID(DialogItem.IDefault); | 
|---|
| 458 | //TORComboBox(Editor).Text := DialogItem.EDefault; | 
|---|
| 459 | TORComboBox(Editor).Hint := DialogItem.HelpText; | 
|---|
| 460 | if Length(DialogItem.HelpText) > 0 then TORComboBox(Editor).ShowHint := True; | 
|---|
| 461 | TORComboBox(Editor).OnChange := ControlChange; | 
|---|
| 462 | PlaceLabel(DialogCtrl, DialogItem); | 
|---|
| 463 | FEditorTop := FEditorTop + HT_FRAME + FCharHt + HT_SPACE; | 
|---|
| 464 | end; | 
|---|
| 465 | end; | 
|---|
| 466 |  | 
|---|
| 467 | procedure TfrmODGen.PlaceLookup(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 468 | const | 
|---|
| 469 | NUM_CHAR = 32; | 
|---|
| 470 | var | 
|---|
| 471 | idx,defidx,evtChars: integer; | 
|---|
| 472 | GblRef, XRef: string; | 
|---|
| 473 | TopTSList: TStringList; | 
|---|
| 474 | begin | 
|---|
| 475 | with DialogCtrl do | 
|---|
| 476 | begin | 
|---|
| 477 | GblRef := DialogItem.Domain; | 
|---|
| 478 | if CharAt(GblRef, 1) in ['0'..'9','.'] | 
|---|
| 479 | then GblRef := GlobalRefForFile(Piece(GblRef, ':', 1)) | 
|---|
| 480 | else GblRef := Piece(GblRef, ':', 1); | 
|---|
| 481 | if CharAt(GblRef, 1) <> U then GblRef := U + GblRef; | 
|---|
| 482 | if Length(DialogItem.CrossRef) > 0 then XRef := DialogItem.CrossRef else XRef := 'B'; | 
|---|
| 483 | XRef := GblRef + '"' + XRef + '")'; | 
|---|
| 484 | Editor := TORComboBox.Create(Self); | 
|---|
| 485 | Editor.Parent := sbxMain; | 
|---|
| 486 | TORComboBox(Editor).Style := orcsDropDown; | 
|---|
| 487 | TORComboBox(Editor).ListItemsOnly := True; | 
|---|
| 488 | TORComboBox(Editor).Pieces := '2'; | 
|---|
| 489 | TORComboBox(Editor).LongList := True; | 
|---|
| 490 | // 2nd bar piece of hint is not visible, hide xref, global ref, & screen code in tab pieces | 
|---|
| 491 | TORComboBox(Editor).Hint := DialogItem.HelpText + '|' + XRef + #9 + GblRef + #9 + | 
|---|
| 492 | DialogItem.ScreenRef; | 
|---|
| 493 | if ( compareText(TsID,DialogItem.Id)=0 ) or (compareText(TSDomain,DialogItem.Domain)=0)then | 
|---|
| 494 | begin | 
|---|
| 495 | TopTSList := TStringList.Create; | 
|---|
| 496 | DialogItem.IDefault := Piece(GetDefaultTSForEvt(Self.EvtID),'^',1); | 
|---|
| 497 | GetTSListForEvt(TStrings(TopTSList),Self.EvtID); | 
|---|
| 498 | if TopTSList.Count > 0 then | 
|---|
| 499 | begin | 
|---|
| 500 | if Length(DialogItem.IDefault)>0 then | 
|---|
| 501 | begin | 
|---|
| 502 | defidx := -1; | 
|---|
| 503 | for idx := 0 to topTSList.Count - 1 do | 
|---|
| 504 | if Piece(TopTSList[idx],'^',1)= DialogItem.IDefault then | 
|---|
| 505 | begin | 
|---|
| 506 | defidx := idx; | 
|---|
| 507 | break; | 
|---|
| 508 | end; | 
|---|
| 509 | if defidx >= 0 then | 
|---|
| 510 | topTSList.Move(defidx,0); | 
|---|
| 511 | end; | 
|---|
| 512 | with TORComboBox(Editor) do | 
|---|
| 513 | begin | 
|---|
| 514 | Items.AddStrings(TStrings(TopTSList)); | 
|---|
| 515 | LongList := false; | 
|---|
| 516 | end; | 
|---|
| 517 | end else | 
|---|
| 518 | TORComboBox(Editor).OnNeedData := LookupNeedData; | 
|---|
| 519 | if Length(DialogItem.IDefault)<1 then | 
|---|
| 520 | DialogItem.IDefault := '0'; | 
|---|
| 521 | end else | 
|---|
| 522 | TORComboBox(Editor).OnNeedData := LookupNeedData; | 
|---|
| 523 | Editor.SetBounds(FEditorLeft, FEditorTop, NUM_CHAR * FCharWd, HT_FRAME * FCharHt); | 
|---|
| 524 | TORComboBox(Editor).InitLongList(DialogItem.EDefault); | 
|---|
| 525 | TORComboBox(Editor).SelectByID(DialogItem.IDefault); | 
|---|
| 526 | if Length(DialogItem.HelpText) > 0 then TORComboBox(Editor).ShowHint := True; | 
|---|
| 527 | TORComboBox(Editor).OnChange := ControlChange; | 
|---|
| 528 | if ( AnsiCompareText(ID,'EVENT')=0 ) and (Self.EvtID>0)then | 
|---|
| 529 | begin | 
|---|
| 530 | evtChars := length(Responses.EventName); | 
|---|
| 531 | if evtChars > NUM_CHAR then | 
|---|
| 532 | Editor.SetBounds(FEditorLeft, FEditorTop, (evtChars + 6) * FCharWd, HT_FRAME * FCharHt); | 
|---|
| 533 | TORComboBox(Editor).Enabled := False; | 
|---|
| 534 | end; | 
|---|
| 535 | PlaceLabel(DialogCtrl, DialogItem); | 
|---|
| 536 | FEditorTop := FEditorTop + HT_FRAME + FCharHt + HT_SPACE; | 
|---|
| 537 | end; | 
|---|
| 538 | end; | 
|---|
| 539 |  | 
|---|
| 540 | procedure TfrmODGen.LookupNeedData(Sender: TObject; const StartFrom: string; | 
|---|
| 541 | Direction, InsertAt: Integer); | 
|---|
| 542 | var | 
|---|
| 543 | XRef, GblRef, ScreenRef: string; | 
|---|
| 544 | begin | 
|---|
| 545 | inherited; | 
|---|
| 546 | XRef := Piece(TORComboBox(Sender).Hint, '|', 2); | 
|---|
| 547 | GblRef    := Piece(XRef, #9, 2); | 
|---|
| 548 | ScreenRef := Piece(XRef, #9, 3); | 
|---|
| 549 | XRef      := Piece(XRef, #9, 1); | 
|---|
| 550 | TORComboBox(Sender).ForDataUse(SubsetOfEntries(StartFrom, Direction, XRef, GblRef, ScreenRef)); | 
|---|
| 551 | end; | 
|---|
| 552 |  | 
|---|
| 553 | procedure TfrmODGen.PlaceMemo(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 554 | const | 
|---|
| 555 | NUM_LINES = 3; | 
|---|
| 556 | begin | 
|---|
| 557 | with DialogCtrl do | 
|---|
| 558 | begin | 
|---|
| 559 | Editor := TCaptionMemo.Create(Self); | 
|---|
| 560 | Editor.Parent := sbxMain; | 
|---|
| 561 | Editor.SetBounds(FEditorLeft, FEditorTop, | 
|---|
| 562 | sbxMain.Width - FEditorLeft - WD_MARGIN - GetSystemMetrics(SM_CXVSCROLL), | 
|---|
| 563 | (FCharHt * NUM_LINES) + HT_FRAME); | 
|---|
| 564 | TMemo(Editor).Text := DialogItem.EDefault; | 
|---|
| 565 | TMemo(Editor).Hint := DialogItem.HelpText; | 
|---|
| 566 | TCaptionMemo(Editor).Caption := DialogItem.Prompt; | 
|---|
| 567 | if Length(DialogItem.HelpText) > 0 then TMemo(Editor).ShowHint := True; | 
|---|
| 568 | TMemo(Editor).ScrollBars := ssVertical; | 
|---|
| 569 | TMemo(Editor).OnChange := ControlChange; | 
|---|
| 570 | PlaceLabel(DialogCtrl, DialogItem); | 
|---|
| 571 | FEditorTop := FEditorTop + HT_FRAME + (FCharHt * 3) + HT_SPACE; | 
|---|
| 572 | end; | 
|---|
| 573 | end; | 
|---|
| 574 |  | 
|---|
| 575 | procedure TfrmODGen.PlaceHidden(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 576 | begin | 
|---|
| 577 | DialogCtrl.IHidden := DialogItem.IDefault; | 
|---|
| 578 | DialogCtrl.EHidden := DialogItem.EDefault; | 
|---|
| 579 | end; | 
|---|
| 580 |  | 
|---|
| 581 | procedure TfrmODGen.PlaceLabel(DialogCtrl: TDialogCtrl; DialogItem: TDialogItem); | 
|---|
| 582 | begin | 
|---|
| 583 | with DialogCtrl do | 
|---|
| 584 | begin | 
|---|
| 585 | Prompt := TStaticText.Create(Self); | 
|---|
| 586 | Prompt.Parent := sbxMain; | 
|---|
| 587 | Prompt.Caption := DialogItem.Prompt; | 
|---|
| 588 | Prompt.AutoSize := False; | 
|---|
| 589 | Prompt.SetBounds(WD_MARGIN, FEditorTop + HT_LBLOFF, FLabelWd, FCharHt); | 
|---|
| 590 | Prompt.Alignment := taRightJustify; | 
|---|
| 591 | Prompt.Visible := True; | 
|---|
| 592 | end; | 
|---|
| 593 | end; | 
|---|
| 594 |  | 
|---|
| 595 | procedure TfrmODGen.ControlChange(Sender: TObject); | 
|---|
| 596 | var | 
|---|
| 597 | i: Integer; | 
|---|
| 598 | begin | 
|---|
| 599 | inherited; | 
|---|
| 600 | if Changing then Exit; | 
|---|
| 601 | with FDialogCtrlList do for i := 0 to Count - 1 do with TDialogCtrl(Items[i]) do | 
|---|
| 602 | begin | 
|---|
| 603 | case DataType of | 
|---|
| 604 | 'D': Responses.Update(ID, 1, FloatToStr(TORDateBox(Editor).FMDateTime), | 
|---|
| 605 | TORDateBox(Editor).Text); | 
|---|
| 606 | 'F': Responses.Update(ID, 1, TEdit(Editor).Text, TEdit(Editor).Text); | 
|---|
| 607 | 'H': Responses.Update(ID, 1, IHidden, EHidden); | 
|---|
| 608 | 'N': Responses.Update(ID, 1, TEdit(Editor).Text, TEdit(Editor).Text); | 
|---|
| 609 | 'P': Responses.Update(ID, 1, TORComboBox(Editor).ItemID, TORComboBox(Editor).Text); | 
|---|
| 610 | 'R': Responses.Update(ID, 1, TORDateBox(Editor).Text, TORDateBox(Editor).Text); | 
|---|
| 611 | 'S': Responses.Update(ID, 1, TORComboBox(Editor).ItemID, TORComboBox(Editor).Text); | 
|---|
| 612 | 'W': Responses.Update(ID, 1, TX_WPTYPE, TMemo(Editor).Text); | 
|---|
| 613 | 'Y': Responses.Update(ID, 1, TORComboBox(Editor).ItemID, TORComboBox(Editor).Text); | 
|---|
| 614 | end; | 
|---|
| 615 | end; | 
|---|
| 616 | memOrder.Text := Responses.OrderText; | 
|---|
| 617 | end; | 
|---|
| 618 |  | 
|---|
| 619 | end. | 
|---|
| 620 |  | 
|---|