📄 main.~pas
字号:
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 + -