我使用以下代码在Borland Delphi 7的StatusBar中以我的母语印度尼西亚显示LongDayName,LongMonthName和Year。
但是当我将FormatDateTime('dddd, dd mmmm yyyy', vDate);
放入状态栏时,我收到了错误消息:
[Error] Unit1.pas(47): Undeclared identifier: 'vDate'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
当我使用FormatDateTime('dddd, dd mmmm yyyy', Now);
时,结果仍为英文:
如何解决此问题以在印尼语中显示?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
public
function Tanggal(vDate: TDateTime): String;
end;
var
Form1: TForm1;
implementation
function TForm1.Tanggal(vDate: TDateTime): String;
var
Counter: byte;
const
NamaHari : Array [1..7] of string = ('Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu');
NamaBulan: Array [1..12] of String = ('Januari','Februari','Maret','April','Mei','Juni','Juli',
'Agustus','September','Oktober','November','Desember');
begin
For Counter := 1 to 7 do
LongDayNames[Counter]:=NamaHari[Counter];
For Counter := 1 to 12 do
LongMonthNames[Counter]:=NamaBulan[Counter];
Result := FormatdateTime('dddd, dd mmmm yyyy', vDate);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Statusbar1.Panels[0].Text := FormatDateTime('dddd, dd mmmm yyyy', Now);
end;
end.
答案 0 :(得分:4)
你几乎就在那里。
FormatDateTime('dddd, dd mmmm yyyy', vDate);
由于Undeclared identifier: 'vDate'
不存在,因vDate
而失败 - 它是Tanggal()
方法中参数的名称,因此不存在在Timer1Timer
方法中。
其次,您只能在Timer1Timer
获得英语结果,因为您从未调用Tanggal()
,这是设置全局格式设置并返回印尼格式化日期字符串的内容。
也就是说,Timer1Timer
根据全局格式设置触发并格式化日期。它永远不会使用您的自定义设置,因为您还没有将它们设置为全局设置。工作代码是:
Statusbar1.Panels[0].Text := Tanggal(Now);
将Now
的结果传递给Tanggal()
,其中它是参数vDate
;设置设置;使用它们格式化日期;返回该字符串;并将该字符串设置为状态栏面板。
但是,您不应每次都设置格式设置(在程序启动时执行一次),或者您应该使用单独的TFormatSettings
变量,这样您就不会覆盖全局变量。然后,您可以将其作为第三个参数传递给FormatDateTime
。
答案 1 :(得分:2)
当您可以直接从Windows获取月份名称时,没有理由对其进行硬编码:
首先制作一个程序来设置月份名称并从 FormCreate
中调用它procedure SetupMonthDayNames;
var
I, Day: Integer;
const
IndonesianLCID = 1057;
begin
for I := 1 to 12 do
begin
ShortMonthNames[I] := GetLocaleStr(IndonesianLCID, LOCALE_SABBREVMONTHNAME1 + I - 1, ShortMonthNames[I]);
LongMonthNames[I] := GetLocaleStr(IndonesianLCID, LOCALE_SMONTHNAME1 + I - 1, LongMonthNames[I]);
end;
for I := 1 to 7 do
begin
Day := (I + 5) mod 7;
ShortDayNames[I] := GetLocaleStr(IndonesianLCID, LOCALE_SABBREVDAYNAME1 + Day, ShortDayNames[I]);
LongDayNames[I] := GetLocaleStr(IndonesianLCID, LOCALE_SDAYNAME1 + Day, LongDayNames[I]);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetupMonthDayNames;
end;
然后你可以从你的计时器更新状态栏:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Statusbar1.Panels[0].Text := FormatDateTime('dddd, dd mmmm yyyy', Now);
end;
它将是印度尼西亚语。