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

📄 main.~pas

📁 局域网考试系统 局域网考试系统
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
          with SubsQuery do
          begin
               Close;
               SQL.Clear;
               SQL.Add('SELECT 学科名称,学科表名 FROM 学科信息');
               ExecSQL;
               Open;
               First;
               while not Eof do
               begin
                    CreateSub(Node,FieldByName('学科名称').AsString,FieldByName('学科表名').AsString,'学科名称');
                    Next;
               end;
          end;
     end;
end;

procedure TMainForm.CreateSub(TreeNode: TTreeNode; SubName,SubTableName,FieldNameInParent: String);
var
     Node:TTreeNode;
     PNode:TPMyNode;
begin
     Node:=SubTree.Items.AddChild(TreeNode,SubName);
     Node.ImageIndex :=2;
     Node.SelectedIndex:=3;
     GetMem(PNode,SizeOf(TMyNode));
     PNode^.NodeType:=NT_SUB;
     PNode^.TableName :=SubTableName;
     PNode^.CheckRate :=0;
     PNode^.FiledNameInParent :=FieldNameInParent;
     Node.Data:=PNode;
     with DMForm do
     begin
          with SubsItemQuery do
          begin
               Close;
               SQL.Clear;
               SQL.Add('SELECT 学科分支名称,学科分支表名 FROM '+SubTableName);
               ExecSQL;
               Open;
               First;
               while not Eof do
               begin
                    CreateSubItem(Node,FieldByName('学科分支名称').AsString,FieldByName('学科分支表名').AsString,'学科分支名称');
                    Next;
               end;
          end;
     end;
end;

procedure TMainForm.CreateSubItem(TreeNode: TTreeNode; SubItemName,
  SubItemTableName,FieldNameInParent: String);
var
     Node:TTreeNode;
     PNode:TPMyNode;
begin
     Node:=SubTree.Items.AddChild(TreeNode,SubItemName);
     Node.ImageIndex :=4;
     Node.SelectedIndex:=5;
     GetMem(PNode,SizeOf(TMyNode));
     PNode^.NodeType:=NT_SUBITEM;
     PNode^.TableName :=SubItemTableName;
     PNode^.CheckRate :=0;
     PNode^.FiledNameInParent :=FieldNameinParent;
     Node.Data:=PNode;
     with DMForm do
     begin
          with SubSectionQuery do
          begin
               Close;
               SQL.Clear;
               SQL.Add('SELECT 章节名称,章节表名 FROM '+SubItemTableName);
               ExecSQL;
               Open;
               First;
               while not Eof do
               begin
                    CreateSubSection(Node,FieldByName('章节名称').AsString,FieldByName('章节表名').AsString,'章节名称');
                    Next;
               end;
          end;
     end;
end;

procedure TMainForm.CreateSubSection(TreeNode: TTreeNode; SubSectionName,
  SubSectionTableName,FieldNameInParent: String);
var
     Node:TTreeNode;
     PNode:TPMyNode;
begin
     Node:=SubTree.Items.AddChild(TreeNode,SubSectionName);
     Node.ImageIndex :=6;
     Node.SelectedIndex:=7;
     GetMem(PNode,SizeOf(TMyNode));
     PNode^.NodeType:=NT_SUBSECTION;
     PNode^.TableName :=SubSectionTableName;
     PNode^.CheckRate :=0;
     PNode^.FiledNameInParent :=FieldNameInParent;
     Node.Data:=PNode;
     Node:=SubTree.Items.AddChild(Node,SubSectionName+'难题');
     Node.ImageIndex :=8;
     Node.SelectedIndex:=9;
     GetMem(PNode,SizeOf(TMyNode));
     PNode^.NodeType:=NT_SECTIONITEM;
     PNode^.TableName :=SubSectionTableName+' WHERE 选中标志=True';
     PNode^.CheckRate :=0;
     PNode^.FiledNameInParent :='';
     Node.Data:=PNode;
     Node:=SubTree.Items.Add(Node,SubSectionName+'一般题');
     Node.ImageIndex :=8;
     Node.SelectedIndex:=9;
     GetMem(PNode,SizeOf(TMyNode));
     PNode^.NodeType:=NT_SECTIONITEM;
     PNode^.TableName :=SubSectionTableName+' WHERE 选中标志=False';
     PNode^.CheckRate :=0;
     PNode^.FiledNameInParent :='';
     Node.Data:=PNode;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
     APPPATH:=ExtractFilePath(Application.ExeName);
     InitConnection;
     SelRateList:=TList.Create;
     DeleteTableList:=TStringList.Create;
     FieldStream:=TMemoryStream.Create;
     DecStream:=TMemoryStream.Create;
     Bitmap:=TBitmap.Create;
     RateSheet.PageControl :=nil;
     Bitmap.PixelFormat :=pf1bit;
     Bitmap.Canvas.Pen.Color:=$ffffff;
     Bitmap.Canvas.Brush.Color:=$ffffff;
     CreateSubTree;
     SelectedOld:=nil;
     SubTree.Items.GetFirstNode.Selected :=True;
     SubTreeClick(Sender);
     InitProgressBar('WIZARDGROUP');
     RefreshDepList;
