expertcad/POWERCAD30/UNITS/PCFillDlg.pas
2025-05-12 10:07:51 +03:00

128 lines
3.2 KiB
ObjectPascal

unit PCFillDlg;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
FillForm,DlgBase,PCTypesUtils,DrawObjects,Powercad;
type
TPCFillDlg = class(TDlgBase)
private
{ Private declarations }
Syncing: Boolean;
Dial : TfrmFill;
Procedure Apply(Sender:TObject);
Function GetVisible:boolean;
protected
{ Protected declarations }
Procedure SetControl(value: TPowerCad);override;
public
{ Public declarations }
constructor create(Aowner: TComponent);override;
procedure show;override;
Procedure SyncronizeContext;
Procedure Syncronize;override;
Procedure Locate(px,py:Integer);override;
published
{ Published declarations }
Property CadControl;
Property Visible: Boolean read GetVisible;
end;
procedure EventBack(Client:TObject; EventId: Integer;
NumVal:Integer; Strval:String; DblVal:Double;Enabled:Boolean);stdcall;
implementation
{$R *.DCR}
uses PCDrawing;
constructor TPCFillDlg.create(Aowner: TComponent);
begin
inherited create(Aowner);
dial := TfrmFill.create(self);
OnApply := Apply;
DlgName := 'Fill Dialog';
Syncing := False;
end;
Procedure TPCFillDlg.SyncronizeContext;
var a: integer;
Info : TLayerInfo;
Count : Integer;
Figure: TFigure;
Begin
if syncing then exit;
Syncing := True;
If assigned(CadControl) then Dial.SetControl(CadControl);
If assigned(CadControl) and (CadControl.Selection.Count > 0) then
begin
Figure := TFigure(CadControl.Selection[0]);
if Figure.RegHandle <> 0 then begin
Dial.SelFigure := Figure;
Dial.Sync;
end;
end;
Syncing := False;
end;
Procedure TPCFillDlg.Show;
begin
SyncronizeContext;
dial.show;
if CadControl = nil then begin
ShowMessage('The Fill Dialog is not related with any Powercad control!');
end;
end;
Procedure TPCFillDlg.Locate(px,py:Integer);
begin
Dial.Left := px;
Dial.Top := py;
end;
Function TPCFillDlg.GetVisible: Boolean;
begin
Result := Dial.Visible;
end;
Procedure TPCFillDlg.Syncronize;
begin
If Dial.Visible then SyncronizeContext;
end;
procedure TPCFillDlg.Apply(Sender: TObject);
begin
if CadControl <> nil then begin
if dial.FillType = fsHatch then begin
CadControl.SetSelectionHatch(Dial.HatchStyle,Dial.ForeColor,Dial.BackColor,Dial.FillSize);
end else if dial.FillType = fsGradient then begin
CadControl.SetSelectionGradient(Dial.GradStyle,Dial.ForeColor,Dial.BackColor);
end else if dial.FillType = fsTexture then begin
CadControl.SetSelectionTexture(Dial.TextureStyle,Dial.TextureSize);
end;
SyncronizeContext;
end else begin
ShowMessage('The Fill Dialog is not related with any Powercad control!');
end;
end;
procedure TPCFillDlg.SetControl(value: TPowerCad);
begin
inherited;
if assigned(Value) then begin
Value.RegisterEvent(cBrushStyle,Self,EventBack);
end;
end;
procedure EventBack(Client:TObject; EventId: Integer;
NumVal:Integer; Strval:String; DblVal:Double;Enabled:Boolean);stdcall;
begin
TPCFillDlg(Client).SyncronizeContext;
end;
end.