标签: custom-component

TFrame继承重构

另一个来自我的TFrame IDE注册组件问题.感谢所有帮助,其他程序员.:)

这里玩弄Darrian的TFrame继承建议:

具体细节:

基本上,我有一个基于TFrame的组件,我已经注册到IDE,它工作得非常好.我现在正在开发一些"姐妹"组件,它们将共享大量现有组件的非可视功能和属性.因此,有意义的是将大量的内容移动到父类/超类,然后新组件和旧组件都可以从中继承.

以这种方式"重构"TFrame继承的最佳方法是什么?(这也可能适用于TForm级后代,不确定).有什么需要注意的注意事项和注意事项?

例:

我试过,例如,创建一个新的TFrame,没有任何内容,并调用该框架TMyBaseFrame.然后修改我现有组件的类定义(让我们称之为TMyFrameTreeView)继承而不是TFrame.

它编译得很好,但是当我尝试将其放在表单上时,我得到"ClientHeight not found"(或"找不到ClientHeight属性"),并且它不会丢弃在表单上.从相关的DFM中删除ClientHeight和ClientWidth会造成严重破坏,并且无论如何都会在调整大小时替换它们.我注意到了后代类中的ExplicitHeight和ExplicitWidth,并且我认为这与继承值的属性值覆盖相关,但我不确定.通过New - > Inherited Items重新创建一个全新的框架,然后将所有内容复制过来,也没有取得很好的效果.

最后的说明

我意识到这可能会很快变得混乱,包括流式DFM文件和多代后代等等......这也是我要求整体"注意事项"概念方面的一部分,同时也给出了具体的一部分.现实世界更简单的问题版本(在我看来,应该是可行的).

我已经创建了一个小小的测试软件包来学习尝试,并且我学到了很多东西,但是它很慢,而且德尔福"Jedi Masters"的任何指导/见解都会受到最多的赞赏.:)



稍后回答更新:

以下两个答案都很有帮助.同样,创建一个"基础框架类",它与普通的TFrame没有任何变化,然后在添加任何属性,方法等之前从中继承,这似乎可以极大地稳定继承流.不知道为什么,但到目前为止还有.

delphi inheritance refactoring tframe custom-component

3
推荐指数
1
解决办法
3028
查看次数

箭头键不在组件中工作

我使用Gecko SDK,这是一个允许您查看网页的组件.
我使用这个组件来创建一个html编辑器.

关闭编辑网页时会发生此问题.
问题是箭头键和选项卡不适用于我的组件.我试图找到这个问题的答案,但我找不到.我在这里找到了一个曲目,但功能不起作用.

功能Movement (dx, dy)不存在.谢谢你帮我解决这个问题.

Procedure Tform1.TraiteMessages(Var msg : TMsg; Var Handled: boolean);
var
  dx, dy : integer;
begin   dx: 0; dy := 0; 
  With msg do
  begin
    IF Message = WM_KEYDOWN then
    Case  wparam of
      VK_LEFT  : dx := -1;
      VK_RIGHT : dx :=  1;
      VK_UP    : dy := -1;
      VK_DOWN  : dy :=  1;
    end;
  end;
  IF (dy = 0) AND (Dx = 0) then Handled := false else
  begin
    handled …
Run Code Online (Sandbox Code Playgroud)

delphi pascal custom-component

3
推荐指数
1
解决办法
1553
查看次数

delphi 7,安装组件在安装时隐藏

我正在为一个组件进行delphi 7快速安装而不必触摸IDE我正在制作一个简单的安装程序,根据Marjan Venema的这个SO答案 .

    procedure TForm1.Button1Click(Sender: TObject);
    var
      sDelphi7PackageName : string;
      sDelphi7Path,fileSource,fileDest : string;
      sDelphi7packBPL,sDelphi7PathMenuBPL  : string;
    begin
       sDelphi7Path:=ReadRegistryValues('\Software\Borland\Delphi\7.0',FALSE,'RootDir',1,TRUE);{<-- returns the 'C:\Program Files\Borland\Delphi7' }

      {#1. Install .bpl}
      sDelphi7BPL:=sDelphi7Path+'\Projects\Bpl\Pack.bpl';
      WriteValueToRegisTry('\Software\Borland\Delphi\7.0\Known   Packages',FALSE,sDelphi7BPL,'Delphi 7 compo Bpl File'); {<-- writes to the registry}

      fileSource:=ExtractFilePath(Application.ExeName)+'\Packages\comPack.bpl';
      fileDest:=sDelphi7BPL;
      CopyFile(PChar(fileSource), PChar(fileDest), False);
      end;
Run Code Online (Sandbox Code Playgroud)

这工作正常![在此处输入图像描述] [2] C:\Program Files\Borland\Delphi7\Projects\Bpl\Pack.bpl.但组件安装了idhidden

谁能告诉我如何unhidecomponent上安装吗?

编辑

可能有用:

1)我已经拥有bpl组件的文件,所以我直接复制到delphi 7目录C:\Program Files\Borland\Delphi7\Projects\Bpl并修改注册表HKEY_CURRENT_USER\Software\Borland\Delphi\7.0\Known Packages.

2)register组件的程序

 implementation …
Run Code Online (Sandbox Code Playgroud)

delphi components delphi-7 custom-component

3
推荐指数
1
解决办法
1822
查看次数

为joomla 2.5编写组件的最佳方法

我想知道为joomla 2.5编写组件的最佳方法是什么,因为有很多方法可以做到这一点.我找了一些已经完成的组件,这看起来很混乱.哪个是更舒适的JForms基本控制器和模型类.我想制作一个应该在前端有表单的组件,以便用户或前端的成员注册字段发布一些通知或广告.谢谢阅读.

components custom-component joomla2.5

3
推荐指数
1
解决办法
5359
查看次数

自定义PropertyEditors - 它们似乎永远不会出现

信息

关于如何管理组件包和安装自定义属性编辑器,我似乎无能为力.我花了大约一个星期左右查看示例和教程,我必须明确做错了,因为我的属性编辑器从未出现在Object Inspector中,我需要一步一步的指示来尝试解决这个挫败感.

组件包

我目前有一个包,它designtime and runtime在选项中设置.添加到这个包是我的组件的单位(即,MyButton,MyListBox等) - 另外我有一个包含该RegisterComponents过程的单元.我现在可以构建和安装它,将我的组件添加到一个新项目并运行它们没有任何问题.

添加自定义PropertyEditor

现在,我想从上面的包中向我的组件引入属性编辑器,这让我变得棘手和困惑.

例如,TMyButton是一个带有我自己的绘制方法的自定义按钮,它已经发布了属性以允许更改按钮的外观 - 此外,还有一个已发布的列表允许选择预设外观设置,例如:

TMyButtonStyle = (bsStyle1, bsStyle2, bsStyle3)

我想删除预设样式列表,而是在Object Inspector中添加一个名为'PresetStyles'的属性.这个属性将是paDialog,我想要一个表单,在那里我可以直观地看到不同的按钮样式 - 从简单列表中选择预设样式的更加图形化的方式.

我需要哪些包裹

如果我明白,你需要拆分designtime包和runtime包吗?

这是否意味着我需要两个寄存器单元,一个用于组件,一个用于属性编辑器?

我不完全确定如何管理这个,正如我所说的当前包designtime and runtime,我不知道我应该将它分成什么包类型.如果我为Property Editors创建一个新的designtime包,并且runtime仅创建另一个包,则会丢失安装按钮.即使现在写这个也让我感到困惑.

安装PropertyEditor

我试过的其中一篇文章是本页的一篇:http://www.delphisources.ru/pages/faq/master-delphi-7/content/LiB0097.html

我唯一改变的是添加我自己的对话框表单,并从以下位置更改注册码:

RegisterPropertyEditor(TypeInfo(string), TMdSoundButton, 'SoundUp', TSoundProperty);

RegisterPropertyEditor(TypeInfo(string), TMyButton, 'PresetStyles', TSoundProperty);

我知道它仍然说TSoundProperty,我只是把它留下来,直到我能让它工作然后我会改变类名.

结论

在实际组件和设计方(即PropertyEditors)之间拆分/管理包的正确方法是什么?

PropertyEditor永远不会出现在Object Inspector中的TMyButton上,我觉得它必须与未正确配置包或其他东西有关.

我真的很感激这里的一些帮助,甚至是一个非常好的教程指南的链接或者我正在做的事似乎工作,即使使用很多例子也不适合我.

delphi custom-controls custom-component delphi-xe

3
推荐指数
2
解决办法
812
查看次数

如何知道我是否引用了正确的组件?

概观

我正在重写从TXPStyleMenuItem继承的一些过程,这样我可以更改使用TActionMainMenuBar时菜单的显示方式.

例:

  TMyXPStyleMenuItem = class(TXPStyleMenuItem)
  protected
    procedure DrawBackground(var PaintRect: TRect); override;
  end;
Run Code Online (Sandbox Code Playgroud)

我创建了自己的组件,它是从TActionMainMenuBar派生的,而在GetControlClass方法中我设置了var ControlClass: TCustomActionControlClassTMyXPStyleMenuItem.

到目前为止,我的工作做得很好,但显然比上面的例子更完整 - 为了问题的目的,我尽可能地保持简短.

Styler组件

我创建了一个非可视样式组件,它基本上只是一堆已发布的属性,这个样式组件可以分配给我的一些控件,在这种情况下我的下载TActionMainMenuBar.

当我的控件分配了样式器组件时,它会读取属性的值,然后根据值进行绘制.如果未分配样式器组件,那么我只使用默认值来决定如何绘制控件.

一个简单的示例来自我的一个自定义TEdits,我可以根据指定的样式器值更改颜色:

TMyEdit = class(TCustomEdit)
private
  FStyler: TMyStyler;
public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
end;

if Assigned(FStyler) then
begin
  Color := FStyler.Color;
end;
Run Code Online (Sandbox Code Playgroud)

问题

我面临的问题是中的重写程序TMyXPStyleMenuItem = class(TXPStyleMenuItem).

我需要读取我的样式组件的值,但因为TMyXPStyleMenuItem实际上不是我的菜单组件的一部分,我无法知道从哪里来FStyler,例如我分配给哪个TActionMainMenuBar实例?

通常,我的菜单类中的FStyler设置如下:

private
  FStyler: TMyStyler;
  procedure SetStyler(const Value: TMyStyler);
published
  property Styler: TMyStyler read FStyler write SetStyler;

..

procedure TMyMenu.SetStyler(const Value: TMyStyler);
begin
  if …
Run Code Online (Sandbox Code Playgroud)

delphi custom-component

3
推荐指数
1
解决办法
158
查看次数

mCustomScrollbar - 滚动条仅出现在F12上(开发工具/ Firebug)而非隐藏元素/ div

mCustomScrollbar有一个奇怪的问题 - 这里有类似的问题:

顽固的问题与流行的自定义滚动条

在重新调整窗口大小或按F12(在IE9和FF上测试 - 所以Developer和Firebug)之前,滚动条不会显示.只要你这样做,代码就会启动.元素最初是隐藏的,并使用.show()或.fadeIn()显示

CSS:

.info-text {
    width: 230px;
    height: 170px;
    overflow: hidden;
    display: block;
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<p class = "info-text">
Lorem...
</p>
Run Code Online (Sandbox Code Playgroud)

JS:

$(".info-text").mCustomScrollbar();
Run Code Online (Sandbox Code Playgroud)

JS是在一个 $(window).load(function(){...

css jquery scrollbar custom-component mcustomscrollbar

3
推荐指数
1
解决办法
5925
查看次数

渲染ClientBehaviorHolder

我正在忙着编写自己的JSF2 UIComponent及其相关的渲染器.我所有UIComponent的工具ClientBehaviorHolder.我不明白的是如何真正渲染ClientBehaviorHolder.

例如,以下代码说明了如何ClientBehaviorHolder在Mojarra中呈现.

private static void renderHandler(FacesContext context,
                                  UIComponent component,
                                  Collection<ClientBehaviorContext.Parameter> params,
                                  String handlerName,
                                  Object handlerValue,
                                  String behaviorEventName,
                                  String submitTarget,
                                  boolean needsSubmit,
                                  boolean includeExec)
    throws IOException {

    ResponseWriter writer = context.getResponseWriter();
    String userHandler = getNonEmptyUserHandler(handlerValue);
    List<ClientBehavior> behaviors = getClientBehaviors(component, behaviorEventName);

    // Don't render behavior scripts if component is disabled
    if ((null != behaviors) && 
        (behaviors.size() > 0) && 
         Util.componentIsDisabled(component)) {
        behaviors = null;
    }

    if (params == null) {
        params = …
Run Code Online (Sandbox Code Playgroud)

ajax renderer custom-component jsf-2

3
推荐指数
1
解决办法
1053
查看次数

Polymer告诉我"Uncaught SyntaxError:Unexpected token"

在下面的Polymer自定义组件中,当调用函数'deleteState'时(所以当我点击"删除"纸质项目时)我总是得到"Uncaught SyntaxError:Unexpected token("来自Chrome.在Firefox上,我得到了"SyntaxError" :function语句在控制台中需要名称"错误.

<polymer-element name="tw-state" attributes="stateId">
<template>
    <style>
       ...
    </style>

    <paper-shadow z="1">
        <div layout vertical>
            <div class="state-header" layout horizontal center-justified>
                <div flex style="margin: 10px">
                    <content select="h3"></content>
                </div>                    
                <paper-menu-button>
                    <paper-icon-button icon="menu" noink></paper-icon-button>
                    <paper-dropdown class="dropdown">
                        <core-menu class="menu">
                            <paper-item>Settings</paper-item>
                            <paper-item onclick="{{deleteState}}">Delete</paper-item>
                        </core-menu>
                    </paper-dropdown>
                </paper-menu-button>
            </div>
            <div class="state-body" layout vertical start>
                <content></content>
            </div>
            <div class="state-footer"  layout horizontal center-justified>
                <paper-input-decorator label="New task" flex>
                    <input is="core-input">
                </paper-input-decorator>
                <paper-button noink="" role="button" tabindex="0">
                    <core-icon icon="add" aria-label="add" role="img"></core-icon>
                </paper-button>
            </div>
        </div>
    </paper-shadow>

</template>
<script>
    Polymer({

        deleteState: function() { …
Run Code Online (Sandbox Code Playgroud)

javascript custom-component polymer

3
推荐指数
1
解决办法
2184
查看次数

使自定义组件包含其他组件的正确方法

我想制作我自己的包含其他组件的简单组件.看起来像:

TTag = class(TLayout)
private
    _line: TLine;
    _label: TLabel;
    _background: TRoundRect;
    _button: TLabel;
public
    constructor Create(AOwner: TComponent); override;
end;
Run Code Online (Sandbox Code Playgroud)

当我将这个组件放在表单上时,一切正常,我的表单结构如下所示: 在此输入图像描述

但在Delphi IDE重新打开后,它看起来像:

在此输入图像描述

如何添加子组件以避免这种奇怪的行为?

delphi custom-component firemonkey

3
推荐指数
1
解决办法
101
查看次数