GVKun编程网logo

Delphi:你能在DLL中有一个组件类定义,并在运行时加载并创建它吗?

17

如果您想了解Delphi:你能在DLL中有一个组件类定义,并在运行时加载并创建它吗?的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于caching–MVC4StyleBundle:你能在D

如果您想了解Delphi:你能在DLL中有一个组件类定义,并在运行时加载并创建它吗?的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于caching – MVC4 StyleBundle:你能在Debug模式下添加一个缓存清除查询字符串吗?、Delphi 2009 – 在运行时创建一个TPanel并改变其颜色、delphi TreeView – 在运行时创建节点、delphi – 你能在Windows中创建一个没有WS_POPUP样式的无边界应用程序主窗口吗?的有价值的信息。

本文目录一览:

Delphi:你能在DLL中有一个组件类定义,并在运行时加载并创建它吗?

Delphi:你能在DLL中有一个组件类定义,并在运行时加载并创建它吗?

对不起,如果这是一个愚蠢的问题,但这不是我以前必须做的事情.

是否可以在DLL中创建一个组件类,比如TPanel或TDBGrid的后代,然后在运行时将该DLL加载到另一个应用程序中,然后创建这些控件并像普通的Delphi组件一样使用它们?

如果是这样,你可以给我任何指示,看看从哪里开始这样做?

解决方法

这就是 packages的用途.它们是一种经过改进的DLL,可以很好地与Delphi类(包括组件)配合使用.

请记住,您需要在可执行文件和DLL旁边分发RTL [ver] .bpl,VCL [ver] .bpl和任何其他必需的运行时软件包.

理想情况下,您应该在从未安装过Delphi / RAD Studio的VM或系统上测试您的应用程序.这样,如果您的发行版缺少任何必需的Package文件,Execption对话框将告诉您需要包含哪些文件.

caching – MVC4 StyleBundle:你能在Debug模式下添加一个缓存清除查询字符串吗?

caching – MVC4 StyleBundle:你能在Debug模式下添加一个缓存清除查询字符串吗?

我有一个MVC应用程序,我使用StyleBundle类渲染CSS文件像这样:
bundles.Add(new StyleBundle("~/bundles/css").Include("~/Content/*.css"));

我有的问题是,在调试模式下,CSS网址单独渲染,我有一个Web代理积极缓存这些网址。在发布模式下,我知道一个查询字符串被添加到最终的URL,以使每个发布的任何缓存无效。

是否有可能配置StyleBundle在调试模式下添加一个随机查询字符串,以产生以下输出来解决缓存问题?

<link href="/stylesheet.css?random=some_random_string" rel="stylesheet"/>

解决方法

您可以创建一个自定义IBundleTransform类来做到这一点。这里有一个例子,将使用文件内容的哈希附加一个v = [filehash]参数。
public class filehashVersionBundleTransform: IBundleTransform
{
    public void Process(BundleContext context,BundleResponse response)
    {
        foreach(var file in response.Files)
        {
            using(FileStream fs = File.OpenRead(HostingEnvironment.MapPath(file.IncludedVirtualPath)))
            {
                //get hash of file contents
                byte[] filehash = new SHA256Managed().ComputeHash(fs);

                //encode file hash as a query string param
                string version = HttpServerUtility.UrlTokenEncode(filehash);
                file.IncludedVirtualPath = string.Concat(file.IncludedVirtualPath,"?v=",version);
            }                
        }
    }
}

然后,您可以通过将类添加到您的bundle的Transforms集合来注册该类。

new StyleBundle("...").Transforms.Add(new filehashVersionBundleTransform());

现在只有文件内容改变时版本号才会改变。

Delphi 2009 – 在运行时创建一个TPanel并改变其颜色

Delphi 2009 – 在运行时创建一个TPanel并改变其颜色

有一个奇怪的问题:我在运行时创建了一个TPanele并改变了它的颜色 – 然而,颜色仍然是clBtnFace.

这里的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  pnlTest : TPanel;
begin
    pnlTest := TPanel.Create(Form1);
    pnlTest.Parent := Form1;
    pnlTest.Width := 100;
    pnlTest.Height := 100;
    pnlTest.Color := clRed;
end;

有任何想法吗?谢谢!

解决方法

当您想在主题操作系统下具有彩色面板时,必须将ParentBackground设置为False.

delphi TreeView – 在运行时创建节点

delphi TreeView – 在运行时创建节点

任何人都可以告诉我如何做以下事情:

>创建节点
>启用/禁用单个节点

我想知道如何在Application运行时执行上述操作,例如在Form的OnCreate事件中.

解决方法

添加节点:
function FindRootNode(ACaption: String; ATreeView: TTreeView): TTreeNode; 
var LCount: Integer; 
begin 
  result := nil; 
  LCount := 0; 
  while (LCount < ATreeView.Items.Count) and (result = nil) do 
  begin 
    if (ATreeView.Items.Item[LCount].Text = ACaption) and (ATreeView.Items.Item[LCount].Parent = nil) then 
      result := ATreeView.Items.Item[LCount]; 
    inc(LCount); 
  end; 
