📄 jvgreporteditorform.pas
字号:
OnMouseUp_(Sender, Button, Shift, X, Y);
end;
if Assigned(FSelectedControl) then
if ssShift in Shift then
begin
TJvgReportItem(Sender).Selected := not TJvgReportItem(Sender).Selected;
FMouseDown := False;
if FSelectedControl = Sender then
Exit;
end
else
begin
if TJvgReportItem(Sender).Selected then
Exit;
with FScrollBox do
for I := 0 to ControlCount - 1 do
if (Controls[I] is TJvgReportItem) and
TJvgReportItem(Controls[I]).Selected then
TJvgReportItem(Controls[I]).Selected := False;
FSelectedControl.Selected := False;
FSelectedControl.Invalidate;
end;
FSelectedControl := TJvgReportItem(Sender);
FSelectedControl.Selected := True;
UpdateToolBar(FSelectedControl);
FSelectedControlLastPos.X := FSelectedControl.Left;
FSelectedControlLastPos.Y := FSelectedControl.Top;
end;
procedure TJvgReportEditorForm.OnMouseUp_(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ScrollBox_MouseUp(Sender, Button, Shift, X, Y);
FMouseDown := False;
if not Assigned(FSelectedControl) then
Exit;
FUndoPosShift.X := FSelectedControlLastPos.X - FSelectedControl.Left;
FUndoPosShift.Y := FSelectedControlLastPos.Y - FSelectedControl.Top;
FCanUndo := True;
//if not Assigned(FSelectedControl) then Exit;
//if TControl(Sender).Tag = 0 then Exit;
{ DrawFocusRect( TControl(Sender).Parent.Handle, FocusRect );
R := Rect( 0, 0, Screen.Width, Screen.Height );
ClipCursor(@R);
TControl(Sender).Left := TControl(Sender).Left + X - FControlPos.X;
TControl(Sender).Top := TControl(Sender).Top + Y - FControlPos.Y;
if TControl(Sender).Tag = 2 then//...was moved
TJvgReportItem(Sender).RepaintBorder;}
TControl(Sender).Tag := 0;
end;
procedure TJvgReportEditorForm.OnMouseMove_(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
I: Integer;
begin
if FSelection then
ScrollBox_MouseMove(Sender, Shift, X, Y);
if sb_FixAllMoving.Down then
Exit;
// if TControl(Sender).Tag = 0 then Exit;
if not FMouseDown then
Exit;
with FScrollBox do
for I := 0 to ControlCount - 1 do
if Controls[I] is TJvgReportItem then
with TJvgReportItem(Controls[I]) do
if Selected and (Fixed = 0) then
begin
Left := ((Left + X - FControlPos.X) div FStep.X) * FStep.X;
Top := ((Top + Y - FControlPos.Y) div FStep.Y) * FStep.Y;
end;
FSkipSizeUpdate := True;
ShowComponentPos(FSelectedControl);
//TControl(Sender).Left := TControl(Sender).Left + X - FControlPos.X;
//TControl(Sender).Top := TControl(Sender).Top + Y - FControlPos.Y;
{
TControl(Sender).Tag := 2;//...on moving
DC := GetDC( TControl(Sender).Parent.Handle );
DrawFocusRect( DC, FocusRect );
FocusRect := Bounds( TControl(Sender).Left+X-FControlPos.X, TControl(Sender).Top+Y-FControlPos.Y, FSelectedControl.Width, FSelectedControl.Height );
DrawFocusRect( DC, FocusRect );
ReleaseDC( TControl(Sender).Parent.Handle, DC );
}
end;
procedure TJvgReportEditorForm.OnResize_(Sender: TObject);
begin
FSkipSizeUpdate := True;
if Sender = FSelectedControl then
ShowComponentPos(TControl(Sender));
end;
procedure TJvgReportEditorForm.Read(FileName: string; ParentWnd: TWinControl);
begin
FScrollBox.HorzScrollBar.Position := 0;
FScrollBox.VertScrollBar.Position := 0;
FSelectedControl := nil;
UpdateToolBar(nil);
Component.LoadFromFile(FileName);
Component.CreateReport(ParentWnd, True);
AssignEventsToAllComponents;
RemakeComponentsList;
end;
procedure TJvgReportEditorForm.Save(FileName: string);
begin
FScrollBox.HorzScrollBar.Position := 0;
FScrollBox.VertScrollBar.Position := 0;
Component.SaveToFile(FileName);
end;
procedure TJvgReportEditorForm.OpenClick(Sender: TObject);
begin
OpenDialog1.InitialDir := ExtractFilePath(ParamStr(0));
if OpenDialog1.Execute then
Read(OpenDialog1.FileName, FScrollBox);
end;
procedure TJvgReportEditorForm.Save1Click(Sender: TObject);
begin
SaveDialog1.InitialDir := ExtractFilePath(ParamStr(0));
if SaveDialog1.Execute then
Save(SaveDialog1.FileName);
end;
procedure TJvgReportEditorForm.ScrollBox_MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Compon: TJvgReportItem;
R: TRect;
Pt: TPoint;
begin
if ssCtrl in Shift then
begin
FSelectionRect := Rect(0, 0, 0, 0);
FSelPt.X := X - FScrollBox.HorzScrollBar.Position;
FSelPt.Y := Y - FScrollBox.VertScrollBar.Position;
FSelPt := FScrollBox.ClientToScreen(FSelPt);
FSelection := True;
end;
if B_Label.Down or B_Bevel.Down or sb_OLE.Down then
begin
Compon := Component.AddComponent;
with Compon do
begin
Left := X - FScrollBox.HorzScrollBar.Position;
Top := Y - FScrollBox.VertScrollBar.Position;
if B_Label.Down then
begin
Text := 'Label'; // do not localize
SideLeft := 0;
SideTop := 0;
SideRight := 0;
SideBottom := 0;
end;
OnMouseDown := OnMouseDown_;
OnMouseUp := OnMouseUp_;
OnMouseMove := OnMouseMove_;
OnResize := OnResize_;
ContainOLE := sb_OLE.Down;
B_Label.Down := False;
B_Bevel.Down := False;
sb_OLE.Down := False;
RemakeComponentsList;
end;
end
else
begin
R := FScrollBox.ClientRect;
Pt.X := 0;
Pt.Y := 0;
Pt := FScrollBox.ClientToScreen(Pt);
OffsetRect(R, Pt.X, Pt.Y);
ClipCursor(@R);
end;
end;
procedure TJvgReportEditorForm.ScrollBox_MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
DC: HDC;
Pt: TPoint;
begin
if not FSelection then
Exit;
DC := GetDC(HWND_DESKTOP);
DrawFocusRect(DC, FSelectionRect);
Pt.X := X - FScrollBox.HorzScrollBar.Position;
Pt.Y := Y - FScrollBox.VertScrollBar.Position;
Pt := FScrollBox.ClientToScreen(Pt);
FSelectionRect := Bounds(Min(FSelPt.X, Pt.X), Min(FSelPt.Y, Pt.Y),
Abs(FSelPt.X - Pt.X), Abs(FSelPt.Y - Pt.Y));
DrawFocusRect(DC, FSelectionRect);
ReleaseDC(HWND_DESKTOP, DC);
end;
procedure TJvgReportEditorForm.ScrollBox_MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
DC: HDC;
R: TRect;
I: Integer;
begin
if FSelection then
begin
DC := GetDC(HWND_DESKTOP);
DrawFocusRect(DC, FSelectionRect);
ReleaseDC(HWND_DESKTOP, DC);
FSelection := False;
//...select all in rect
with Component.ParentWnd do
for I := 0 to ControlCount - 1 do
if Controls[I] is TJvgReportItem then
with TJvgReportItem(Controls[I]) do
begin
R := ClientRect;
OffsetRect(R, ClientOrigin.X, ClientOrigin.Y);
Selected := IntersectRect(R, R, FSelectionRect);
end;
end;
R := Rect(0, 0, Screen.Width, Screen.Height);
ClipCursor(@R);
end;
procedure TJvgReportEditorForm.FormCreate(Sender: TObject);
var
R: TRect;
begin
VRuler := TJvgRuler.Create(Self);
HRuler := TJvgRuler.Create(Self);
with HRuler do
begin
Parent := P_HRuler;
Orientation := goHorizontal;
Left := 17;
Top := 0;
Width := 550;
Height := 16;
end;
with VRuler do
begin
Parent := P_VRuler;
Left := 1;
Top := 0;
Width := 15;
Height := 231;
Orientation := goVertical;
end;
R := Rect(0, 0, Screen.Width, Screen.Height);
ClipCursor(@R);
FScrollBox := TJvgReportScrollBox.Create(Self);
FScrollBox.Align := alClient;
// FScrollBox.Color := clWhite;
ShapeSize.Parent := FScrollBox;
FScrollBox.OnDraw := OnDrawScrollBox;
FScrollBox.Parent := P_Main;
FScrollBox.Tag := 1; //...1 - draw report controls with dot bevel
FScrollBox.OnMouseDown := ScrollBox_MouseDown;
// FScrollBox.VertScrollBar.Tracking := True;
// FScrollBox.HorzScrollBar.Tracking := True;
ShapeSize.Parent := FScrollBox;
ShapeSize.Left := 0;
ShapeSize.Top := 0;
// LaccReport := TJvgReport.Create;
FGrid.X := 8;
FGrid.Y := 8;
FStep.X := 1;
FStep.Y := 1;
{ HRuler := TJvgRuler.Create(Self);
HRuler.Orientation := goHorizontal;
HRuler.Parent := P_HRuler;
HRuler.Top := 0;
HRuler.Height := P_HRuler.Height;
VRuler := TJvgRuler.Create(Self);
VRuler.Orientation := goVertical;
VRuler.Parent := P_VRuler;
VRuler.Top := 0;
VRuler.Width := P_VRuler.Width;}
end;
procedure TJvgReportEditorForm.Edit1Change(Sender: TObject);
begin
Memo1.Text := TMemo(Sender).Text;
if Assigned(FSelectedControl) then
FSelectedControl.Text := TMemo(Sender).Text;
end;
procedure TJvgReportEditorForm.Memo1Change(Sender: TObject);
begin
Edit1.Text := TMemo(Sender).Text;
if Assigned(FSelectedControl) then
FSelectedControl.Text := TMemo(Sender).Text;
end;
procedure TJvgReportEditorForm.SB_LeftClick(Sender: TObject);
begin
if Assigned(FSelectedControl) then
with FSelectedControl do
case TControl(Sender).Tag of
1:
SideLeft := 1 - SideLeft;
2:
SideRight := 1 - SideRight;
3:
SideTop := 1 - SideTop;
4:
SideBottom := 1 - SideBottom;
5:
begin
SideLeft := 0;
SideTop := 0;
SideRight := 0;
SideBottom := 0;
SB_Left.Down := False;
SB_Top.Down := False;
SB_Right.Down := False;
SB_Bottom.Down := False;
end;
else
begin
SideLeft := 1;
SideTop := 1;
SideRight := 1;
SideBottom := 1;
SB_Left.Down := True;
SB_Top.Down := True;
SB_Right.Down := True;
SB_Bottom.Down := True;
end;
end;
end;
procedure TJvgReportEditorForm.FontComboBox1Change(Sender: TObject);
begin
// (rom) following two lines disabled
//if not Assigned(FSelectedControl) then
// Exit;
//-----! FSelectedControl.FName := TFontComboBox(Sender).FontName;
end;
procedure TJvgReportEditorForm.ColorComboBox1Change(Sender: TObject);
begin
// (rom) following two lines disabled
//if not Assigned(FSelectedControl) then
// Exit;
//-----! FSelectedControl.FColor := TColorComboBox(Sender).ColorValue;
end;
procedure TJvgReportEditorForm.FormShow(Sender: TObject);
begin
Component.OwnerWnd := Self;
Component.ParentWnd := FScrollBox;
if Component.FReportList.Count > 0 then
Component.CreateReport(FScrollBox, True);
// Randomize;
UpdatePageSize;
AssignEventsToAllComponents;
RemakeComponentsList;
// ShapeSize.Width := Printer.PageWidth; //f_PrintReport.CBReport1.Width;
// ShapeSize.Height := Printer.PageHeight; //f_PrintReport.CBReport1.Height;
end;
procedure TJvgReportEditorForm.sb_BookClick(Sender: TObject);
begin
{ if TControl(Sender).Tag = 1 then
f_PrintReport.CBReport1.Orientation := f_PrintReport.PrintWin1.Orientation
else f_PrintReport.CBReport1.Orientation := f_PrintReport.PrintWin2.Orientation;}
if TControl(Sender).Tag = 1 then
Printer.Orientation := poPortrait
else
Printer.Orientation := poLandscape;
UpdatePageSize;
end;
procedure TJvgReportEditorForm.N1Click(Sender: TObject);
begin
FScrollBox.RemoveControl(FSelectedControl);
FScrollBox.InsertControl(FSelectedControl);
end;
procedure TJvgReportEditorForm.sb_FontBoldClick(Sender: TObject);
begin
if Assigned(FSelectedControl) then
with FSelectedControl do
case TControl(Sender).Tag of
1:
FStyle := FStyle xor 1;
2:
FStyle := FStyle xor 2;
3:
FStyle := FStyle xor 4;
end;
end;
procedure TJvgReportEditorForm.sb_AlignLClick(Sender: TObject);
begin
if Assigned(FSelectedControl) then
FSelectedControl.Alignment := TControl(Sender).Tag;
end;
procedure TJvgReportEditorForm.sbFontColorClick(Sender: TObject);
var
I: Integer;
begin
if not Assigned(FSelectedControl) then
Exit;
with ColorDialog1 do
begin
case TControl(Sender).Tag of
0:
Color := FSelectedControl.FColor;
1:
Color := FSelectedControl.BkColor;
else
Color := FSelectedControl.BvColor;
end;
if Execute then
for I := 0 to FScrollBox.ControlCount - 1 do
if FScrollBox.Controls[I] is TJvgReportItem then
with TJvgReportItem(FScrollBox.Controls[I]) do
if TJvgReportItem(FScrollBox.Controls[I]).Selected then
case TControl(Sender).Tag of
0:
TJvgReportItem(FScrollBox.Controls[I]).FColor := Color;
1:
TJvgReportItem(FScrollBox.Controls[I]).BkColor := Color;
else
TJvgReportItem(FScrollBox.Controls[I]).BvColor := Color;
end;
end;
end;
procedure TJvgReportEditorForm.N_DeleteObjectClick(Sender: TObject);
begin
if Assigned(FSelectedControl) then
begin
if Windows.MessageBox(0, PChar(RsDeleteObject), PChar(RsConfirm), MB_OKCANCEL) <> IDOK then
Exit;
if FSelectedControl.ContainOLE then
FScrollBox.RemoveControl(FSelectedControl.OLEContainer);
FScrollBox.RemoveControl(FSelectedControl);
FSelectedControl.Free;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -