📄 mainformunit.pas
字号:
{: This is more than a sample which demonstrates the use of the Gui system,
its an editor for combining several GUI-Component into one layout, using
the same texture for them all.<p>
The default layout image, is a modification based on Jan Horn's image in his
windows (opengl) release... <p>
Be aware that for HUD purposes mip mapping should allways be disabled as the
result might become blurred by the mipmap... Reason unknown.<br>
<b>History : </b><font size=-1><ul>
<li>19/09/02 - JAJ - Submitted to GLScene. Open/Save/Import + Edit/Preview.
</ul></font>
}
unit MainFormUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, Menus, GLMisc, GLGui, StdCtrls, GLScene, GLWin32Viewer,
GLObjects, GLHUDObjects, GLWindows, GLBitmapFont, GLWindowsFont, ExtDlgs,
GLTexture;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
Save1: TMenuItem;
Close1: TMenuItem;
N1: TMenuItem;
Import1: TMenuItem;
N2: TMenuItem;
Exit1: TMenuItem;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
GLGuiLayout1: TGLGuiLayout;
ImportDialog: TOpenDialog;
Edit1: TMenuItem;
EditLayout1: TMenuItem;
ListBox: TListBox;
ListPopup: TPopupMenu;
Add1: TMenuItem;
Remove1: TMenuItem;
Edit2: TMenuItem;
N3: TMenuItem;
GLScene1: TGLScene;
GLSceneViewer1: TGLSceneViewer;
GLCamera1: TGLCamera;
GLPanel1: TGLPanel;
WindowsBitmapFont1: TGLWindowsBitmapFont;
Image1: TMenuItem;
Load1: TMenuItem;
OpenPictureDialog: TOpenPictureDialog;
GLMaterialLibrary1: TGLMaterialLibrary;
HUDSprite1: TGLHUDSprite;
Edit3: TEdit;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
procedure Open1Click(Sender: TObject);
procedure Save1Click(Sender: TObject);
procedure Close1Click(Sender: TObject);
procedure Import1Click(Sender: TObject);
procedure EditLayout1Click(Sender: TObject);
procedure Add1Click(Sender: TObject);
procedure Remove1Click(Sender: TObject);
procedure Edit2Click(Sender: TObject);
procedure ListBoxClick(Sender: TObject);
procedure Load1Click(Sender: TObject);
procedure Edit3Change(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
private
public
Procedure UpdateLayoutList;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
with GLMaterialLibrary1.Materials[0].Material.Texture.Image do
LoadFromFile(ExtractFilePath(Application.ExeName)+'..\..\Media\DefaultSkin.bmp');
end;
procedure TForm1.Open1Click(Sender: TObject);
begin
If OpenDialog.Execute then
Begin
GLScene1.BeginUpdate;
try
GLGuiLayout1.Clear;
GLGuiLayout1.LoadFromFile(OpenDialog.FileName);
UpdateLayoutList;
finally
GLScene1.EndUpdate;
end;
End;
end;
procedure TForm1.Save1Click(Sender: TObject);
begin
if SaveDialog.Execute then
Begin
GLGuiLayout1.SaveToFile(SaveDialog.FileName);
End;
end;
procedure TForm1.Close1Click(Sender: TObject);
begin
GLScene1.BeginUpdate;
try
GLGuiLayout1.Clear;
UpdateLayoutList;
finally
GLScene1.EndUpdate;
end;
End;
procedure TForm1.Import1Click(Sender: TObject);
Var
XC : Integer;
begin
if ImportDialog.Execute then
Begin
GLScene1.BeginUpdate;
try
For XC := 0 to ImportDialog.Files.Count-1 do
Begin
try
GLGuiLayout1.LoadFromFile(ImportDialog.Files[XC]);
except
end;
End;
UpdateLayoutList;
finally
GLScene1.EndUpdate;
end;
End;
end;
procedure TForm1.EditLayout1Click(Sender: TObject);
begin
Hide;
GLScene1.BeginUpdate;
try
If ListBox.ItemIndex >= 0 then
GLGui.GUIComponentDialog((ListBox.Items.Objects[ListBox.ItemIndex] as TGLGuiComponent).Elements)
finally
GLScene1.EndUpdate;
Show;
end;
end;
Procedure TForm1.UpdateLayoutList;
var
i : Integer;
begin
ListBox.Clear;
With GLGuiLayout1.GuiComponents do for i:=0 to Count-1 do
ListBox.Items.AddObject(Items[i].Name, Items[i]);
ListBox.Selected[GLGuiLayout1.GuiComponents.Count-1] := True;
End;
procedure TForm1.Add1Click(Sender: TObject);
Var
GuiComp : TGLGuiComponent;
begin
GuiComp := GLGuiLayout1.GuiComponents.Add as TGLGuiComponent;
If ListBox.ItemIndex >= 0 then
begin
GuiComp.Name := 'Newly Added';
end else GuiComp.Name := Edit3.Text;
UpdateLayoutList;
end;
procedure TForm1.Remove1Click(Sender: TObject);
Var
S : String;
begin
If ListBox.ItemIndex >= 0 then
Begin
GLScene1.BeginUpdate;
try
GLGuiLayout1.GUIComponents.Delete(ListBox.ItemIndex);
ListBox.Items.Delete(ListBox.ItemIndex);
S := GLPanel1.GuiLayoutName;
GLPanel1.GuiLayoutName := '';
GLPanel1.GuiLayoutName := S;
finally
GLScene1.EndUpdate;
end;
End;
end;
procedure TForm1.Edit2Click(Sender: TObject);
begin
If ListBox.ItemIndex >= 0 then
GLGui.GUIComponentDialog((ListBox.Items.Objects[ListBox.ItemIndex] as TGLGuiComponent).Elements)
end;
procedure TForm1.ListBoxClick(Sender: TObject);
begin
GLScene1.BeginUpdate;
try
If ListBox.ItemIndex >= 0 then
Begin
GLPanel1.GuiLayoutName := GLGuiLayout1.GuiComponents.Items[ListBox.ItemIndex].Name;
Edit3.text := GLPanel1.GuiLayoutName;
End else
Begin
GLPanel1.GuiLayoutName := '';
Edit3.text := 'Newly Added';
End;
GLPanel1.DoChanges;
finally
GLScene1.EndUpdate;
end;
end;
procedure TForm1.Load1Click(Sender: TObject);
Var
Mat : TGLLibMaterial;
MatName : String;
begin
If OpenPictureDialog.Execute then
Begin
GLScene1.BeginUpdate;
try
MatName := ExtractFileName(OpenPictureDialog.FileName);
Mat := GLMaterialLibrary1.Materials.GetLibMaterialByName(MatName);
If not Assigned(Mat) then
Begin
GLMaterialLibrary1.AddTextureMaterial(MatName,OpenPictureDialog.FileName).Material.Texture.TextureMode := tmReplace;
End;
GLGuiLayout1.Material.LibMaterialName := MatName;
HUDSprite1.Material.LibMaterialName := MatName;
finally
GLScene1.EndUpdate;
end;
End;
end;
procedure TForm1.Edit3Change(Sender: TObject);
begin
If (ListBox.ItemIndex >= 0) then
Begin
ListBox.Items[ListBox.ItemIndex] := Edit3.Text;
GLGuiLayout1.GuiComponents.Items[ListBox.ItemIndex].Name := Edit3.Text;
End;
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Add1Click(Sender);
end;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
If Key = #13 then Add1Click(Sender);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit2Click(Sender);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -