untanswerinput.pas
来自「简要说明:对医院幼儿心理情况做的一个调查,统计系统.」· PAS 代码 · 共 726 行 · 第 1/2 页
PAS
726 行
unit untAnswerInput;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, untBaseDialog, StdCtrls, Buttons, ExtCtrls, jpeg, ADODB,
DB, DBCtrls, ComCtrls, CalcExpress, fcButton, fcImgBtn;
type
TfrmAnswerInput = class(TfrmBaseDialog)
pgc1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
scbThird: TScrollBox;
GroupBox1: TGroupBox;
DBMemo1: TDBMemo;
rgItem: TRadioGroup;
dsQuestion: TDataSource;
scbSecond: TScrollBox;
grpitem: TGroupBox;
memItem: TMemo;
Edit1: TEdit;
CalcExpress1: TCalcExpress;
imgImgLeftPanel: TImage;
grp1: TGroupBox;
mmoQuestion: TMemo;
Panel1: TPanel;
ADOdsQuestionDa: TADOQuery;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure rgItemClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure pgc1Change(Sender: TObject);
private
FXHList: TStringList;
FMeasureCode: string;
FadsResult: TADODataSet;
FadsQuestion: TADODataSet;
FadsSelectItem: TADODataSet;
FConn: TADOConnection;
FCalcExpress: TCalcExpress;
procedure CreateSecondPnl(DataSet: TADODataSet; iNo: Integer);
procedure CreateThirdPnl(DataSet: TADODataSet; iNo: Integer);
procedure InitComponents;
procedure LoadQuestion;
procedure SetConn(const Value: TADOConnection);
procedure adsQuestionAfterScroll(DataSet: TDataSet);
procedure edt3Enter(Sender: TObject);
procedure edt2Enter(Sender: TObject);
{procedure edt2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure edt3KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);}
procedure edt2Exit(Sender: TObject);
procedure edt3Exit(Sender: TObject);
procedure ItemValueChange(iWay, iResult: Integer; code, SelectTag: string);
procedure QuestionIndexChange(iWay, iXH: Integer);
function GetSelectTagByScore(AScore: Integer): string;
function CheckInput(QuestionXh: Integer; SelectTag: string; var iResult: Integer; var Code: string): Boolean;
procedure CalcResult;
procedure LoadMeasureItem;
function Calc: Boolean;
{ Private declarations }
public
{ Public declarations }
PatientID: Integer;
property Conn: TADOConnection read FConn write SetConn;
property MeasureCode: string read FMeasureCode write FMeasureCode;
property adsResult: TADODataSet read FadsResult write FadsResult;
procedure Init;
end;
function GetMeasureResult(AConn: TADOConnection;
AMeasureCode: string; APatientID: Integer = -1): TADODataSet;
implementation
uses untGlobalFun, untMessage,untDM;
function GetMeasureResult(AConn: TADOConnection;
AMeasureCode: string; APatientID: Integer = -1): TADODataSet;
var
strSQL: string;
begin
Result := nil;
strSQL := ' select count(*) '
+' from tselectitem '
+' where questioncode in '
+' ( '
+' select code '
+' from tquestion '
+' where grpcode in '
+' ( '
+' select questiongrp '
+' from tmeasure '
+' where code = '+QuotedStr(AMeasureCode)
+' ) '
+' )';
if GetDBValue(AConn, strSQL) = 0 then begin
MsgOK('心理量表的问题集未初始化,请先设置心理量表!');
Exit;
end;
with TfrmAnswerInput.Create(Application) do begin
PatientID := APatientID;
Conn := AConn;
Result := TADODataSet.Create(nil);
adsResult := Result;
MeasureCode := AMeasureCode;
FXhList := TStringList.Create;
FXHList.Delimiter := ';';
Init;
if ShowModal = mrOk then begin
{if PatientID <> -1 then
SavePatientResult(PatientID, adsResult); }
Result := adsResult;
end;
FXHList.Free;
Free;
end;
end;
{$R *.dfm}
procedure TfrmAnswerInput.Init;
begin
frmMessage := TfrmMessage.Create(Application);
frmMessage.lblMessage.Caption := '正在打开题库,请稍侯...';
frmMessage.pbMessage.Visible := false;
frmMessage.Show;
frmMessage.Update;
//根据MeasureCode加载和问题组有关的问题及选项数据。
LoadQuestion;
//初试化FORM上的控件(动态创建)
frmMessage.lblMessage.Caption := '正在创建问题控件集,请稍侯...';
frmMessage.pbMessage.Visible := true;
frmMessage.pbMessage.Max := FadsQuestion.RecordCount;
InitComponents;
FreeAndNil(frmMessage);
end;
procedure TfrmAnswerInput.CreateSecondPnl(DataSet: TADODataSet; iNo: Integer);
var
pnlTotal,pnlRight,pnlLeft,pnlLT,pnlLB: TPanel;
iLeft: Integer;
lblSelect: TLabel;
begin
pnlTotal := TPanel.Create(Self);
with pnlTotal do begin
Parent := scbSecond;
Color := clWindow;
Caption := '';
BevelOuter := bvNone;
Align := alTop;
Top := iNo*70+1;
Height := 70;
end;
pnlRight := TPanel.Create(Self);
with pnlRight do begin
Parent := pnlTotal;
Color := clWindow;
Caption := '';
Align := alRight;
Width := 150;
end;
pnlLeft := TPanel.Create(Self);
with pnlLeft do begin
Parent := pnlTotal;
Color := clWindow;
Caption := '';
Align := alClient;
end;
pnlLT := TPanel.Create(Self);
with pnlLT do begin
Parent := pnlLeft;
Color := clWindow;
Caption := '';
BevelOuter := bvNone;
Align := alTop;
Height := 40;
end;
pnlLB := TPanel.Create(Self);
with pnlLB do begin
Parent := pnlLeft;
Color := clWindow;
Caption := '';
BevelOuter := bvNone;
Align := alClient;
end;
with FadsSelectItem do begin
if Filtered then Filtered := False;
Filter := 'questioncode='+QuotedStr(DataSet.fieldByName('code').Value);
Filtered := true;
Sort := 'code';
end;
with TEdit.Create(Self) do begin
Parent := pnlRight;
Top := (pnlTotal.Height-Height) div 2;
Left := (pnlRight.Width-Width) div 2;
Name := 'edt2'+DataSet.FieldByName('xh').AsString;
Text := GetSelectTagByScore(DataSet.FieldByName('score').AsInteger);
//Tag := DataSet.FieldByName('xh').Value;
Tag := iNo+1;
OnEnter := edt2Enter;
//OnKeyDown := edt2KeyDown;
OnExit := edt2Exit;
end;
with TLabel.Create(Self) do begin
Parent := pnlLT;
AutoSize := false;
WordWrap := true;
Top := 5;
Left := 5;
Width := pnlLT.Width - 10;
Height := pnlLT.Height - 10;
Caption := DataSet.fieldbyname('content').AsString;
end;
with FadsSelectItem do begin
First; iLeft := 10;
while not Eof do begin
lblSelect := TLabel.Create(Self);
with lblSelect do begin
lblSelect.Parent := pnlLB;
lblSelect.Top := 5;
lblSelect.Left := iLeft;
lblSelect.Caption := FieldByName('SelectTag').AsString+'> '+FieldByName('content').AsString;
iLeft := iLeft + Canvas.TextWidth(Caption) + 9;
end;
Next;
end;
end;
end;
procedure TfrmAnswerInput.CreateThirdPnl(DataSet: TADODataSet;
iNo: Integer);
var
pnl: TPanel;
iLeftNo: Integer;
begin
pnl := TPanel.Create(Self);
with pnl do begin
Parent := scbThird;
Width := 62;
Height := 30;
iLeftNo := iNo mod 12;
if iLeftNo < 6 then
Left := iLeftNo*Width + 102
else
Left := iLeftNo*Width + 122;
Top := (iNo div 12)*Height + 20;
Caption := '';
Color := clWindow;
BevelOuter := bvNone;
end;
with TLabel.Create(Self) do begin
Parent := pnl;
Top := 9;
Left := 1;
Caption := DataSet.fieldByName('XH').AsString+'.';
end;
with TEdit.Create(Self) do begin
Parent := pnl;
Top := 5;
Left := 25;
Width := 33;
Name := 'edt3'+DataSet.FieldByName('xh').AsString;
Text := GetSelectTagByScore(DataSet.FieldByName('score').AsInteger);
//Tag := DataSet.FieldByName('xh').AsInteger;
Tag := iNo+1;
OnEnter := edt3Enter;
//OnKeyDown := edt3KeyDown;
OnExit := edt3Exit;
end;
end;
procedure TfrmAnswerInput.InitComponents;
var
i: Integer;
begin
with FadsQuestion do begin
First; i:=0;
while not Eof do begin
frmMessage.pbMessage.Position := frmMessage.pbMessage.Position+1;
Application.ProcessMessages;
//初试化FORM
FXHList.Add('TAG'+IntToStr(i+1)+'='+FadsQuestion.FieldByName('xh').AsString);
CreateSecondPnl(FadsQuestion, i);
CreateThirdPnl(FadsQuestion, i);
Next;
Inc(i);
end;
FadsQuestion.AfterScroll := adsQuestionAfterScroll;
dsQuestion.DataSet := FadsQuestion;
First;
end;
end;
procedure TfrmAnswerInput.LoadQuestion;
var
strSQL: string;
i: Integer;
begin
//====================== 选项 ================================
FadsSelectItem := TADODataSet.Create(Self);
with FadsSelectItem do begin
Connection := Conn;
CommandText := 'select * from tselectitem';
Active := true;
end;
//====================== 问题 ================================
//创建结构
FadsQuestion := TADODataSet.Create(Self);
with FadsQuestion do begin
with FieldDefs do begin
Add('code',ftString, 10);
Add('XH',ftString,20);
Add('name',ftString, 20);
Add('content',ftString, 50);
Add('vartag',ftString, 10);
Add('ItemDomain',ftString, 50);
Add('score',ftInteger);
Add('Answer',ftString,10);
end;
CreateDataSet;
end;
//加载数据
strSQL := 'select code,xh,name,content=convert(varchar,xh)+''.''+content,'+
' vartag,ItemDomain,score=-1 '+
'from tquestion '+
'where grpcode in '+
'( '+
' select questiongrp '+
' from tmeasure '+
' where code = '+QuotedStr(MeasureCode)+
') '+
'order by xh ';
with GetDataSet(Conn, strSQL) do begin
First;
try
while not Eof do begin
FadsQuestion.Append;
for i:=0 to FadsQuestion.FieldCount-2 do
FadsQuestion.Fields[i].Value := Fields[i].Value;
Next;
end;
finally
Free;
end;
end;
end;
procedure TfrmAnswerInput.SetConn(const Value: TADOConnection);
begin
FConn := Value;
end;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?