我需要一个总是放大的TWebBrowser(~140%)并将所有链接保存在同一个webbrowser中(即_BLANK链接应该在同一个浏览器控件中打开).
我已将FEATURE_BROWSER_EMULATION注册表设置为9999,因此使用IE9呈现网页.我已经确认这是有效的.此外,我正在使用IE9全新安装Windows 7运行已编译的程序,通过Windows Update完全更新.
缩放:
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
ZoomFac: OLEVariant;
begin
ZoomFac := 140;
WebBrowser1.ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, ZoomFac);
end;
Run Code Online (Sandbox Code Playgroud)
这非常有效.
在同一浏览器控件中打开新窗口:
默认情况下,当TWebBrowser遇到要在新窗口中打开的链接集时,会打开一个新的IE.我需要它留在我的程序/ webbrowser中.
我在这里尝试了很多东西.这对我有用:
procedure TFormWeb.WebBrowser1NewWindow3(ASender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool; dwFlags: Cardinal;
const bstrUrlContext, bstrUrl: WideString);
begin
Cancel := True;
WebBrowser1.Navigate(bstrUrl);
end;
Run Code Online (Sandbox Code Playgroud)
我取消了新窗口,而只是导航到同一个URL.
互联网上各种页面上的其他来源表明我不会取消,而是将ppDisp设置为各种各样的东西,例如WebBrowser1.DefaultDispath或者WebBrowser1.Application它们的变体.这对我不起作用.当我单击_BLANK链接时,没有任何反应.这是在两台计算机(Win7和IE9)上测试的.我不知道为什么它不起作用,因为这似乎适用于互联网上的其他人.也许这会解决问题?
当我结合这两段代码时,它会破坏!
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://wbm.dk/test.htm');
// This is a test page, that I created. It just …Run Code Online (Sandbox Code Playgroud) 我添加了一个比原始插件晚3年发布的代码,但它仍然返回错误...
代码是直截了当的......但我仍然很想念一些方面......
看到这段代码:
{
nsScreenshot NSIS Plugin
(c) 2003: Leon Zandman (leon@wirwar.com)
Re-compiled by: Linards Liepins (linards.liepins@gmail.com)
Code by: http://www.delphitricks.com/source-code/forms/make_a_desktop_screenshot.html
(e) 2012.
}
library nsScreenshot;
uses
nsis in './nsis.pas',
Windows,
Jpeg,
graphics,
types,
SysUtils;
const
USER32 = 'user32.dll';
type
HWND = type LongWord;
{$EXTERNALSYM HWND}
HDC = type LongWord;
{$EXTERNALSYM HDC}
BOOL = LongBool;
{$EXTERNALSYM BOOL}
{$EXTERNALSYM GetDesktopWindow}
function GetDesktopWindow: HWND; stdcall; external USER32 name 'GetDesktopWindow';
{$EXTERNALSYM GetWindowDC}
function GetWindowDC(hWnd: HWND): HDC; stdcall; external USER32 name 'GetWindowDC';
{$EXTERNALSYM GetWindowRect}
function …Run Code Online (Sandbox Code Playgroud) 在我的Delphi应用程序中,我正在使用一个TWebBrowser控件,我在其中加载了一个HTML文档,其中包含一个<select>元素(下拉列表)和一些<option>项目(下拉列表项).假设我在网络浏览器中加载了以下HTML文档:
<html>
<body>
<select id="ComboBox">
<option value="firstvalue">First Value</option>
<option value="secondvalue">Second Value</option>
<option value="thirdvalue">Third Value</option>
</select>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我怎样才能以编程方式选择,例如<option>,其value属性是thirdvalue?或者换句话说,当我只知道该项的value属性是thirdvalue什么时,我如何以编程方式选择此下拉列表中的第三项?
我有一个应用程序,在Delphi 2007中构建,TDateTimePicker在表单上有一个.此日期时间选择器具有ShowCheckbox设置为的属性True,其在日期或时间旁边显示一个复选框,每当用户选择日期时,或者通过代码更改日期或时间时,该复选框将自动选中.此复选框的状态也可由用户手动控制,其状态可由Checked属性确定.
以下代码显示如何确定OnChange事件中此复选框的状态:
procedure TForm1.FormCreate(Sender: TObject);
begin
DateTimePicker1.ShowCheckbox := True;
end;
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
ShowMessage('Checked: ' + BoolToStr(DateTimePicker1.Checked, True));
end;
Run Code Online (Sandbox Code Playgroud)
上面的代码在Windows XP上按预期工作,但在Windows 7上,Checked无论该复选框的实际状态如何,该属性都返回True.
为什么Checked属性返回始终为True,即使取消选中复选框也是如此?有办法以某种方式修复或解决这个问题吗?
PS我的应用程序使用Windows主题
在Delphi 2010中有什么方法可以检测当dgRowSelect设置为True 时单击了哪个单元格?
通常我会使用OnCellClick(Column: TColumn)事件处理程序,但这不会按预期工作.使用dgRowSelect = False此过程将传递单击的列,但dgRowSelect = True无论单击哪个列,都会将此过程传递给第一列.
我无法解决代码调用参数OnCellClick传递的位置TColumn,如果我能找到我可能能够解决如何修复这种奇怪的行为.
有没有办法在指定的时间内显示一个消息框(这意味着,当指定的时间过去时,消息框将自动关闭)?
来自C++背景,我理解类,指针和内存地址相当不错.然而,对于Delphi,我发现自己很困惑.
我理解当你在var一个函数/过程的部分声明一个特定类型的类的变量时,你真正声明的是该类的指针.例如,以下Delphi和C++大致相同,都分配MyObject了堆上类所需的内存量.
// Delphi
procedure Blah.Something();
var
o: MyObject;
begin
o := MyObject.Create;
o.Free;
end;
// C++
void Blah::Something()
{
MyObject *o = new MyObject();
delete o;
}
Run Code Online (Sandbox Code Playgroud)
在C++中,使用指针(和引用)允许对类层次结构使用虚方法.但是,如果您没有类层次结构,则可以在堆栈上声明一个变量(执行速度更快).如果需要将变量作为指针传递,则只需使用&运算符获取其地址即可.
// C++
void Blah::Something()
{
// This is allocated on the stack.
MyObject o;
// This address of this stack-allocated object is being used.
doSomethingWithAnOhPointer(&o);
}
Run Code Online (Sandbox Code Playgroud)
在这个阶段,我有一些关于Delphi使用类和指针的问题.
o := MyObject.Create在Delphi中使用堆分配创建对象,如何在堆栈上分配对象?o: MyObject实际上是指针,那么为什么^指针符号从未使用过.这是德尔福的"便利"成语吗?你怎么能得到MyObject堆上实际的地址?我试过了:以下.
WriteLogLine('Address of object: ' …Run Code Online (Sandbox Code Playgroud)我正在尝试保存JSON,其中IP是关键.预期的JSON结果是:
{"SnmpManagers":[{"10.112.25.235":162}]}
Run Code Online (Sandbox Code Playgroud)
Delphi SuperObject代码:
const
IpAddr = '10.112.25.235';
Port = 162;
var
tmp: TSuperObject;
begin
tmp := TSuperObject.Create;
tmp.I[IpAddr] := Port;
Json.A['SnmpManagers'].Add(tmp);
end;
Run Code Online (Sandbox Code Playgroud)
SuperObject将点解析为JSON对象的路径分隔符:
{"SnmpManagers":[{"10":{"112":{"25":{"235":162}}}}]}
Run Code Online (Sandbox Code Playgroud)
如何使用SuperObject正确地将IP保存为JSON密钥?
我正在尝试定义TWaveFormatExtensible类型,但是我不确定是否正确声明了Samples联合。这是头文件(Windows SDK 10.0.17763.0)中的原始声明:
typedef struct {
WAVEFORMATEX Format;
union {
WORD wValidBitsPerSample; /* bits of precision */
WORD wSamplesPerBlock; /* valid if wBitsPerSample==0 */
WORD wReserved; /* If neither applies, set to zero. */
} Samples;
DWORD dwChannelMask; /* which channels are */
/* present in stream */
GUID SubFormat;
}
Run Code Online (Sandbox Code Playgroud)
这就是我尝试过的:
type
TWAVEFORMATEX = record
wFormatTag: Word;
nChannels: LongWord;
nSamplesPerSec: Word;
nAvgBytesPerSec: LongWord;
nBlockAlign: Word;
wBitsPerSample: Word;
cbSize: Word;
end;
TWaveFormatExtensible = record
Format: TWAVEFORMATEX; …Run Code Online (Sandbox Code Playgroud) delphi ×8
delphi-2010 ×2
inno-setup ×2
c++ ×1
class ×1
delphi-2007 ×1
delphi-7 ×1
delphi-xe ×1
dom ×1
ip-address ×1
json ×1
messagebox ×1
nsis ×1
parsing ×1
plugins ×1
pointers ×1
screenshot ×1
superobject ×1
tdbgrid ×1
twebbrowser ×1
winapi ×1
windows-7 ×1