如何将Delphi 7中表示为十进制(#0,#1,#9,#10,#13,#32,#128,#255)的字符移植到Delphi Unicode?一些文档(例如Embarcadero的"Unicode世界中的Delphi")只表示应该用实际字符替换它们.例如,我应该使用'€'代替#128.但你会怎么做#0 ??? 还是#9?还是#13?
更新:
看起来这是一个棘手的问题.有人在此声明,128岁以下的所有字符都保持不变.但是,"Unicode世界中的Delphi"另有说明.那么,有一种方法可以在Delphi XE中使用类似#9的东西,或者将Delphi 7中的代码移植到Delphi,Unicode会涉及大量的代码更改吗?
我在很少的地方看到过(这里有一个例子:http://pascalgamedevelopment.com/archive/index.php/t-1204.html).
Embarcadero文档没有说明创建流后文件/流中标头的位置.
结论:
由于文档不保证光标的位置,我们应该使用'Seek = 0'.即使现在光标位于文件的开头,我们也永远不知道它会如何及时改变.由于Embarcadero没有记录这一点,看起来他们保留更改权利.
如何自动调整TStringGrid行(DefaultRowHeight)以匹配使用的字体高度?我做的事情
Grid.DefaultRowHeight:= Grid.Canvas.TextHeight('X')+ 4;
但它不起作用.对于小字体,行的高度太大.
更新:
这似乎是程序逻辑的一个问题.如果我多次更改字体,则行的当前高度与先前字体更改事件的字体大小相匹配(它落后一步).
我使用此代码拦截字体的大小更改:
procedure TStrGrid.CMFontChanged(var Message: TMessage);
begin
inherited; // let TControl react first
DefaultRowHeight:= Canvas.TextHeight('ApApM')+ 4;
end;
Run Code Online (Sandbox Code Playgroud)
它就好像程序将是:
begin
DefaultRowHeight:= Canvas.TextHeight('ApApM')+ 4;
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
(首先它改变了高度,然后它实际上设置了正确的字体大小 - 因此高度落后一步)
我试图使用新的TFileOpenDialog,现在我的应用程序不再与Windows XP兼容.我发现TFileOpenDialog仅适用于Vista和7.似乎TFileOpenDialogand不会检查它是否在Win XP下运行,以便自动和无声地降级到TOpenFileDialog.相反,它只显示一条错误消息.有什么我想念的吗?有一个提供此功能的包装器,或者我必须切换回经典的TOpenFileDialog?
我不明白为什么Embarcadero必须抛弃Borland的帮助系统并从零开始构建一个新的(更糟糕的).
我需要直接在桌面上绘制滚动文本.我可以使用DC:= GetDC(0)在所有窗口的顶部绘制文本.但我不希望这样.图纸必须仅在桌面上,而不是在所有打开的窗户顶部.我的文字需要低于桌面上的图标!
我怎么在Delphi中这样做?我猜Windows 7有新的API函数,可以更方便地访问桌面窗口,因为它可以淡化壁纸.
我想为TFileListBox创建一个新事件.我想知道用户何时选择其他项目.
实现它的最佳方法是在用户按下鼠标按钮时调用该事件,如下所示:
procedure TMyFileList.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
VAR PrevItem: Integer;
begin
PrevItem:= ItemIndex; <---------- Problem here
inherited;
if (Count> 0)
AND ( PrevItem<> ItemIndex )
AND Assigned(FOnSelChaged)
then FOnSelChaged(Self, PrevItem);
end;
Run Code Online (Sandbox Code Playgroud)
所以,假设已经选择了第一项(ItemIndex = 0).一旦我按下鼠标按钮选择第二个项目,我就进入MouseDown程序.但是这里的ItemIndex已经是1而不是0.为什么?
我想在一个表单中间显示一个TPanel,它是其他表单的MDI父级.某种"泼溅"的形式,但并不完全.该面板将包含用户将调用misc的链接/按钮/快捷方式.功能.
主要要求是当我点击MDI子项时,TPanel应该放在MDI子表单下面.但是,就目前而言,TPanel将始终保持在MDI子表单之上.
调用Panel.SendToBack将使面板消失.我能怎么做?
我有一个从TScrollBox派生的自定义控件.在运行时,我需要知道天气垂直滚动条是否可见.如果我询问Visible属性,它总是返回true,无论滚动条是否可见!
function TMyScrollPanel.ScrollVisible: boolean;
begin
Result:= Self.VertScrollBar.Visible; <----------- always true
end;
Run Code Online (Sandbox Code Playgroud)
但是,这可以正常工作:
function VertScrollBarVisible(WindowHandle: THandle): Boolean;
begin
Result:= (GetWindowlong(WindowHandle, GWL_STYLE) AND WS_VSCROLL) <> 0
end;
Run Code Online (Sandbox Code Playgroud)
第一个功能有什么问题?
什么是dclsmpedit包(Embarcadero Editor Script Enhancements)?
我需要它吗?
我不确定'编辑脚本增强功能'是做什么的.
我有一个显示小缩略图的TListView(ViewStyle:=vsIcon).在运行时我将图像分配给项目:
for i := 0 to Total - 1 DO
with ListView.Items.Add DO
begin
Caption := 'Item ' + IntToStr(i);
ImageIndex := i;
end;
Run Code Online (Sandbox Code Playgroud)
在启动时,表单不是很宽,缩略图只显示在3列上.不幸的是,如果我调整窗体(和ListView)的大小,列数将保持为3,而在右侧,我将有很多空格.
这也行不通:
procedure TForm1.FormCreate(Sender: TObject);
begin
ListView.IconOptions.AutoArrange := TRUE;
end;
Run Code Online (Sandbox Code Playgroud)
如何重新排列项目以填充空白区域?
有没有像AutoArrange这样的房产?
更新:
我删除了旧控件,并在表单上添加了新控件.
现在ListView.IconOptions.AutoArrange有效.在之前的控件中有一些东西(我做了一些设置)阻止了AutoArrange工作.