如何解决“无法创建表单。当前没有活动的 MDI 表单”这个问题。我想制作一个简单的程序,需要一个登录表单才能访问主表单。我得到了三个表单:主表单(MDI 表单)、Form2(MDIChild)和登录表单(普通)。登录表单将首先出现,然后是主表单,然后当我尝试从主表单调用表单 2 时,会显示错误“无法创建表单。当前没有活动的 MDI 表单”。我在 Windows XP 上使用 Delphi 7。我是初学者。先生非常感谢您。
我在 Delphi 7 中有一个特定问题,我正在尝试运行由外部创建的自定义应用程序,因此从某种意义上说,我是尝试修复错误等的自由职业者。
问题:不满意的前向或外部声明
这与 TMS Component Pack v5 有关,我遇到的问题是PictureContainer.pas.
这是我得到的错误:
[错误] PictureContainer.pas(135): 不满意的前向或外部声明:'THTMLPicture.GetStretched'
[错误] PictureContainer.pas(136): 不满意的前向或外部声明:'THTMLPicture.SetStretched'
[错误] PictureContainer.pas(188): 不满意的前向或外部声明:'THTMLPictureCache.Destroy'
[致命错误] HTMLStatusBar.pas(29): 无法编译使用的单元“PictureContainer.pas”
我一直在尝试为此找到解决方案,并且有很多解决方案,但在这一点上我有点迷失了,因为我对这种类型的错误知之甚少。
请,任何帮助将不胜感激
谢谢
这是 PictureContainer.pas 源代码的相关摘录:
unit PictureContainer;
{$I TMSDEFS.INC}
interface
//CUT
type
//NOTE: THTMLPicture is not defined in this unit, but we do have includes...
{$I WIIF.PAS}
//CUT
implementation
//CUT
{$I WIIMPL.PAS}
//CUT
{ TPictureCollection } Error line 135 <-------------
Error line 136 <-------------
function TPictureCollection.Add: TPictureItem;
//CUT
constructor TPictureContainer.Create(AOwner: TComponent); Error line …Run Code Online (Sandbox Code Playgroud) 我需要为包含的 3rd 方库设置两个环境变量(当我的应用程序运行时)。
问题是“那样”它不起作用,但是当我运行控制台应用程序时,设置这两个变量然后运行应用程序,一切正常......
如何正确配置这两个变量?
我使用的程序:
function SetEnvVarValue(const VarName,
VarValue: string): Integer;
begin
// Simply call API function
if SetEnvironmentVariable(PChar(VarName),
PChar(VarValue)) then
Result := 0
else
Result := GetLastError;
end;
Run Code Online (Sandbox Code Playgroud)
它返回 0
也许问题是,我在应用程序启动时加载了库。当我的应用程序启动时,我设置了变量,但我这样做太晚了......?
更多信息
我在 dpr 中包含了两个单元:
'C:\Program Files (x86)\Borland\Delphi7\Lib\Magick\magick\ImageMagick.pas' 中的 ImageMagick,'C:\Program Files (x86)\Borland\Delphi7\Lib\Magick\wand\magick_wand 中的 magick_wand .pas';
和单位:
unit DoItFirst;
interface
uses
Windows, Sysutils;
var
s: string;
error: Integer;
function _putenv_s(const lpName, lpValue: PChar): BOOL; cdecl; external 'msvcrt.dll';
implementation
function GetEnvVarValue(const VarName: string): string;
var
BufSize: Integer; // buffer size …Run Code Online (Sandbox Code Playgroud) 我有这个字符串,我需要将一些字符设为大写,所以我使用该UpCase命令......但是如果我需要从大写字母中生成小字符怎么办?在这种情况下我用什么?
与在 MS Visual Studio 中一样,我想为 Delphi 程序中的某些代码添加书签,但在 IDE 中找不到它。有了它,我将能够找回一段代码并在不同的文件之间切换,而不会丢失我正在工作的确切行。
在 Delphi 7 中可以吗?
我是初学者。我收到了一个.rar包含一堆文件的文件。我认为它们用于生成表单。
下面是一个例子:
备份管理器.dfm
备份管理器文件
波形控制.dfm
WaveControl.pas
那么,任何人都可以帮助我准确了解如何使用它们吗?
我想运行多个线程。每个线程都应该将 JPEG 转换为位图。转换有效,但我的整个应用程序始终使用 12%-13% 的 CPU。我有一个 8 核 CPU,所以整个应用程序似乎只使用一个核。此外,当线程正在工作时,主窗体被冻结并且没有响应。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Jpeg, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Str: TMemoryStream;
procedure OnTerminate(Sender: TObject);
end;
TMakeThumbThread= class(TThread)
private
FStream: TStream;
public
FBmp: TBitmap;
constructor Create(Str: TStream);
procedure Execute; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TMakeThumbThread.Create(Str: TStream);
begin
inherited Create(True);
FStream := Str;
FreeOnTerminate …Run Code Online (Sandbox Code Playgroud) 我TDBMemo在 Delphi 7 中使用一个控件。我想防止用户将CTRL+V.
此解决方案不起作用:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key=#22) or (Key=#3) then Key:=#0; // 22 = [Ctrl+V] / 3 = [Ctrl+C]
end;
Run Code Online (Sandbox Code Playgroud)
所以,我尝试了别的东西:
if (Key=#86) then Key := #0; // this is ok, doesnt allow letter v.
Run Code Online (Sandbox Code Playgroud)
但是当我尝试:
if (Key=#17) AND (Key=#86) then Key := #0; // #17 is supposed to be CTRL value...
Run Code Online (Sandbox Code Playgroud)
它不起作用。
我正在使用 Delphi 7 并尝试在运行时创建一个WebBrowserinside a Form,但无法使其工作。这是代码:
procedure TForm1.Button1Click(Sender: TObject);
var
Form: TForm;
Brws: TWebBrowser;
begin
Form := TForm.Create(nil);
try
Form.Width := 500;
Form.Height := 500;
Form.BorderStyle := bsDialog;
Form.Position := poScreenCenter;
Form.Caption := 'Select the Option';
Brws := TWebBrowser.Create(Form);
Brws.ParentWindow := Form.Handle;
TWinControl(Brws).Parent := Form;
Brws.Align := alClient;
Brws.AddressBar := False;
Brws.MenuBar := False;
Brws.StatusBar := False;
Application.ProcessMessages;
if Form.ShowModal = mrOk then
Brws.Navigate('https://www.google.com');
finally
Form.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
结果就像 WebBrowser 没有响应。我有一个白屏,没有错误消息。
请问,我错过了什么?谢谢!