DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: liy187
今日帖子: 0
在线用户: 1
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 wuxi15 (似水·流年) ▲▲▲▲▲ -
普通会员
2021/6/27 2:18:43
标题:
有没有人研究过用Delphi做一个com,然后传一个窗口嵌入用友里 浏览:1989
加入我的收藏
楼主: 各位Delphi老哥老姐们,有没有哪一个做过用友的嵌入式窗口,用Delphi做的。目前 块一般用两种方式,一个是c#的类库,这个Delphi肯定是不可以的。还有一种就是用vb的DLL,用的就是com.有没有哪位用Delphi生成的Com,然后把窗口成功传给用友,放进他的page里的
----------------------------------------------
-
作者:
男 wuxi15 (似水·流年) ▲▲▲▲▲ -
普通会员
2021/6/27 2:25:11
1楼: 这里说明一下,很多人劝我说用c#吧。是的,用C#资料又多,又有人可以讨论。但是现在是扛上了。也许以后我会用c#做用友方面的东西,但是,我还是会纠结用Delphi如何实现这个功能,可以认为是对技术的执着吧
----------------------------------------------
-
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2021/6/27 7:05:12
2楼: 不懂用友,但是个人认为:凡是C#或者VB能做到的,Delphi肯定也能做到!!
----------------------------------------------
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2021/6/27 13:18:26
3楼: 我有一些C#的程序,引用的就是Delphi的Com。delphi的COM还是挺方便的。我觉得只要是标准的COM肯定没问题。我觉得你可以先用C#包装了delphi的Com窗口。然后再把C#的类库传给用友,哈哈。
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2021/6/27 16:19:50
4楼: 思路完全对头,DELPHI的确可以干这个,具体的文档资料在这里:
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Developing_COM_Applications
----------------------------------------------
-
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2021/6/27 23:25:08
5楼: 没给用友做过,用COM做窗口内嵌到其他窗口就做的多了
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 wuxi15 (似水·流年) ▲▲▲▲▲ -
普通会员
2021/6/28 0:45:51
6楼: 是的,他是做的Com,Delphi了可以Com,所以理论上应该没有问题了。但是现在我把对象过去后,他没有放在Page里,所以我就怀疑是不是用友取得这个窗口后,会调用VB里的Form对象己实现的某个方法,而这个方法名Delphi并没有。这些都是没有资料的。没有深入搞过用友的估计也不会了解。但是我见到有人用Delphi搞过用友,但是这些人很少出现。
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2021/6/28 9:43:24
7楼: 你找一个别人弄好的能嵌入的,将它的接口提取出来,自己再封装实现以下不就可以了
----------------------------------------------
-
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2021/6/28 10:45:42
8楼: 我觉得之所以没能嵌进去是因为你对和用友的使用方式没用对。
COM这块跟语言无关,可能是你某个接口没实现。
也可能用友类似Office的COM Addon,创建的COM接口要注册,然后由宿主把COM对象的UI部分内嵌进来。

要看用友的接口文档或者咨询他们的服务人员
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 shuaialang (lenog) ★☆☆☆☆ -
普通会员
2021/6/29 11:08:36
9楼: 我做过。C#写容器,delphi写程序,嵌入进去。
----------------------------------------------
-
作者:
男 shuaialang (lenog) ★☆☆☆☆ -
普通会员
2021/6/29 11:10:42
10楼:  private const int HWND_TOP = 0x0;
        private const int WM_COMMAND = 0x0112;
        private const int WM_QT_PAINT = 0xC2DC;
        private const int WM_PAINT = 0x000F;
        private const int WM_SIZE = 0x0005;
        private const int SWP_FRAMECHANGED = 0x0020;
        public int a;
        Process p = new Process();

        public UserControl1()
        {
          InitializeComponent();
        }

        private void UserControl1_Load(object sender, EventArgs e)
        { 
         
         
          button1_Click(sender, e);

        }

        
        private void ResizeControl()
        {
          SendMessage(p.MainWindowHandle, WM_COMMAND, WM_PAINT, 0);
          PostMessage(p.MainWindowHandle, WM_QT_PAINT, 0, 0);

          SetWindowPos(
          p.MainWindowHandle,
          HWND_TOP,
          0 - 5,//设置偏移量,把原来窗口的菜单遮住
          0 - 41,
          (int)this.Width,
          (int)this.Height + 36,
          SWP_FRAMECHANGED);
          SendMessage(p.MainWindowHandle, WM_COMMAND, WM_SIZE, 0);
        }

      

        private void button1_Click(object sender, EventArgs e)
        {
          
        

          p.StartInfo.FileName = @Application.StartupPath.ToString() + "\\UAP\\Runtime\\DEV_ZYZDS.exe";
          p.StartInfo.Arguments = GlobalParameters.gLoginable.LoginObject.GetLoginInfo().UserName.ToString() + " " + "\"" + GlobalParameters.gLoginable.LoginObject.GetLoginInfo().ConnString.ToString().Substring(18) + "\"";
          p.Start();
          timer1.Enabled = true;
          
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
          a = a + 1;
          IntPtr hWnd = FindWindow(null, "DEV_ZYZDS");
          if (hWnd.ToInt64()!=0)
          {
          
          }
          SetParent(hWnd, this.Handle);
          
        }
----------------------------------------------
-
作者:
男 shuaialang (lenog) ★☆☆☆☆ -
普通会员
2021/6/29 11:11:24
11楼: 菜单名: 中英繁都需要 ---XXXXXXXXX
DLL 类名:CQS.NetToMenu.MyLoginable
文件复制路径U8安装目录
DLL路径:.\UAP\Runtime\DEV_ZYZDS.dll
----------------------------------------------
-
作者:
男 delphisyy (小苏) ▲▲▲▲▲ -
普通会员
2021/6/29 14:45:51
12楼: 直接用ActiveXFrom 就完事了,可以直接显示的,网页上都能用
----------------------------------------------
-
作者:
男 wuxi15 (似水·流年) ▲▲▲▲▲ -
普通会员
2021/6/29 20:29:52
13楼: @shuaialang 有没有试过不要用c#作为器的。当然,用vb或者c#作为容器也是一个方法
----------------------------------------------
-
作者:
男 wuxi15 (似水·流年) ▲▲▲▲▲ -
普通会员
2021/9/4 21:01:30
14楼: 手头的活忙完了,又回来折腾这个东西了。试了N种方法,还是不行,找到了vb相关的说明,
https://wenku.baidu.com/view/63f9f0a8951ea76e58fafab069dc5022aaea4601.html
----------------------------------------------
-
作者:
男 wuxi15 (似水·流年) ▲▲▲▲▲ -
普通会员
2021/9/8 22:15:15
15楼: 路过的大神,帮我看看他vb的这个我用Delphi如何弄
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行68.35938毫秒 RSS