📄 game.pas
字号:
unit Game;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, WPRTEDefs, WPRTEPaint, WPCTRMemo,
WPCTRRich, WPObj_Image, GIFImage;
type
TWPImageGame = class(TForm)
WPRichText1: TWPRichText;
Panel1: TPanel;
Button1: TButton;
MoveObject: TCheckBox;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
bImageDeleted,bRunning : Boolean;
procedure DoDestroyImage(Sender : TObject);
public
end;
var
WPImageGame: TWPImageGame;
implementation
{$R *.dfm}
procedure TWPImageGame.Button1Click(Sender: TObject);
var i: Integer;
begin
WPRichText1.BeginUpdate;
WPRichText1.Clear;
WPRichText1.WordWrap := TRUE;
WPRichText1.LayoutMode := wplayNormal;
WPRichText1.CurrAttr.Alignment := paralBlock;
for i := 1 to 400 do
begin
WPRichText1.CurrAttr.Color := Random(15) + 1;
WPRichText1.CurrAttr.AddStyle([afsItalic]);
WPRichText1.InputString('WP');
WPRichText1.CurrAttr.DeleteStyle([afsItalic]);
WPRichText1.InputString(' Tools 5 ');
end;
WPRichText1.EndUpdate;
if MoveObject.Checked then
Button2Click(nil);
end;
procedure TWPImageGame.DoDestroyImage(Sender : TObject);
begin
bImageDeleted := TRUE;
end;
procedure TWPImageGame.Button2Click(Sender: TObject);
var i, w, h, x, y, run: Integer;
TxtObj: TWPTextObj;
begin
if bRunning then exit;
WPRichText1.CPPosition := 0;
TxtObj := WPRichText1.TextObjects.Insert(Image1.Picture.Graphic, 1440, 1440);
if TxtObj <> nil then
try
bRunning := TRUE;
TxtObj.Mode := [wpobjRelativeToParagraph];
TxtObj.Wrap := wpwrBoth;
TxtObj.OnDestroy := DoDestroyImage;
bImageDeleted := FALSE;
Randomize;
x := Random(50) + 20;
y := Random(50) + 20;
run := 0;
while MoveObject.Checked and not bImageDeleted do
begin
w := MulDiv(WPRichText1.Width, 1440, Screen.PixelsPerInch);
h := MulDiv(WPRichText1.Height, 1440, Screen.PixelsPerInch);
TxtObj.Width := 1440 - 300 + (run mod 600);
TxtObj.Height := 1440 - 300 + (run mod 600);
if (TxtObj.RelX + x + TxtObj.Width > w) or
(TxtObj.RelX + x < 0) then
x := Round((10 + Random(50)) * (-(Abs(x) / x)));
if (TxtObj.RelY + y + TxtObj.Height > h) or
(TxtObj.RelY + y < 0) then
y := Round((10 + Random(50)) * (-(Abs(y) / y)));
TxtObj.RelX := TxtObj.RelX + x;
TxtObj.RelY := TxtObj.RelY + y;
WPRichText1.ReformatAll;
WPRichText1.Repaint;
inc(run, 50);
Application.ProcessMessages;
// Maybe the object was deleted ? --> DoDestroyImage
end;
finally
if not bImageDeleted then
begin
TxtObj.Free;
WPRichText1.ReformatAll;
WPRichText1.Repaint;
end;
bRunning := FALSE;
end;
end;
procedure TWPImageGame.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
MoveObject.Checked := FALSE;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -