修改TMS IWAdvWebGrid日期格式

一。 修改两个res文件 tmsiwcal.res 和 tmsiwgridcal.RES

将stgl(sel)函数(选择值放入编辑框)中的这部分修改,设置格式 YYYY-MM-DD ,这是选择日期返回值的格式,res文件大小不能变. (应该有办法转换res文件,取出修改后写回,找找)

TypeScript 复制代码
if (i > 0) {
<#COMPNAME>day = parseInt(s);
if(<#COMPNAME>day < 10) <#COMPNAME>day = '0' + <#COMPNAME>day;
updMonth = parseInt(<#COMPNAME>month) + 1;
if(updMonth < 10) updMonth = '0' + updMonth;
if (<#COMPNAME>format == 0)

二。 修改 IWTMSCal.pas 和 IWWebGrid.pas

查找日期相关部分,修改日期格式,字符串转日期部分的修改,有多处搜索修改

Delphi 复制代码
function TTIWCustomWebGrid.DateStrToDate(AValue: string): TDateTime;
var
  s: string;
  da, mo, ye: word;
  err: Integer;
begin
  Result := Now;
  s := AValue;                                                                         
{ 2004-01-31  和  31-01-2004 只要这两种格式 }
  if pos(FDateSeparator, s) > 0 then
  begin
    val(copy(s, 1, pos(FDateSeparator, s) - 1), ye, err);      { 原da 第一个值修改换成ye}
    delete(s, 1, pos(FDateSeparator, s));                      { 剩两个 01-2004}
    if pos(FDateSeparator, s) > 0 then
    begin
      val(copy(s, 1, pos(FDateSeparator, s) - 1), mo, err);   { 月mo = 01 }
      delete(s, 1, pos(FDateSeparator, s));                   { 剩一个年  2004 }
      val(s, da, err);								    { ye = 2004  无错err为0 }
      if err = 0 then								    { err = 0 如果无错 }
      begin
        if DateFormat = gdEU then
        begin
          Result := EncodeDate(ye, mo, da);
        end
        else
        begin
          Result := EncodeDate(ye, da, mo);  //好像不对,没改,一般不用这种格式
        end;
      end;
    end;
  end;
end;
Delphi 复制代码
function TTIWCalendar.JSDateToDate(AValue: string): TDateTime;   {2024-08-13 Ի     }
var
  s:string;
  da,mo,ye:word;
  err: Integer;
begin
  Result := Now;

  s := AValue;

  if pos('/',s) > 0 then
  begin
    //  从1开始取到/前的字符串,然后转成值 ye , 成功 err = 0   取年份
    val(copy(s,1,pos('/',s)-1),ye,err);   {err == 0,no error}
    delete(s,1,pos('/',s));
    if pos('/',s) > 0 then
    begin
      val(copy(s,1,pos('/',s)-1),mo,err);                     // 取月份
      delete(s,1,pos('/',s));                                 // 删除/前的,只剩日期
      val(s,da,err);                                          //取日期
      if err = 0 then
      begin
        if (mo < 12) then
        begin
          if (daysinmonth(mo + 1,ye) >= da) then
            Result := EncodeDate(ye,mo+1,da)
          else
            Result := EncodeDate(ye,mo+1,daysinmonth(mo + 1,ye));
        end
        else
          Result := 0;
        Day := da;
        Month := mo + 1;
        Year := ye;
      end;
    end;
  end;
end;

修改 function TTIWCustomWebGrid.RenderCalendar 中部分显示格式

TypeScript 复制代码
    if DateFormat = gdEU then
{      html := StringReplace(html, '<#CALVALUE>', IntToStr(Day) + FDateSeparator + IntToStr(Month) + FDateSeparator + IntToStr(Year), [rfReplaceAll, rfIgnoreCase])  2024-08-13修改为下面}
    begin
    var
      FS : TFormatSettings;
      FS.ShortDateFormat:='yyyy-MM-dd';
      html := StringReplace(html, '<#CALVALUE>', DateToStr(EncodeDate(Year,Month,Day),FS), [rfReplaceAll, rfIgnoreCase])
    end

res文件取出查看

Delphi 复制代码
unit Unit1;

{$I DELPHIXE.INC}
{$I TMSDEFS.INC}
interface

{$R tmsiwgrid.res}
{$R tmsiwgridjs.res}
{$R tmsiwgridcal.res}

{$R tmsiwqtip.RES}
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  reshandle: THandle;
  hglobal: THandle;
  ressize: dword;
  ptr: pointer;
  html: string;
  Day, Month, Year: Word;
  p: ansichar;
  CodeDateSeparator: integer;

begin
  reshandle := FindResource(hinstance, 'TMSIWGRID', RT_RCDATA);  // RT_RCDATA = PChar(10); 从res中取代码 然后替换内容
  hglobal := LoadResource(hinstance, reshandle);
  Ressize := SizeOfResource(hinstance, reshandle);
  ptr := LockResource(hglobal);

  Memo1.Clear;
  html := '';
  for i := 1 to ressize do
  begin
    p := ansichar(ptr^);
    html := html + string(p);
    ptr := pointer(integer(ptr) + 1);
  end;
  Memo1.Lines.Add(html);
end;

end.
相关推荐
待磨的钝刨6 分钟前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
九河云1 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
Lary_Rock1 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
幺零九零零2 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
云飞云共享云桌面3 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
逐·風3 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫4 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
尚梦4 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
GIS程序媛—椰子5 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
前端青山5 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js