首先这可能吗?
我有两个问题 - 第一个问题是,在运行时创建时,我无法让组出现在TListView中.我正在使用以下代码:
lg := lvResults.Groups.Add;
lg.Header := 'New Starters';
lg.GroupID := 0;
Run Code Online (Sandbox Code Playgroud)
第二个是即使我在设计时创建组 - 我可以在表单设计器中看到它们 - 它们在运行时不存在 - 甚至在我刷新数据以添加我自己的项目之前...
附加:我已经确认以下答案适用于处女项目.但是在我想要使用它的项目中失败了!我已经用调色板中的新TListView取代了我的TListView,没有任何乐趣.列表视图位于tpagecontrol上
我们有一个 SQL 联系人数据库,它链接到我们所有的项目信息,其中包含很多附加功能。
最近有人建议我们在最终用户的电子邮件客户端中提供此信息的联系人部分 - 因此我们正在考虑设置 LDAP 服务器
是否有任何工具可以让我们将数据库中的信息(可能是我怀疑的视图)映射到 LDAP 服务器?
就在最近,可能是因为我一直在维护一些旧的代码,我已经开始研究如何/为什么我做事了.像你一样做.
我的大多数Delphi编程都是内部选择,或者是分散在Web或手册中的示例.有些事情只是因为"这就是我做的"
我目前想知道的是声明,变量,程序,功能等.
当我使用表格时,我会将所有程序和功能置于公开或私下.虽然我会尝试避免全局变量和常量,但通常会在接口或实现中使用var或const,具体取决于它们需要调用的位置(有时它们将在公共/私有中)
否则,如果它只是一个单元,我将在接口中声明该过程并在实现中使用.我最近维护的一些代码没有接口声明,但是在程序之后通过调用正确地订购了所有代码...
有没有正确的方法来做到这一点?课程中应该/不应该有什么规则?或者它是一种风格/当你开始的时候?
编辑添加
我的问题不是关于程序的声明是私有/公开的,而是一个程序单位的所有声明是否应该进入其中一个.同样var/const应该是一个还是另一个?
进一步澄清
我知道不在界面中声明,或在public/private/etc中声明会影响我的应用程序中其他单元的过程/功能的可见性.
我的问题的核心是为什么我不希望要申报吗? - 特别是在私人放置时,在表单/单元中工作时,更明确的是声明的东西不可用于其他单位......
干杯丹
我正在尝试在Delphi 2010中的两个应用程序之间传递信息.
我正在使用我过去成功使用的简化版代码(简化因为我不需要发件人知道发送已成功)我已经将收到的发送简化为一对示例应用程序,实质上如下
发送
procedure TMF.SendString;
var
copyDataStruct: TCopyDataStruct;
s: AnsiString;
begin
s := ebFirm.Text;
copyDataStruct.cbData := 1 + length(s);
copyDataStruct.lpData := PAnsiChar(s);
SendData(copyDataStruct);
end;
procedure TMF.SendData(copyDataStruct: TCopyDataStruct);
var
rh: THandle;
res: integer;
begin
rh := FindWindow(PChar('TMF'), PChar('Get Phone'));
if rh = 0 then
begin
// Launch the target application
ShellExecute(Handle, 'open', GetPhone, nil, nil, SW_SHOWNORMAL);
// Give time for the application to launch
Sleep(3000);
SendData(copyDataStruct); // RECURSION!
end;
SendMessage(rh, WM_COPYDATA, Integer(Handle), Integer(@copyDataStruct));
end;
Run Code Online (Sandbox Code Playgroud)
接收申请
procedure TMF.WMCopyData(var Msg: TWMCopyData);
var …Run Code Online (Sandbox Code Playgroud) 我在使用 Excel 2010 的早期绑定从 Delphi XE2 设置条件格式时遇到问题
我试图重现的宏如下:
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
Formula1:="=6"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Run Code Online (Sandbox Code Playgroud)
尽我所能,我似乎无法访问相当于Selction.FormatConditions(1)工作的东西
我达到的最接近的是以下代码:
XR := Xlapp.Range(...)
XR.FormatConditions.Delete;
XR.FormatConditions.Add(xlCellValue, xlGreater, '=6', EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
Run Code Online (Sandbox Code Playgroud)
这有效。当我尝试定义颜色时遇到问题
FC := XR.FormatConditions[1];
FC.SetFirstPriority;
with FC.Interior do
begin
PatternColorIndex := xlAutomatic;
ThemeColor := xlThemeColorAccent6;
end;
Run Code Online (Sandbox Code Playgroud)
然而,这一直告诉我 XR.FormatConditions(1) 是 IDispatch,因此与 FormatCondition 分配不兼容
我究竟做错了什么?
我正在将一些旧代码从Office 2000迁移到Office 2010,并且遇到了将Excel转换为Autofit Columns的问题
正在运行的代码如下:
for x := 1 to LV.Columns.Count do
XLApp.Columns[x].EntireColumn.AutoFit;
Run Code Online (Sandbox Code Playgroud)
其中XLApp是TExcelApplication组件
当我查看VBA时,等效代码应该是
Columns("A:A").EntireColumn.AutoFit
Run Code Online (Sandbox Code Playgroud)
我很容易更改我的代码以使范围与VBA匹配,但这似乎不是问题.编译器返回的错误是
Class does not have a default property
Run Code Online (Sandbox Code Playgroud)
并且[x]突出显示.代码完成不提供任何我可以看到的选择单个列的方式,无论是整数还是范围.
有什么建议?
在我的应用程序中,我正在从一个数据库读取并写入第二个数据库.该应用程序快速而肮脏,所以我正在使用和查询AsString两者进行读/写.FieldByNameParamByName
这适用于我的所有用例,除了数据类型是Date或DateTime
据我所知,FieldByName.AsString使用系统ShortDateTime格式返回日期(在我的情况下)dd/mm/yyyy.数据库期望将日期写为yyyy-mm-dd
根据Delphi Basics,我应该能够设置ShortDateFormat我需要的东西,但似乎在XE5中不再是这种情况(对吗?)
此外挖这里返回这 2个使用问题TFormatSettings覆盖本地设置.然而,这两种使用产生FormatSettings在StrToDate和FormatDateTime直接.
所以有两个问题
1)我可以告诉我的应用程序覆盖系统ShortDateFormat吗?
2)如果是,如何(如果没有,我有B计划)?
我需要转换一个字符串,将其写入registry.reg_binary键.
我有写入密钥的基本代码如下:
try
rootkey := HKEY_CURRENT_USER;
if OpenKey(Key, False) then
begin
reg.WriteBinaryData('SomeKey', SomeValue, Length(SomeVale));
CloseKey;
end;
finally
reg.Free;
end;
Run Code Online (Sandbox Code Playgroud)
在上面,SomeValue需要是TEdit文本字段的十六进制值;
我目前的方法是使用IntToHex在每个字符的Ord值上转换TEdit.text.这给了我一个看起来像我想写的字符串......
此时我很难过......
我有一些Typed TLists,我在排序时遇到问题
通常,对于无类型的TList,我会有一个函数,例如:
function SortByJob(Item1: Pointer; Item2: Pointer): Integer;
var
p1, p2: JobPointer;
begin
p1 := JobPointer(Item1);
p2 := JobPointer(Item2);
if p1.job > p2.job then
Result := 1
else
if p1.job = p2.job then
Result := 0
else
Result := -1
end;
Run Code Online (Sandbox Code Playgroud)
这将由列表调用
JobList.Sort(SortByJob)
Run Code Online (Sandbox Code Playgroud)
但是我已经在我当前的应用程序中决定我们要将TLists锁定到某些指针类型,所以在上面的例子中我们将JobList声明为:
JobList: array[0..4] of TList<JobsPointer>;
Run Code Online (Sandbox Code Playgroud)
现在我打电话的时候
JobList[0].Sort(SortByJob)
Run Code Online (Sandbox Code Playgroud)
我得到一个"参数不够"的错误.
有任何想法吗?
我已经比较了如果我在一个无类型的"标准"TList上使用上面的Sort函数,那么它将正确编译...
我在使用TStringGrid和Popup菜单时遇到问题
我想知道从弹出菜单中选择项目时最后一个活动单元格的行/列.但是,当我单击弹出菜单时,StringGrid.Row返回-1.
我尝试使用MouseToCell作为OnClick的一部分,但即使在设置SG.Row之后它仍然在PopUp菜单例程中返回为-1 ...我怀疑问题是网格失去焦点.
是否有任何解决方案不需要OnClick设置全局变量?
我正在使用链接到弹出菜单上的项目的动作列表,以确保工具栏和弹出菜单之间的操作是一致的
delphi ×9
delphi-2010 ×3
delphi-xe2 ×2
excel ×2
automation ×1
delphi-xe5 ×1
excel-2010 ×1
ldap ×1
pointers ×1
popupmenu ×1
registry ×1
scope ×1
sql ×1
tlist ×1
tlistview ×1
tstringgrid ×1
wm-copydata ×1