GVKun编程网logo

最简单的Delphi程序(控制台)(delphi控制台输出)

17

在本文中,我们将带你了解最简单的Delphi程序(控制台)在这篇文章中,我们将为您详细介绍最简单的Delphi程序(控制台)的方方面面,并解答delphi控制台输出常见的疑惑,同时我们还将给您一些技巧

在本文中,我们将带你了解最简单的Delphi程序(控制台)在这篇文章中,我们将为您详细介绍最简单的Delphi程序(控制台)的方方面面,并解答delphi控制台输出常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的01.Delphi 最简单的接口、Delphi GUI程序中使用控制台、delphi – 发送电子邮件最简单的方法是什么?、Delphi – 显示来自SW_HIDE状态的控制台应用程序

本文目录一览:

最简单的Delphi程序(控制台)(delphi控制台输出)

最简单的Delphi程序(控制台)(delphi控制台输出)

总结

以上是小编为你收集整理的最简单的Delphi程序(控制台)全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

01.Delphi 最简单的接口

01.Delphi 最简单的接口

我想学习一个插件框架,但是那个框架里面大量用到了接口,于是不得不把接口看一下了。总感觉接口编程这一块非常的绕,每一行都注释了。

unit Unit1;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls;

type
  // 父接口
  IGreetable = interface
    [''{FE5A34E5-21AB-4120-971B-FDC3241AD55D}'']
    // 用于返回一段文本
    function SayHello: string;
  end;

  TMan = class(TObject, IGreetable)
    function SayHello: string;
    // 接口都会有的3个函数(QueryInterface,_AddRef,_Release)
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    // 弹出一段文本
    procedure Greeting(Intf: IGreetable);
    {Private declarations}
  public
    {Public declarations}
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

// 这里实现自己定义的_AddRef、_Release和QueryInterface方法

// 用于查找接口
function TMan.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
  // 找到返回0,找不到返回''No such interface supported''
  if GetInterface(IID, Obj) then
    Result := 0
  else
    Result := Windows.E_NoInterface;
end;

// 接口调用计数
function TMan._AddRef: Integer;
begin
  Result := -1
end;

// 接口释放计数
function TMan._Release: Integer;
begin
  Result := -1
end;

// 客户函数,返回一段文本
function TMan.SayHello: string;
begin
  Result := ''Hello'';
end;

procedure TForm1.Greeting(Intf: IGreetable);
begin
  // 输出一段话
  ShowMessage(Intf.SayHello);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  // 定义一个父接口
  Intf: IGreetable;
begin
  // 子接口创建
  Intf := TMan.Create;
  // 调用的是子接口中的Greeting函数
  Greeting(Intf);
end;

end.

 

Delphi GUI程序中使用控制台

Delphi GUI程序中使用控制台

总结

以上是小编为你收集整理的Delphi GUI程序中使用控制台全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

delphi – 发送电子邮件最简单的方法是什么?

delphi – 发送电子邮件最简单的方法是什么?

我想从我的Delphi程序发送一封简单的电子邮件.更具体地说,如果我的程序遇到异常,我想通过用户提供的任何指定的电子邮件地址来提供发送错误的选项,当然可以发送电子邮件,以便任何情况本身将是有益的.有能力发送附件是一个奖金,但不是必需的.

我已经尝试过许多在线发现的例子,但大多数情况似乎不起作用.其中一些需要SMTP服务器等参数,但如果我的用户可以自由输入自己的电子邮件地址,我的程序如何确定?另外我没有在我的电脑安装默认的电子邮件客户端,所以如果我无法从我的程序发送电子邮件,那么我相信任何人谁使用我的程序将有同样的问题.

所以基本上我问的是:

>如何发送电子邮件
>附件不是必需的,但会有其优点
>如何处理SMTP服务器,端口号等的事情?
>如果没有安装默认的电子邮件客户端,该如何处理

我希望我的帖子很容易理解.

谢谢

解决方法

我将从可能的解决方案开始,然后解释为什么替代品最多是有问题的:

可能的解决方案

>不要从客户端计算机发送电子邮件,使用Web服务传递邮件.无论什么技术驱动您的网站,它可以处理发布的表单,它可以发送电子邮件.只需将用户的问题发送到您的Web服务,并将您的Web服务使用电子邮件发送给您或将其保存到数据库.如果用户认为他连接到互联网,他可能会这么说,因为他的浏览器可以工作,但只说HTTP是正常的:SMTP可能被公司的防火墙或ISP阻止.这是我的首选解决方案.
>使用您的SMTP服务器和您的凭据发送电子邮件.从用户的地址发送电子邮件是非常不可靠的.您可以将用户的电子邮件地址添加到“REPLY TO”标题中,或者将其放在消息正文中.您可以使用Indy组件来执行此操作,因为它是您的SMTP服务器和凭据,您可以了解所有详细信息.如以前的项目符号所述,这可能会失败,因为SMTP可能被用户的防火墙或ISP的防火墙阻止.

