使用滚动/移动消息delphi xe7显示信息

使用滚动/移动消息delphi xe7显示信息,delphi,delphi-xe7,Delphi,Delphi Xe7,您好,先生/女士 我想创建一个带有滚动信息的状态栏,如 操作系统版本 当前用户名 日期和时间 。 这是我的全部代码 我想要实现的是在状态栏上移动信息 如果可以,请帮忙 谢谢。您不应该使用Timer.Interval作为查找值来确定应该在状态栏中显示哪些数据。使用单独的变量来实现这一点。这将使你的代码更干净 unit Unit1; interface uses Winapi.Windows, System.SysUtils, System.Classes, System.Win.Regis

您好,先生/女士 我想创建一个带有滚动信息的状态栏,如 操作系统版本 当前用户名 日期和时间

。 这是我的全部代码

我想要实现的是在状态栏上移动信息 如果可以,请帮忙 谢谢。

您不应该使用Timer.Interval作为查找值来确定应该在状态栏中显示哪些数据。使用单独的变量来实现这一点。这将使你的代码更干净

unit Unit1;

interface

uses
  Winapi.Windows, System.SysUtils, System.Classes, System.Win.Registry, 
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.ComCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    tmr2: TTimer;
    stsbr: TStatusBar;
    procedure FormCreate(Sender: TObject);
    procedure tmr2Timer(Sender: TObject);
  private
    status: integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetUsersName: string;
var
  Buf: array [0 .. MAX_PATH] of Char;
  BufSize: longword;
begin
  Buf[0] := #$00;
  BufSize := MAX_PATH;
  if Winapi.Windows.GetUserName(Buf, BufSize) then Result := Buf
  else Result := '';
end;

function GetLocalPCName: string;
var
  Buf: array [0 .. MAX_COMPUTERNAME_LENGTH] of Char;
  BufSize: longword;
begin
  Buf[0] := #$00;
  BufSize := MAX_COMPUTERNAME_LENGTH;
  if Winapi.Windows.GetComputerName(Buf, BufSize) then Result := Buf
  else Result := '';
end;

function GetOSVersion: string;
begin
  Result := TOSVersion.ToString;
end;

function GetCPUName: string;
var
  Reg: TRegistry;
begin
  Result := '';
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKeyReadOnly('\Hardware\Description\System\CentralProcessor\0') then
      begin
        Result := Reg.ReadString('ProcessorNameString');
        Reg.CloseKey;
      end;
  finally
    Reg.Free;
  end;
end;

procedure TForm1.tmr2Timer(Sender: TObject);
begin
  case status of
    0 : stsbr.Panels[1].Text:= FormatDateTime('dddd' + ', ' + 'dd/mm/yyyy',date) + ', ' + TimeToStr(Time);
    1 : stsbr.Panels[1].Text:= 'PC Owner: ' + GetUsersName + ' - ' + GetLocalPCName;
    2 : stsbr.Panels[1].Text:= GetOSVersion;
    else stsbr.Panels[1].Text:= GetCPUName;
  end;
  inc(status);
  if status > 3 then status := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  status := 0;
  // this property can also be set through IDE form designer
  tmr2.Enabled := true;
  // show initial status data
  tmr2Timer(Sender);
end;

end.
您不应该使用Timer.Interval作为查找值来确定应该在状态栏中显示哪些数据。使用单独的变量来实现这一点。这将使你的代码更干净

unit Unit1;

interface

uses
  Winapi.Windows, System.SysUtils, System.Classes, System.Win.Registry, 
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.ComCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    tmr2: TTimer;
    stsbr: TStatusBar;
    procedure FormCreate(Sender: TObject);
    procedure tmr2Timer(Sender: TObject);
  private
    status: integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetUsersName: string;
var
  Buf: array [0 .. MAX_PATH] of Char;
  BufSize: longword;
begin
  Buf[0] := #$00;
  BufSize := MAX_PATH;
  if Winapi.Windows.GetUserName(Buf, BufSize) then Result := Buf
  else Result := '';
end;

function GetLocalPCName: string;
var
  Buf: array [0 .. MAX_COMPUTERNAME_LENGTH] of Char;
  BufSize: longword;
begin
  Buf[0] := #$00;
  BufSize := MAX_COMPUTERNAME_LENGTH;
  if Winapi.Windows.GetComputerName(Buf, BufSize) then Result := Buf
  else Result := '';
end;

function GetOSVersion: string;
begin
  Result := TOSVersion.ToString;
end;

function GetCPUName: string;
var
  Reg: TRegistry;
begin
  Result := '';
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKeyReadOnly('\Hardware\Description\System\CentralProcessor\0') then
      begin
        Result := Reg.ReadString('ProcessorNameString');
        Reg.CloseKey;
      end;
  finally
    Reg.Free;
  end;
end;

procedure TForm1.tmr2Timer(Sender: TObject);
begin
  case status of
    0 : stsbr.Panels[1].Text:= FormatDateTime('dddd' + ', ' + 'dd/mm/yyyy',date) + ', ' + TimeToStr(Time);
    1 : stsbr.Panels[1].Text:= 'PC Owner: ' + GetUsersName + ' - ' + GetLocalPCName;
    2 : stsbr.Panels[1].Text:= GetOSVersion;
    else stsbr.Panels[1].Text:= GetCPUName;
  end;
  inc(status);
  if status > 3 then status := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  status := 0;
  // this property can also be set through IDE form designer
  tmr2.Enabled := true;
  // show initial status data
  tmr2Timer(Sender);
end;

end.

我得到这个错误,我使用xe7你的代码,我已经更新了缺少函数的代码。从你的问题中不清楚你到底在寻找什么。这就是上面更新的代码所做的,问题是什么?我收到了这个错误我使用了xe7你的代码我用缺少的函数更新了代码。你的问题不清楚你到底在寻找什么。这就是上面更新的代码所做的,问题是什么?