end;

procedure TMainForm.SubTreeDeletion(Sender: TObject; Node: TTreeNode);
begin
     if TPMyNode(Node.Data)^.NodeType<>NT_SUBSECTION then
     begin
          DeleteTableList.Add(TPMyNode(Node.Data)^.TableName);
     end;
     if Assigned(Node.Data) then
     begin
          FreeMem(Node.Data);
          Node.Data:=nil;
     end;
end;

procedure TMainForm.SubTreeClick(Sender: TObject);
var
     Node:TTreeNode;
begin
     Node:=SubTree.Selected;
     if Node<>SelectedOld then
     begin
          if TPMyNode(Node.Data)^.NodeType = NT_SECTIONITEM then
          begin
               SetSectionButton(True);
               RateTB.Position :=TPMyNode(Node.Data)^.CheckRate;
               RateSheet.PageControl:=PC3;
          end
          else
          begin
               RateSheet.PageControl :=nil;
               SetSectionButton(False);
          end;
          ShowNode(Node);
          SelectedOld:=Node;
     end;
end;


procedure TMainForm.ShowNode(TreeNode: TTreeNode);
begin
     case TPMyNode(TreeNode.Data)^.NodeType of
          NT_BOOT:
          begin
               with SubTreeQuery do
               begin
                    Close;
                    SQL.Clear;
                    SQL.Add('SELECT * FROM 学科信息');
                    ExecSQL;
                    Open;
               end;
          end;
          NT_SUB:
          begin
               with SubTreeQuery do
               begin
                    Close;
                    SQL.Clear;
                    SQL.Add('SELECT * FROM '+TPMyNode(TreeNode.Data)^.TableName);
                    ExecSQL;
                    Open;
               end;
          end;
          NT_SUBITEM:
          begin
               with SubTreeQuery do
               begin
                    Close;
                    SQL.Clear;
                    SQL.Add('SELECT * FROM '+TPMyNode(TreeNode.Data)^.TableName);
                    ExecSQL;
                    Open;
               end;

          end;
          NT_SUBSECTION:
          begin
               with SubTreeQuery do
               begin
                    Close;
                    SQL.Clear;
                    SQL.Add('SELECT * FROM '+TPMyNode(TreeNode.Data)^.TableName);
                    ExecSQL;
                    Open;
               end;
          end;
          NT_SECTIONITEM:
          begin
               with SubTreeQuery do
               begin
                    Close;
                    SQL.Clear;
                    SQL.Add('SELECT * FROM '+TPMyNode(TreeNode.Data)^.TableName);
                    ExecSQL;
                    Open;
               end;
          end;
     end;
end;

procedure TMainForm.ToolButton1Click(Sender: TObject);
begin
     SubTree.Images:=BigImageList;
     SubTree.Font.Size :=-21;
     SubTree.Refresh;
end;

procedure TMainForm.ToolButton2Click(Sender: TObject);
begin
     SubTree.Images:=LowImageList;
     SubTree.Font.Size :=-12;
     SubTree.Refresh;
end;

procedure TMainForm.WriteBlobField(Field: TBlobField; Stream: TStream);
var
     ADOBlobField:TADOBlobStream;
begin
     ADOBlobField:=TADOBlobStream.Create(Field,bmWrite);
     Stream.Position:=0;
     ADOBlobField.LoadFromStream(Stream);
     Stream.Position:=0;
     ADOBlobField.Free;
end;

procedure TMainForm.ReadBlobField(Field: TBlobField; Stream: TStream);
var
     ADOBlobField:TADOBlobStream;
begin
     ADOBlobField:=TADOBlobStream.Create(Field,bmRead);
     Stream.Position:=0;
     ADOBlobField.SaveToStream(Stream);
     Stream.Position:=0;
     ADOBlobField.Free;
end;

procedure TMainForm.DBG1CellClick(Column: TColumn);
begin
     if (TPMyNode(SubTree.Selected.Data)^.NodeType=NT_SUBSECTION) Or
     (TPMyNode(SubTree.Selected.Data)^.NodeType=NT_SECTIONITEM) then
     begin
          if SubTreeQuery.RecordCount >0 then
          begin
               ImageLoadFromBlobField(FieldImage,TBlobField(SubTreeQuery.FieldByName('题目')));
               ImageLoadFromBlobField(AnsImage,TBlobField(SubTreeQuery.FieldByName('主观答案')));
          end;
     end;
end;

procedure TMainForm.AddButtonClick(Sender: TObject);
var
     C:TClipboard;
begin
     C:=ClipBoard;
          if C.HasFormat(CF_METAFILEPICT) or C.HasFormat(CF_BITMAP)
             	 then  FieldImage.Picture.Assign(C);
     SubTreeQuery.Append;
     ImageSaveToBlobField(FieldImage,TBlobField(SubTreeQuery.FieldByName('题目')));
     if Copy(SubTree.Selected.Text,Length(SubTree.Selected.Text)-3,4)='难题' then
          SubTreeQuery.FieldByName('选中标志').AsString:='True'
     else
          SubTreeQuery.FieldByName('选中标志').AsString:='False';
     SubTreeQuery.Post;
