2019-08-30 15:44:10 +00:00
|
|
|
{ How to add a new design control type to the demo (example: add a TEdit):
|
|
|
|
|
|
|
|
- In the Initialization section register the new class. Add the line
|
|
|
|
"RegisterClass(TEdit);"
|
|
|
|
- Add the palette icon of the new class to the ImageList of the demo. You
|
|
|
|
can find the palette icons of the LCL components in the folder
|
|
|
|
"images/components" of your Lazarus installation. Select the one without
|
|
|
|
size appending, e.g. "tedit.png" (not "tedit_150.png") - this demo does
|
|
|
|
not support the LCL multi-size image list.
|
|
|
|
- Add a new button to the toolbar. Set its ImageIndex to the index of the
|
|
|
|
correspondig icon in the image list. Each tool button has a Tag property.
|
|
|
|
Set the Tag of the new button to the next value - look at the other buttons
|
|
|
|
to see their Tag values.
|
|
|
|
- Assign the handler "PaletteButtonClick" to the new button.
|
|
|
|
- Go to "TMainForm.PaletteButtonClick" and add the name of the new class to
|
|
|
|
the array "oClasses". Don't forget to increment the upper array index.
|
|
|
|
Note that the array index is equal to the Tag of the corresponding
|
|
|
|
button.
|
|
|
|
}
|
|
|
|
|
2017-12-20 10:13:28 +00:00
|
|
|
unit main;
|
|
|
|
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
uses
|
|
|
|
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
|
|
|
|
Menus, StdCtrls, ExtCtrls, JvDesignSurface, JvDesignUtils;
|
|
|
|
|
|
|
|
type
|
|
|
|
|
|
|
|
{ TMainForm }
|
|
|
|
|
|
|
|
TMainForm = class(TForm)
|
|
|
|
Active1: TMenuItem;
|
|
|
|
ButtonButton: TToolButton;
|
|
|
|
csDesigning1: TMenuItem;
|
|
|
|
DelphiSelector1: TMenuItem;
|
|
|
|
File1: TMenuItem;
|
|
|
|
Grid1: TMenuItem;
|
|
|
|
ImageButton: TToolButton;
|
|
|
|
ImageList1: TImageList;
|
|
|
|
JvDesignPanel: TJvDesignPanel;
|
|
|
|
LabelButton: TToolButton;
|
|
|
|
MainMenu1: TMainMenu;
|
|
|
|
N1: TMenuItem;
|
|
|
|
N2: TMenuItem;
|
|
|
|
N3: TMenuItem;
|
|
|
|
N4: TMenuItem;
|
|
|
|
New1: TMenuItem;
|
|
|
|
Open1: TMenuItem;
|
|
|
|
OpenDialog: TOpenDialog;
|
|
|
|
PanelButton: TToolButton;
|
|
|
|
Rules1: TMenuItem;
|
|
|
|
Save1: TMenuItem;
|
|
|
|
SaveDialog: TSaveDialog;
|
|
|
|
SelectButton: TToolButton;
|
|
|
|
ToolBar1: TToolBar;
|
|
|
|
VSSelector1: TMenuItem;
|
|
|
|
WindowProcHook1: TMenuItem;
|
|
|
|
procedure Active1Click(Sender: TObject);
|
|
|
|
procedure csDesigning1Click(Sender: TObject);
|
|
|
|
procedure FormCreate(Sender: TObject);
|
|
|
|
procedure Grid1Click(Sender: TObject);
|
|
|
|
procedure New1Click(Sender: TObject);
|
|
|
|
procedure Open1Click(Sender: TObject);
|
|
|
|
procedure Rules1Click(Sender: TObject);
|
|
|
|
procedure Save1Click(Sender: TObject);
|
|
|
|
procedure JvDesignPanelGetAddClass(Sender: TObject; var ioClass: String);
|
|
|
|
procedure JvDesignPanelPaint(Sender: TObject);
|
|
|
|
procedure PaletteButtonClick(Sender: TObject);
|
|
|
|
|
|
|
|
private
|
|
|
|
{ private declarations }
|
|
|
|
public
|
|
|
|
{ public declarations }
|
|
|
|
DesignClass: string;
|
|
|
|
StickyClass: Boolean;
|
|
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
var
|
|
|
|
MainForm: TMainForm;
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
|
|
|
uses
|
|
|
|
JvDesignImp;
|
|
|
|
{$R *.lfm}
|
|
|
|
|
|
|
|
{ TMainForm }
|
|
|
|
|
|
|
|
procedure TMainForm.New1Click(Sender: TObject);
|
|
|
|
begin
|
2019-06-01 21:56:54 +00:00
|
|
|
JvDesignPanel.Clear;
|
2017-12-20 10:13:28 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.Grid1Click(Sender: TObject);
|
|
|
|
begin
|
2019-06-01 21:56:54 +00:00
|
|
|
//
|
2017-12-20 10:13:28 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.csDesigning1Click(Sender: TObject);
|
|
|
|
begin
|
2019-06-01 21:56:54 +00:00
|
|
|
JvDesignPanel.Active := false;
|
2017-12-20 10:13:28 +00:00
|
|
|
if WindowProcHook1.Checked then
|
|
|
|
JvDesignPanel.Surface.MessengerClass := TJvDesignWinControlHookMessenger
|
|
|
|
else
|
|
|
|
JvDesignPanel.Surface.MessengerClass := TJvDesignDesignerMessenger;
|
|
|
|
JvDesignPanel.Active := true;
|
|
|
|
JvDesignPanel.Invalidate;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.FormCreate(Sender: TObject);
|
|
|
|
begin
|
2019-06-01 21:56:54 +00:00
|
|
|
// OpenDialog.InitialDir := ExtractFilePath(Application.ExeName);
|
|
|
|
OpenDialog.InitialDir := '../../../examples/JvDesigner/';
|
2017-12-20 10:13:28 +00:00
|
|
|
SaveDialog.InitialDir := OpenDialog.InitialDir;
|
|
|
|
JvDesignPanel.Surface.Active := true;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.Active1Click(Sender: TObject);
|
|
|
|
begin
|
2019-06-01 21:56:54 +00:00
|
|
|
JvDesignPanel.Active := Active1.Checked;
|
2017-12-20 10:13:28 +00:00
|
|
|
JvDesignPanel.Invalidate;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.Open1Click(Sender: TObject);
|
|
|
|
begin
|
2019-06-01 21:56:54 +00:00
|
|
|
if OpenDialog.Execute then
|
2017-12-20 10:13:28 +00:00
|
|
|
JvDesignPanel.LoadFromFile(OpenDialog.Filename);
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.Rules1Click(Sender: TObject);
|
|
|
|
begin
|
2019-06-01 21:56:54 +00:00
|
|
|
if Rules1.Checked then
|
2017-12-20 10:13:28 +00:00
|
|
|
begin
|
|
|
|
JvDesignPanel.Color := clWhite;
|
|
|
|
JvDesignPanel.DrawRules := true;
|
|
|
|
JvDesignPanel.OnPaint := nil;
|
|
|
|
end else
|
|
|
|
begin
|
|
|
|
JvDesignPanel.Color := clBtnFace;
|
|
|
|
JvDesignPanel.DrawRules := false;
|
|
|
|
JvDesignPanel.OnPaint := @JvDesignPanelPaint;
|
|
|
|
end;
|
|
|
|
JvDesignPanel.Invalidate;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.Save1Click(Sender: TObject);
|
|
|
|
begin
|
2019-06-01 21:56:54 +00:00
|
|
|
if SaveDialog.Execute then
|
2017-12-20 10:13:28 +00:00
|
|
|
JvDesignPanel.SaveToFile(SaveDialog.Filename);
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.JvDesignPanelGetAddClass(Sender: TObject;
|
|
|
|
var ioClass: String);
|
|
|
|
begin
|
|
|
|
ioClass := DesignClass;
|
|
|
|
if not StickyClass then
|
|
|
|
begin
|
2019-08-30 15:44:10 +00:00
|
|
|
DesignClass := '';
|
2017-12-20 10:13:28 +00:00
|
|
|
SelectButton.Down := true;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.JvDesignPanelPaint(Sender: TObject);
|
|
|
|
begin
|
|
|
|
with JvDesignPanel do
|
2019-06-01 21:56:54 +00:00
|
|
|
DesignPaintGrid(Canvas, ClientRect, Color);
|
2017-12-20 10:13:28 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.PaletteButtonClick(Sender: TObject);
|
|
|
|
const
|
|
|
|
cClasses: array[0..4] of string = ( '', 'TButton', 'TLabel', 'TPanel',
|
2019-08-30 15:44:10 +00:00
|
|
|
'TImage');
|
2017-12-20 10:13:28 +00:00
|
|
|
begin
|
|
|
|
// StickyClass := (GetKeyState(VK_SHIFT) < 0);
|
2019-06-01 21:56:54 +00:00
|
|
|
StickyClass := False;
|
2017-12-20 10:13:28 +00:00
|
|
|
DesignClass := cClasses[TControl(Sender).Tag];
|
|
|
|
end;
|
|
|
|
|
|
|
|
initialization
|
|
|
|
RegisterClass(TButton);
|
|
|
|
RegisterClass(TLabel);
|
|
|
|
RegisterClass(TPanel);
|
|
|
|
RegisterClass(TImage);
|
|
|
|
end.
|
|
|
|
|