关于SMTP

首先关于SMTP协议本身的几个字,因为一切都是基于这一点:

> SMTP是用于发送电子邮件的协议.还有其他实现特定协议,但是所有电子邮件服务器都需要实现SMTP.
> SMTP是在垃圾邮件之前设计的.它允许任何计算机发送电子邮件到任何服务器.发送电子邮件绝对不需要认证(理论上),服务器的SMTP服务器地址作为MX记录存储在DNS中.
> SMTP本身绝对没有验证发件人的方式,不尝试检查用户是否真的是“发件人”字段中的用户.

从用户的电子邮件地址发送电子邮件有什么问题

从用户地址发送电子邮件时的第一个选项是使用本地安装的客户端和自动化,以便它们呈现一个现成的Outlook(或Firefox或其他)电子邮件表单,只需点击“发送”即可.但是你说你希望你的解决方案能够正常工作,甚至没有安装本地电子邮件,所以这不是一个选择.

你提到你希望实现这个要求用户只有她的电子邮件地址,没有服务器的详细信息,我没有使用用户名和密码. SMTP协议实际上允许这一点,因为它没有内置机制来验证发件人.垃圾邮件人员利用这一点,这被称为“欺骗发件人地址”.为了防止这两件事发生:

> SMTP主机不再接受任何人的电子邮件,他们尝试以某种方式验证发送的SMTP服务器.换句话说,您的SMTP服务器将拒绝您发送给您的假电子邮件!建议的修复方法是使用SMTP中继.但是之后…
> SMTP中继不再从未知用户转发电子邮件! SMTP本身不提供任何身份验证机制,但通常的解决方法是首先阅读电子邮件(因为该部分需要身份验证)才能发送电子邮件.这可以通过您可能正在使用的发送SMTP组件自动完成,但无论如何,这需要用户名和密码.

如果这还不够,请考虑一下另一种方式:您是否期望有人知道您的电子邮件地址能够从您的电子邮件地址发送电子邮件?

Delphi – 显示来自SW_HIDE状态的控制台应用程序

Delphi – 显示来自SW_HIDE状态的控制台应用程序

我在Delphi中有一个控制台应用程序,我从另一个应用程序开始这样:

FillChar(ExecInfo,SizeOf(ExecInfo),0);
With ExecInfo Do Begin
  cbSize :=       SizeOf(ExecInfo);
  fMask :=        SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOASYNC;
  Wnd :=          GetActiveWindow();
  lpVerb :=       PChar('runas');
  lpFile :=       PChar(FsCurrentPath + 'Install\Install_Elevated.exe');
  lpDirectory :=  PChar(FNew.sBinDir);
  lpParameters := PChar(sl.DelimitedText);
  nShow :=        SW_HIDE
End;
ShellExecuteEx(@ExecInfo);

在某些情况下,我想让它显示出来(采取SW_SHOWnorMAL状态).我该怎么做?

这样它不会显示:

ShowWindow(GetConsoleWindow,SW_SHOW);

即使不是这样的:

BringWindowToTop(GetConsoleWindow);
SetActiveWindow(GetConsoleWindow);
SetForegroundWindow(GetConsoleWindow);
ShowWindow(GetConsoleWindow,SW_SHOW)

但它以这种方式表现出来:

MessageBox(GetConsoleWindow,PChar(IntToStr(GetConsoleWindow)),PChar(''),MB_SETFOREGROUND);
ShowWindow(GetConsoleWindow,SW_SHOW);

但当然我不想要这个消息框.

问题是什么?

解决方法

shell通过CreateProcess()将您通过SHELLEXECUTEINFO提供的信息传递给控制台应用程序,该控制台应用程序在您第一次尝试显示控制台窗口时会遵循该信息.

ShowWindow()的文档说:

nCmdshow [in]
Type: int

Controls how the window is to be shown. This parameter is ignored the first time an application calls ShowWindow,if the program that launched the application provides a 07001 structure. Otherwise,the first time ShowWindow is called,the value should be the value obtained by the WinMain function in its nCmdshow parameter. In subsequent calls,this parameter can be one of the following values…

因此,第一次调用ShowWindow时,传递给ShellExecuteEx()的SW_HIDE生效.在后续调用中,您指定的参数将生效.

我们今天的关于最简单的Delphi程序(控制台)delphi控制台输出的分享就到这里,谢谢您的阅读,如果想了解更多关于01.Delphi 最简单的接口、Delphi GUI程序中使用控制台、delphi – 发送电子邮件最简单的方法是什么?、Delphi – 显示来自SW_HIDE状态的控制台应用程序的相关信息,可以在本站进行搜索。

本文标签: