⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmt.~pas

📁 本人帮别人写的一个卡特尔16F性格检测程序
💻 ~PAS
字号:
unit pmt;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls, ToolWin, ImgList,Printers,TypInfo,
  Grids, OleCtrls, SHDocVw, MSHTML;

type
  TForm4 = class(TForm)
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ImageList1: TImageList;
    StatusBar1: TStatusBar;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Image1: TImage;
    TabSheet3: TTabSheet;
    WebBrowser1: TWebBrowser;
    WebBrowser2: TWebBrowser;
    RichEdit1: TRichEdit;
    procedure ToolButton1Click(Sender: TObject);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
      var ScrollPos: Integer);
  private
    function getBzfByCsf(strYinBZ: string; intSjcsf:integer;strLb:string): integer;
    procedure OUtFz(yinsubz: string;sjcesf, bzfz: integer;var myStringList:TStringList);
    function CreateCellsAdd():TStringList;
    procedure OutText(s:string; j: integer;isP:bool);
    { Private declarations }
  public
    strRybh :string; //人员编号
    strcmbh :string; //常模编号
  end;

var
  Form4: TForm4;

implementation

uses dataModel, main;

{$R *.dfm}

procedure TForm4.ToolButton1Click(Sender: TObject);
  var   
      xscale,   yscale:   Integer;   
      aRect:   TRect;   
  begin   
      Printer.BeginDoc;   
      xscale   :=   GetDeviceCaps(Printer.Handle,   LOGPIXELSX)   div   PixelsPerInch;   
      yscale   :=   GetDeviceCaps(Printer.Handle,   LOGPIXELSY)   div   PixelsPerInch;   
      aRect   :=   Rect(0,   0,   Image1.Picture.Width   *   xscale,   Image1.Picture.Height   *   yscale);   
      Canvas.StretchDraw(aRect,   Image1.Picture.Graphic);   
      Printer.EndDoc;   
  end;   

var x1,y1 :integer;
procedure TForm4.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
x1 := x;
y1 :=y;
self.StatusBar1.Panels[0].Text := 'X' + inttostr(x) + ',' + 'y' + inttostr(y);
end;

procedure TForm4.Image1Click(Sender: TObject);
begin
        // Image1.Canvas.TextOut(x1,y1,'你好');
end;
 //枚举定义
type    yinsu = (A,B,C,E,F,G,H,I,L,M,N,O,Q1,Q2,Q3,Q4);
function creatReport(rbh :string;bzf:integer;yinsuID:string) :string;
var
ss,xm,xbName,zyName :string; //姓名,性别,职业
nl : integer;  //年龄

begin
    DataModule1.ADOQuery9.SQL.Clear;
    DataModule1.ADOQuery9.SQL.Add('select * from csz where bh =' + rbh ) ;
    DataModule1.ADOQuery9.Open;
    if  DataModule1.ADOQuery9.RecordCount >0 then
     begin
        xm :=  DataModule1.ADOQuery9.FieldValues['xm'];   //姓名
         xbName :=  DataModule1.ADOQuery9.FieldValues['xb'];    //性别
         zyName     :=  DataModule1.ADOQuery9.FieldValues['zy'];      //职业

         nl     :=  DataModule1.ADOQuery9.FieldValues['nl'];  //年龄

    DataModule1.ADOQuery8.Close;
    DataModule1.ADOQuery8.SQL.Clear;
    ss := 'SELECT fzdsz.xgms FROM fzdsz WHERE fzdsz.xbCode_CodeName= '''
     +  xbName + '''  AND fzdsz.zyfCode_CodeName= ''' + zyName  +    ''' AND '
       + inttostr(nl)
       + '>=fzdsz.Bage AND '
       + inttostr(nl)
       + '<fzdsz.Eage AND '
        +    inttostr(bzf)
        + ' >=fzdsz.Bfz AND '
         +  inttostr(bzf) +
         ' <fzdsz.Efz and fzdsz.YinSuBH =  ''' + YinsuID + '''';
    DataModule1.ADOQuery8.SQL.Add(ss);
    {DataModule1.ADOQuery8.Parameters[0].Value  := xbName;
    DataModule1.ADOQuery8.Parameters[1].Value  := zyName;
    DataModule1.ADOQuery8.Parameters[2].Value  := nl;
    DataModule1.ADOQuery8.Parameters[3].Value  :=bzf ;
    DataModule1.ADOQuery8.Parameters[4].Value  :=yinsuID ; }
    DataModule1.ADOQuery8.Open;

    if DataModule1.ADOQuery8.RecordCount =0 then
    begin
       creatReport := '';

    end
    else
    begin
       creatReport :=   DataModule1.ADOQuery8.FieldValues['xgms']
    end;

    end ;
     DataModule1.ADOQuery9.Close;
end;
procedure TForm4.FormShow(Sender: TObject);
var strYinsu ,enumName,xgms: string; //因素表示
    intCsF : integer;  //某个因素实际测试得分
    intBZfz : integer; //标准分
   myStringList:TStringList;
    tt:integer;
begin
    xgms := '';
    myStringList :=  CreateCellsAdd; //创建因素位置坐标记录
    //得到某个测试人的分值统计
    DataModule1.ADOQuery2.Close;
    DataModule1.ADOQuery2.Parameters[0].value := strRybh; // strRybh是人员编号
    DataModule1.ADOQuery2.Open;
    if DataModule1.ADOQuery2.RecordCount =0 then
    begin
       exit;
    end;
    DataModule1.ADOQuery2.First;
    while not DataModule1.ADOQuery2.Eof do
    begin
         if DataModule1.ADOQuery2.Recordset.Fields['yinsuID'].Value = null then
         begin
         DataModule1.ADOQuery2.Next;  //cmbh
         continue;
         end ;
         strYinsu :=DataModule1.ADOQuery2.Recordset.Fields['yinsuID'].Value;  //因素标识名称
         intCsF := DataModule1.ADOQuery2.Recordset.Fields['fzOfSum'].Value;   //实际测试分
         intBZfz :=  getBzfByCsf(strYinsu,intCsF,strcmbh); //    '05'              //标准分
         //将人员测试的标准分保存
         DataModule1.ADOTable6.Filter := 'rybh=' + QuotedStr(strRybh) + ' and ' + 'ysbh=' + QuotedStr(strYinsu);
         DataModule1.ADOTable6.Filtered := true;
         DataModule1.ADOTable6.Open;
         if DataModule1.ADOTable6.RecordCount = 0 then
         begin
         DataModule1.ADOTable6.Append;
         DataModule1.ADOTable6.FieldValues['rybh'] := strRybh;
         DataModule1.ADOTable6.FieldValues['ysbh'] := strYinsu;
         DataModule1.ADOTable6.FieldValues['bzf'] := intBZfz;
         DataModule1.ADOTable6.Post;
         DataModule1.ADOTable6.Close;
         end;
         //在折线图上输出分值 画出折线
         if intCsF >=0 then
          OUtFz(strYinsu,intCsF,intBZfz,myStringList);
          for tt :=0 to 15 do
          begin
              enumName := GetEnumName(TypeInfo(yinsu),tt); //得到枚举的名称
             xgms := xgms + creatReport(strRybh,intbzfz,strYinsu);
          end;

         DataModule1.ADOQuery2.Next;  //cmbh
    end;
    self.Image1.Picture.SaveToFile('temp.bmp');
    DataModule1.ADOQuery2.Close;
    self.RichEdit1.Text :=  xgms;
    if myStringList <> nil then
    begin
      myStringList.Free;
      myStringList := nil;
    end;                        // ExtractFilePath(application.ExeName) +'
     WebBrowser1.Navigate(ExtractFilePath(application.ExeName) + 'database/sj.htm');
     WebBrowser2.Navigate(ExtractFilePath(application.ExeName) + 'pmt.htm');
end;




function Tform4.CreateCellsAdd() :TStringList;
var
MyList: TStringList;

  const intBaseX :integer = 78;
  const intBaseY :integer = 163;
  const intXstep :integer = 48;
  const intYstep :integer = 42;
  CONST intBLO :integer = 103; //标准分离第一列的距离
  const intBaseXl :integer = 248;
  const intXstep1 :integer = 43;
 var i,j,m:integer;
 var enumName :string;//枚举的名称
 var cx,cy :integer;
begin
     cx := intBaseX;
     cy := intBaseY;
     i   :=   Ord(High(yinsu))   -   Ord(Low(yinsu))+1;  //得到枚举的个数
     MyList := TStringList.Create;
     for j:=0 to i do
     begin
         for m:= -1 to 0 do
             begin
                enumName := GetEnumName(TypeInfo(yinsu),j); //得到枚举的名称
                MyList.Values[enumName + inttostr(m)] :=  inttostr(cx) + ',' + inttostr(cy);
                cx := cx +  intXstep;
             end;
            cx := intBaseXl;
           for m:= 1 to 10 do
             begin
                enumName := GetEnumName(TypeInfo(yinsu),j); //得到枚举的名称
                MyList.Values[enumName + inttostr(m)] :=  inttostr(cx) + ',' + inttostr(cy);
                cx := cx +  intXstep1;
             end;
         cx := intBaseX;
     cy := cy + intYstep;
     end;
    MyList.Sort;
result :=  MyList;
end;
{
  **********************************************
    功能描述:输出分值
    参数:yinsubz 因素标志
          sjcesf  每因素实际测试得分
          bzfz    按因素查得的标准分
 }
procedure Tform4.OUtFz(yinsubz:string;sjcesf,bzfz:integer;var myStringList:TStringList);
var
s:string;
begin
  s := myStringList.values[yinsubz + inttostr(-1)];
  OutText(s, sjcesf,true);
  s := myStringList.values[yinsubz + inttostr(0)];
  OutText(s, bzfz,true);
  s := myStringList.values[yinsubz + inttostr(bzfz)];
  OutText(s, bzfz,false);
end;
var
oldx:integer=0;
oldy :integer =0;
procedure Tform4.OutText(s:string;j:integer;isP:bool);
var
   strs :TStrings;
 
   x,y :integer;
begin
   try
       strs := TStringList.Create;
       strs.CommaText :=  s;

       begin
          x := strtoint(strs[0]);
          y := strtoint(strs[1]);
          if isP then
             Image1.Canvas.TextOut(x,y,inttostr(j))
          else
            begin
             Image1.Canvas.TextOut(x,y,'●');
             Image1.Canvas.MoveTo(x,y);
            if oldx <>0 then
             Image1.Canvas.LineTo(oldx,oldy);
            oldx := x;
            oldy := y;

            end;
       end;
  finally
      strs := nil;
      strs.Free;

    end;
end;

//根据因素ID和实际测试分和长摸类别得到标准分
function Tform4.getBzfByCsf(strYinBZ:string;intSjcsf:integer;strLb:string):integer;
//var
//strCmd :string;
begin
    DataModule1.ADOQuery3.Close;
   // DataModule1.ADOQuery3.SQL.Clear;
   // strCmd := 'select bzf from cmb where yinsu=''' + strYinBZ  + ''' and lb =''' +  strLb  + ''' and beginFz>=' + inttostr(intSjcsf) + ' and endfz <=' + inttostr(intSjcsf);
    //DataModule1.ADOQuery3.SQL.Add(strCmd);
    DataModule1.ADOQuery3.Parameters[0].Value :=  strLb;
    DataModule1.ADOQuery3.Parameters[1].Value :=  intSjcsf;
    DataModule1.ADOQuery3.Parameters[2].Value :=  intSjcsf;
    DataModule1.ADOQuery3.Parameters[3].Value :=  strYinBZ;
    DataModule1.ADOQuery3.Open;

    if DataModule1.ADOQuery3.RecordCount =0 then
    begin
       result := -1;
       exit;
    end;
    DataModule1.ADOQuery3.First;
    result := DataModule1.ADOQuery3.Recordset.Fields['bzf'].Value;
end;
procedure TForm4.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
   var
            Doc:IHTMLDocument2;
            //input:OleVariant;
            userinputelement:ihtmlinputelement;
            //ysSpan:IHTMLSpanElement;

begin
doc:=webbrowser1.document as ihtmldocument2;
            userinputelement:=(doc.all.item('su1',0) as ihtmlinputelement);
            userinputelement.value:='分值';

             userinputelement:=(doc.all.item('su8',0) as ihtmlinputelement);
            userinputelement.value:='分值';

             userinputelement:=(doc.all.item('su9',0) as ihtmlinputelement);
            userinputelement.value:='分值';

             userinputelement:=(doc.all.item('su10',0) as ihtmlinputelement);
            userinputelement.value:='分值';

             userinputelement:=(doc.all.item('su11',0) as ihtmlinputelement);
            userinputelement.value:='分值';

             userinputelement:=(doc.all.item('su12',0) as ihtmlinputelement);
            userinputelement.value:='分值';

             userinputelement:=(doc.all.item('su13',0) as ihtmlinputelement);
            userinputelement.value:='分值';

             userinputelement:=(doc.all.item('su14',0) as ihtmlinputelement);
            userinputelement.value:='分值';
            //pwdinputelement:=(doc.all.item('password',0) as ihtmlinputelement);
            //pwdinputelement.value:=edit2.text;
            //input:=doc.all.item('submit',0);
            //input.click;
end;

procedure TForm4.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
if ScrollCode =scLineUp then
  Image1.Top  := 0 + ScrollPos * 10
else if  ScrollCode =scLineDown  then
  Image1.Top  := 0 - ScrollPos * 10 ;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -