小编Cob*_*ger的帖子

我可以让TComboBoxEx与TComboBox一样高吗?

在Delphi中,所有TEdit和TComboBox控件默认为21像素高.在TComboBox的情况下,这个大小是绝对的,并试图将它拉伸到更大的东西是行不通的.在TComboBoxEx的情况下,默认高度为22像素,这使得它在您使用它的任何形式上都很突出.现在根据Microsoft文档,ComboBoxEx本质上是一个ComboBox,其处理所有者绘制的功能以允许图像和缩进.

那么可以让我的TComboBoxEx控件高21像素吗?这取决于什么?

更新:根据Roddy的建议,我在此问题上添加了Quality Central报告.另外,我发现了一个问题.显然,大小取决于组合框中项目-1的大小.因此,您将该大小设置为15(或小于默认大小的一个像素),并且框缩小为更熟悉的21像素.

delphi height

5
推荐指数
1
解决办法
3011
查看次数

如何在表单显示之前定位?

我们的应用程序过去常常使用所有表单都要继承的公共基本表单.我想摆脱它有很多原因,从需要警察每个人都使用它到几个与Delphi的VFI实施相关的烦恼.事实证明,它提供的大部分功能都可以通过其他更可靠的方式完成.

我不太确定的是自动将所有表单放在其呼叫者的中心.因此,如果我从主窗体打开Dialog A,它应该放在主窗体的中心.如果我从Dialog A打开Dialog B,它应该放在Dialog A的中心,依此类推.

我们过去通过将基本表单的Position属性设置为poOwnerFormCenter来处理所有这些,并且它工作得很好.但是,我如何在应用程序范围内执行此操作?

我想过使用Screen.OnActiveFormChange,但我认为每次表单获得焦点时都会发生这种情况.我还想过使用Application.OnModalBegin,但似乎没有一种明显的方法可以在调用它时查找表单.

有没人试过这个?

forms delphi

5
推荐指数
1
解决办法
8126
查看次数

什么是dispinterface声明用于?

当您在Delphi中创建一个类型库并创建一个接口和相关的CoClass时,Delphi也会创建匹配的dispinterface声明.

我的理解是,这些与我的接口派生自IDispatch的事实有关,但我认为TAutoObject实现了IDispatch所需的一切.所以我的问题有三个:

  1. 用于什么是dispinterface?
  2. 为什么需要?
  3. 如何使用它?

delphi com

5
推荐指数
2
解决办法
4018
查看次数

指定default时,SQL Server会创建XML命名空间

举个简单的例子:

declare @myXml xml
set @myXML = '
<root>
    <line id="1"/>
    <line id="2"/>
    <line id="3"/>
</root>'
select t.c.query('.')
from @myXml.nodes('/root/line') t(c)
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我回到了三行,看起来像这样:

<line id="1" />
Run Code Online (Sandbox Code Playgroud)

但是,当XML声明其命名空间(甚至只是默认的xmlns)时,您还需要在SQL中指定该命名空间,否则结果集将为空.我知道两种方法:nodes()方法调用中的声明语句或带有xmlnamespaces语句的声明语句.让我们用后者:

declare @myXml xml
set @myXML = '
<root xmlns="urn:somename">
    <line id="1"/>
    <line id="2"/>
    <line id="3"/>
</root>';

with xmlnamespaces(default 'urn:somename')
select t.c.query('.')
from @myXml.nodes('/root/line') t(c)
Run Code Online (Sandbox Code Playgroud)

虽然我现在得到了结果,但结果却有一定的怪异.指定的命名空间将添加为"p1"而不是默认值.所以我的输出看起来像这样:

<p1:line xmlns:p1="urn:somename" id="1" />
Run Code Online (Sandbox Code Playgroud)

这篇Technet文章中,B部分声明一个默认命名空间显示了我正在尝试实现的内容,但是我使用默认命名空间得到了D. Construction中显示的结果.由于我的例子看起来不像后者,我不明白为什么我会得到这些前缀.

更新: 为了完整起见,这提供了与xmlnamespaces语法完全相同的症状:

select t.c.query('.')
from @myXml.nodes('declare default …
Run Code Online (Sandbox Code Playgroud)

xml sql sql-server xquery xquery-sql

5
推荐指数
1
解决办法
4668
查看次数

继续jQuery延迟链的失败

我正在使用通常的Deferred链接方法在jQuery中进行一系列顺序AJAX调用.第一个调用返回一个值列表,随后的调用将返回那些返回的列表条目.在第一次返回列表的调用之后,后续调用可以按任何顺序完成,但必须一次完成一次.所以这就是我使用的:

$.when(callWebService()).then(
function (data) {
    var looper = $.Deferred().resolve(),
        myList = JSON.parse(data);
    for (var i in myList) {
        (function (i) {
            looper = looper.then(function () { // Success
                return callWebService();
            }, 
            function (jqXHR, textStatus, errorThrown) { // Failure
                if (checkIfContinuable(errorThrown) == true)
                    continueChain();
                else
                    failWithTerribleError();
            });
        })(i);
    }
});
Run Code Online (Sandbox Code Playgroud)

事实证明,后续调用有时可能会失败,但我仍然希望进行剩余的调用.在我的列表中,这就是这一点创造性伪代码的意图:

if (checkIfContinuable(errorThrown) == true)
    continueChain();
else
    failWithTerribleError();
Run Code Online (Sandbox Code Playgroud)

我怎么实现continueChain呢?似乎任何延迟的失败都会导致链的其余部分也失败.相反,我想记录错误并继续列表的其余部分.

javascript jquery deferred jquery-deferred

5
推荐指数
1
解决办法
2276
查看次数

TCustomControl如何获得输入焦点?

我正在编写一个基于TCustomControl的网格控件,所以我可以自己处理所有的结构,绘画和导航.我似乎无法弄清楚的是这个:

在我的构造函数中,我将ControlStyle设置为:

ControlStyle := ControlStyle + [csCaptureMouse, csClickEvents,
    csDoubleClicks, csNeedsBorderPaint, csPannable];
Run Code Online (Sandbox Code Playgroud)

我的想法是,如果控件处理鼠标事件,我可以做像设置选择等事情.我注意到控件永远不会得到焦点.我碰巧在表单上有一个TComboBox,并且在创建表单时它显然是焦点.无论我在网格中点击多少次,焦点都会停留在组合框上.

这当然也会影响我对键盘事件的处理.

所以问题是,当你点击它时,如何确定焦点应转移到控件上?

delphi focus tcustomcontrol

4
推荐指数
1
解决办法
1766
查看次数

ODBC中的连接超时

我知道我可以在使用ADO或OLE DB时为MS SQL Server设置连接超时,方法是将Connect Timeout = somevalue添加到连接字符串.

但这似乎不适用于ODBC连接.具体来说,我们决定使用Windows XP附带的标准SQL Server ODBC驱动程序(SQLSRV32.DLL版本2000.85.1132.00)而不是较新的SQL Native Client,并且使用此驱动程序时连接总是在15秒内超时,与连接超时设置无关.

此外,当它超时时,我得到两个错误.第一个是超时,第二个是"无效的连接字符串属性",所以我猜Connect Connectout不是我需要的.我错过了这个情节的最后线索来自这篇有点过​​时的文章:http://msdn.microsoft.com/en-us/library/ms811006.aspx

有没有人知道是否有办法在标准SQL Server ODBC驱动程序的连接字符串中指定连接超时?

sql-server odbc connection-string

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

将TRichEdit绘制到画布上

我正在尝试在Delphi XE中实现支持RTF的工具提示窗口.为了渲染富文本,我正在使用屏幕外的TRichEdit.我需要做两件事:

  1. 测量文本的大小.
  2. 绘制文本

为了完成这两个任务,我写了这个方法:

procedure TLookupHintWindow.CallFormatRange(R: TRect; var Range: TFormatRange;
  MustPaint: Boolean);
var
  TextRect: TRect;
begin
  RichText.SetBounds(R.Left, R.Top, R.Right, R.Bottom);
  TextRect := Rect(0, 0,
    RichText.Width * Screen.Pixelsperinch,
    RichText.Height * Screen.Pixelsperinch);

  ZeroMemory(@Range, SizeOf(Range));
  Range.hdc := Canvas.Handle;
  Range.hdcTarget := Canvas.Handle;
  Range.rc := TextRect;
  Range.rcpage := TextRect;
  Range.chrg.cpMin := 0;
  Range.chrg.cpMax := -1;

  SendMessage(RichText.Handle, EM_FORMATRANGE,
    NativeInt(MustPaint), NativeInt(@Range));
  SendMessage(RichText.Handle, EM_FORMATRANGE, 0, 0);
end;
Run Code Online (Sandbox Code Playgroud)

传入Range参数,因此我可以使用此方法之外的计算尺寸.MustPaint参数确定是应该计算范围(False)还是绘制(True).

要计算范围,我称之为:

function TLookupHintWindow.CalcRichTextRect(R: TRect; const Rtf: string): TRect;
var
  Range: TFormatRange;
begin
  LoadRichText(Rtf);

  CallFormatRange(R, Range, False);

  Result := Range.rcpage; …
Run Code Online (Sandbox Code Playgroud)

delphi off-screen trichedit delphi-xe

4
推荐指数
1
解决办法
3009
查看次数

在Tools API中提供方法体

几年前,我编写了一个代码模板,它采用了一些简单的参数(点)并生成了一个类骨架.由于某些方法体中有代码,我无法调用InvokeClassCompletion,只是将实现放在声明中(用户必须移动它们).

在我看来,我可以编写一个代码模板脚本引擎来将这些方法插入到正确的位置,但我不知道我应该如何导航文件.在ToolsAPI.pas中有IOTAEditReader和IOTAEditWriter的声明,但我猜测有一个步骤缺失 - 当然我不需要手动解析Delphi代码只是为了找到实现部分?

有人有经验吗?

delphi plugins opentools

4
推荐指数
1
解决办法
268
查看次数

如何调整滚动条的缩略图大小

如果打开记事本,添加十行并调整编辑器大小仅显示九,拇指轨道(滚动条上的可拖动块)几乎是垂直滚动条的全长.如果添加几千行,则拇指轨道只有几个像素高.

我想在TCustomControl后代复制这个bahaviour,在那里我实现了一个水平滚动条.所以我将WS_HSCROLL添加到我的窗口样式(在CreateParams中)并为WM_HSCROLL实现了一个处理程序.在此过程中,我使用SetScrollRange和SetScrollPos来管理拇指轨道的范围和位置 - 但是小虫子仍然是一个接近完美的方块.

我错过了什么?

delphi scroll scrollbar tcustomcontrol

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