end;

procedure TMainForm.SBox1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  var
     SB:TScrollBox;
begin
SB:=TScrollBox(Sender);
SB.VertScrollBar.Position :=SB.VertScrollBar.Position+WheelDelta div 10;
Handled:=True;
end;

procedure TMainForm.FieldImageClick(Sender: TObject);
begin
     TImage(Sender).Parent.SetFocus;
end;

procedure TMainForm.CompressStream(SourceStream,DeskStream:TStream);
var
     CompStream:TCompressionStream;
begin
     DeskStream.Position :=0;
     CompStream:=TCompressionStream.Create(clMax,DeskStream);
     SourceStream.Position :=0;
     CompStream.CopyFrom(SourceStream,SourceStream.Size);
     CompStream.Free;
     DeskStream.Position :=0;
end;

procedure TMainForm.DeCompressStream(SourceStream, DeskStream: TStream);
const
     SixK=$ffff;
var
     DeCompStream:TDecompressionStream;
     Data:array[1..SixK] of Char;
     Count:Integer;
begin
     SourceStream.Position:=0;
     DeCompStream:=TDecompressionStream.Create(SourceStream);
     DeskStream.Position :=0;
     try
     repeat
     Count:=DeCompStream.Read(Data,SixK);
     if Count>0 then  DeskStream.Write(Data,Count);
     until Count=0;
     finally
     DeCompStream.Free;
     end;
     DeskStream.Position :=0;
end;

procedure TMainForm.ImageLoadFromBlobField(Image: TImage;
  BlobField: TBlobField);
begin
     ReadBlobField(BlobField,FieldStream);
     DeCompressStream(FieldStream,DecStream);
     Bitmap.LoadFromStream(DecStream);
     Image.Picture.Assign(Bitmap);
     Bitmap.FreeImage;
     DecStream.Clear;
     FieldStream.Clear;
end;

procedure TMainForm.ImageSaveToBlobField(Image: TImage;
  BlobField: TBlobField);
begin
     Bitmap.Width :=Image.Width;
     Bitmap.Height :=Image.Height;
     Bitmap.PixelFormat :=pf1bit;
     Bitmap.Canvas.Rectangle(Image.ClientRect);
     Bitmap.Canvas.Draw(0,0,Image.Picture.Graphic);
     Bitmap.SaveToStream(DecStream);
     CompressStream(DecStream,FieldStream);
     WriteBlobField(BlobField,FieldStream);
     DecStream.Clear;
     FieldStream.Clear;
end;

procedure TMainForm.DelButtonClick(Sender: TObject);
begin
     if SubTreeQuery.RecordCount >0 then
     begin
          SubTreeQuery.Delete;
     end;
end;

procedure TMainForm.SetSectionButton(Show: Boolean);
begin
     SectionPanel.Visible :=Show;
     AnswerPanel.Visible :=Show;
end;

procedure TMainForm.RateTBChange(Sender: TObject);
begin
     RateLabel.Caption:='共'+IntToStr((SubTreeQuery.RecordCount*RateTB.Position)Div 100)+'道题目';
     SelRateShow.Progress :=RateTB.Position;
end;

procedure TMainForm.SB1Click(Sender: TObject);
var
     PNode:TPMyNode;
     PSelItem:TPSelRateItem;
     i:Integer;
begin
     PNode:=TPMyNode(SubTree.Selected.Data);
     if PNode^.NodeType =NT_SECTIONITEM then
     begin
          PNode^.CheckRate :=RateTB.Position;
          if SelRateList.Count>0 then
          begin
               i:=0;
               while (i<SelRateList.Count) do
               begin
                    if TPSelRateItem(SelRateList.Items[i])^.TableName=PNode^.TableName then Break;
                    Inc(i);
               end;
               if (i>=SelRateList.Count)  then
               begin
                    StatusBar.Panels[0].Text:='Add....';
                    GetMem(PSelItem,SizeOf(TSelRateItem));
                    PSelItem^.TableName :=PNode^.TableName;
                    PSelItem^.CheckRate :=RateTB.Position;
                    SelRateList.Add(PSelItem);
               end
               else
               begin
                    StatusBar.Panels[0].Text:='Edit....';
                    TPSelRateItem(SelRateList.Items[i])^.CheckRate:=RateTB.Position;
               end;
          end
          else
          begin
               StatusBar.Panels[0].Text:='Add....';
               GetMem(PSelItem,SizeOf(TSelRateItem));
               PSelItem^.TableName :=PNode^.TableName;
               PSelItem^.CheckRate :=RateTB.Position;
               SelRateList.Add(PSelItem);
          end;
     end;
     StatusBar.Panels[0].Text:='';
end;

⌨️ 快捷键说明

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