end;

...

var LDestNode: TTreeNode; 
begin 
  LDestNode := FindRootNode('category',TreeView1); 
  if LDestNode <> nil then 
  begin 
    TreeView1.Items.AddChild(LDestNode,'node1'); 
    TreeView1.Items.AddChild(LDestNode,'node2'); 
  end; 
end;

(另见http://msdn.microsoft.com/en-us/library/70w4awc4.aspx)

消除节点

据我所知,没有办法禁用TreeNode.你唯一能做的就是拦截beforeSelect-event并取消那里的选择.不太好.

delphi – 你能在Windows中创建一个没有WS_POPUP样式的无边界应用程序主窗口吗?

delphi – 你能在Windows中创建一个没有WS_POPUP样式的无边界应用程序主窗口吗?

我想创建一个窗口,它将成为主窗口,Windows本身将其识别为主应用程序窗口.但是,当我使窗口无边框,并且根本没有任何非客户区域时,Windows不再认识到该窗口是应用程序主窗口.这有几个副作用:

> WindowsKey M最小化除应用程序主窗口之外的所有窗口.
>在任务栏上单击一次(在win7中),然后再次,应该在正常和最小化状态之间切换应用程序主窗口的状态/可见性.这不适用于这样的窗口.

在简单的Win32编程术语中,我在询问dwStyle的参数值,如调用CreateWindow(WS _…常量)或CreateWindowEx(WS_EX _…常量).对于delphi用户,这些值将在您将覆盖的CreateParams方法中设置,然后设置Params.Style:= WS_xxx;对于MFC/C++用户和C用户,框架中的某些内容最终将使用此dwStyle值调用CreateWindow.

在delphi术语中,设置form.BorderStyle = bsNone,得到dwStyle = WS_POPUP.但是我想要一个不使用dwStyle = WS_POPUP的无边框窗口.

注意:下面的所有答案都很好,但是在生产场景中使用每个答案都是有问题的,而且我尝试这样做会导致遇​​到许多故障,对于专业质量的应用程序,我仍然觉得我无法解决.戴维斯的回答虽然是一个很好的纯Win32 API答案,但符合要求.似乎工业强度解决方案应该结合多种品质,包括我在上面的问题中所拥有的所有品质.简而言之,使用BorderStyle = bsNone(dwStyle = WS_POPUP)的无边框表单会阻止通常应用于应用程序主窗口的所有Windows功能,下面的所有解决方案都可以解决部分问题.

根据大卫的建议,我写了以下内容,但不起作用:
我想要一个没有边框的窗口,它可以在所有方面(如Windows应用程序窗口)运行到系统,也就是说,可以通过单击任务栏中的窗口来最小化/恢复它,并且将由WindowsKey M最小化.我开始认为这样做的唯一方法是添加非客户端绘制代码并将顶部非客户区域边界调整为零.这当然不是一个微不足道的想法.

事实证明,我在编码中犯了一个简单的错误(因此上面的两段),实际上下面的代码现在按照我的意愿工作.这个是pascal,但它应该很容易转换为C或其他任何东西.

program NoBorderProject;

uses
  Windows,Messages;
  {the Messages unit contains the windows
  Message constants like WM_COMMAND}

{$R *.RES}

var
  wClass: TWndClass;
  Msg: TMsg;
  win:HWND;
function WindowProc(hWnd,Msg,wParam,lParam:Integer):Integer; stdcall;
begin
 if Msg = WM_DESTROY then PostQuitMessage(0);
 Result := DefWindowProc(hWnd,lParam);
end;

begin
 wClass.lpszClassName:= 'CN';
 wClass.lpfnWndProc :=  @WindowProc;
 wClass.hInstance := hInstance;
 wClass.hbrBackground:= 1;
 RegisterClass(wClass);
 win := CreateWindow(wClass.lpszClassName,'Title Bar',WS_POPUP,//WS_OVERLAPPEDWINDOW or WS_VISIBLE,10,340,220,hInstance,nil);
 SetwindowLong(win,GWL_STYLE,WS_POPUP or WS_MINIMIZEBox);
 SetwindowLong(win,GWL_EXSTYLE,0 );
 ShowWindow(win,SW_SHOW);
 while GetMessage(Msg,0) do
   dispatchMessage(Msg);
end.

解决方法

以下完成工作:
hWnd = CreateWindow(...);
SetwindowLong(hWnd,WS_POPUP | WS_MINIMIZEBox);
SetwindowLong(hWnd,0);
ShowWindow(hWnd,...);

您可能缺少WS_MINIMIZEBox.

今天关于Delphi:你能在DLL中有一个组件类定义,并在运行时加载并创建它吗?的分享就到这里,希望大家有所收获,若想了解更多关于caching – MVC4 StyleBundle:你能在Debug模式下添加一个缓存清除查询字符串吗?、Delphi 2009 – 在运行时创建一个TPanel并改变其颜色、delphi TreeView – 在运行时创建节点、delphi – 你能在Windows中创建一个没有WS_POPUP样式的无边界应用程序主窗口吗?等相关知识,可以在本站进行查询。

本文标签: