如何把计算器完全嵌入到DELPHI界面内

如何把计算器完全嵌入到DELPHI界面内,第1张

以下是网络上编写的代码供参考:

unit frmTestEmbedApp

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls

type

  TForm1 = class(TForm)

    pnlApp: TPanel

    procedure FormCreate(Sender: TObject)

    procedure FormClose(Sender: TObject var Action: TCloseAction)

    procedure FormResize(Sender: TObject)

  private

    { Private declarations }

  public    {Public declarations }

 升哪槐 end

var

  Form1: TForm1

  hWin: HWND = 0

implementation

{$R *.dfm}

type

  // 存储窗体信息

  PProcessWindow = ^TProcessWindow

  TProcessWindow = record

    ProcessID: Cardinal

    FoundWindow: hWnd

  end

// 窗体枚举函数

function EnumWindowsProc(Wnd: HWND ProcWndInfo: PProcessWindow): BOOL stdcall

var

  WndProcessID: Cardinal

begin

  GetWindowThreadProcessId(Wnd, @WndProcessID)

  if WndProcessID = ProcWndInfo^.ProcessID then

  begin

    ProcWndInfo^.FoundWindow := Wnd

    Result := False     //已找到,故停止 EnumWindows

  end

  else

    Result := True    //继续查找

end

//由 ProcessID 查找窗体 Handle

function GetProcessWindow(ProcessID: Cardinal):HWND

var

  ProcWndInfo: TProcessWindow

begin

  ProcWndInfo.ProcessID := ProcessID

  ProcWndInfo.FoundWindow := 0

  EnumWindows(@EnumWindowsProc, Integer(@ProcWndInfo)) // 查找窗体

  Result := ProcWndInfo.FoundWindow

end

// 在 Panel 上内嵌运行程序

function RunAppInPanel(const AppFileName: string ParentHandle: HWND var WinHandle:

 HWND): Boolean

var

  si: STARTUPINFO

  pi: TProcessInformation

begin

  Result := False

  // 启动进程

  FillChar(si, SizeOf(si), 0)

  si.cb := SizeOf(si)

  si.wShowWindow := SW_SHOW

  if not CreateProcess(nil, PChar(AppFileName), nil, nil, true,

    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi) then Exit

  // 等缓空待进吵友程启动

  WaitForInputIdle(pi.hProcess, 10000)

  // 取得进程的 Handle

  WinHandle := GetProcessWindow(pi.dwProcessID)

  if WinHandle > 0 then begin

    // 设定父窗体

    Windows.SetParent(WinHandle, ParentHandle)

    // 设定窗体位置

    SetWindowPos(WinHandle, 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOZORDER)

    // 去掉标题栏

    SetWindowLong(WinHandle, GWL_STYLE, GetWindowLong(WinHandle, GWL_STYLE)

      and (not WS_CAPTION) and (not WS_BORDER) and (not WS_THICKFRAME))

    Result := True

  end

  // 释放 Handle

  CloseHandle(pi.hProcess)

  CloseHandle(pi.hThread)

end

procedure TForm1.FormClose(Sender: TObject var Action: TCloseAction)

begin

  // 退出时向内嵌程序发关闭消息

  if hWin > 0 then PostMessage(hWin, WM_CLOSE, 0, 0)

end

procedure TForm1.FormCreate(Sender: TObject)

const

  App = 'calc.exe'

begin

  pnlApp.Align := alClient

  // 启动内嵌程序

  if not RunAppInPanel(App, pnlApp.Handle, hWin) then

    ShowMessage('App not found')

end

procedure TForm1.FormResize(Sender: TObject)

begin

  // 保持内嵌程序充满 pnlApp

  if hWin <> 0 then

    MoveWindow(hWin, 0, 0, pnlApp.ClientWidth, pnlApp.ClientHeight, True)

end

end.

//请自己根据需要修改

procedure AddLink

var

 tmpObject : IUnknown

 tmpSLink : IShellLink

 tmpPFile : IPersistFile

 PIDL : PItemIDList

 StartupDirectory : array[0..MAX_PATH] of Char

 LinkFilename : WideString

 linkshortname:string

begin

 tmpObject := CreateComObject(CLSID_ShellLink)//创建建卜备立快捷方式的外壳扩展

 tmpSLink := tmpObject as IShellLink//取得接口

 tmpPFile := tmpObject as IPersistFile//用来储存*.lnk文件的接口

 tmpSLink.SetPath(pChar(ExtractFilePath(application.exename)+ExtractFileName(Application.ExeName)))

//设定nFolder所在路径

 tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(application.exename)))//设定简弊森工作目录

 SHGetSpecialFolderLocation(0,CSIDL_DESKTOPDIRECTORY,PIDL) //获得桌面的Itemidlist

 SHGetPathFromIDList(PIDL,StartupDirectory)//获得桌面路径

 //linkshortname:=Copy(ExtractFileName(Application.ExeName),0,Length(ExtractFileName(Application.ExeName))-4)

 linkshortname:='2017居民医保登记'  

 LinkFilename 拦亩:= string(StartupDirectory)+'\'+linkshortname+'.lnk'

 tmpPFile.Save(pWChar(LinkFilename),FALSE)

//保存*.lnk文件

//showmessage('已经成功添加快捷方式'''+linkshortname+'.lnk''!')

 end

你是想要像Win98滚动文字的屏幕保护那种意思的吗

如果是 那用Word2000就可以

运行Word2000,新建一空白Web文档,然后点击视图|工具栏|Web工具箱,就会出现Web工具箱,最后一个图标就是滚动文字框的图标,单击该图标,就会出现滚动文字对话框,在"请在此键入滚动文字"下面空白框内输入你所想好的文字(你输入的文字将最终亮困显示在屏幕上),然后选择滚动文字的滚动方式、背景颜色、滚敬陆念动方向、滚动次数及滚动速度,经过一番 *** 作之后,你可以在最下面的预览框里很直观地看到你所设置的效果。一切OK后退出滚动文字对话框。

再对文字进行格式化(因为Word2000对滚动文字的设置默认为三号仿宋自动颜色),选中插入滚动文字框的当前行,然后对当前行文字的大小、颜色、修饰等进行格式化,滚动文字框内的文字就会跟你所设置的颜色、大小、修饰等一样,立即在页面上显示出来。

然后设置页面背景了,单击格式|背景,在背景工具栏里有填充、颜色和水印三种效果,依个人喜爱而进行选择。本人在填充效果里面发现有一项是填充图片,可以插入自己喜爱的图片作为背景(这个背景也就是最后直接显示在桌在上的墙纸背景)。完成这一步后就是存盘了(注意文件要存为Web 页),悉闹单击文件另存为C盘(假设你的Windows装在C盘下面)WindowsWebwallpaper目录下面,(桌面墙纸存放在这个目录下面)存盘后,退出Word2000。右键单击桌面,点击属性,在背景对话框内,在"选择Html文档或图片"下面你是不是看到了你刚才所编辑的Html文档的名称,单击它,然后确定。桌面上就会显示出你设置的Html文档的墙纸,看到滚动文字了吧?如果你对你所设置的颜色、滚动方式等不满意,你可以重新打开这篇文档进行编辑,直到自己满意为止。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12401753.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存