⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ueditsms.pas

📁 FMA is a free1 powerful phone editing tool allowing users to easily manage all of the personal data
💻 PAS
字号:
unit uEditSMS;

{
*******************************************************************************
* Descriptions: SMS Detail view implementation
* $Source: /cvsroot/fma/fma/uSMSDetail.pas,v $
* $Locker:  $
*
* Todo:
*   - More information to show
*
* Change Log:
* $Log: uSMSDetail.pas,v $
*
*******************************************************************************
}

interface

uses
  Windows, TntWindows, Messages, SysUtils, TntSysUtils, Variants, Classes, TntClasses, Graphics, TntGraphics,
  Controls, TntControls, Forms, TntForms, Dialogs, TntDialogs, ExtCtrls, TntExtCtrls, StdCtrls, TntStdCtrls,
  ComCtrls, TntComCtrls, UniTntCtrls, uMessageData, uDialogs;

type
  TfrmDetail = class(TTntForm)
    PageControl1: TTntPageControl;
    TabSheet1: TTntTabSheet;
    lblTarget: TTntLabel;
    edFrom: TTntEdit;
    Label1: TTntLabel;
    edSMSC: TTntEdit;
    lblDate: TTntLabel;
    OkButton: TTntButton;
    Label4: TTntLabel;
    memoText: TTntMemo;
    Image1: TTntImage;
    Bevel2: TTntBevel;
    lblName: TTntLabel;
    TabSheet2: TTabSheet;
    lblName2: TTntLabel;
    Image2: TTntImage;
    Bevel3: TTntBevel;
    Label10: TTntLabel;
    edLongCount: TTntEdit;
    Label6: TTntLabel;
    edUDHI: TTntEdit;
    ebRef: TTntEdit;
    Label7: TTntLabel;
    Label5: TTntLabel;
    memoPDU: TTntMemo;
    TntLabel1: TTntLabel;
    edLocation: TTntEdit;
    TimeStampDate: TTntDateTimePicker;
    TimeStampTime: TTntDateTimePicker;
    ChangeButton: TTntButton;
    CancelButton: TTntButton;
    ApplyButton: TTntButton;
    TntTabSheet1: TTntTabSheet;
    lblName3: TTntLabel;
    Image3: TTntImage;
    TntBevel1: TTntBevel;
    TntLabel3: TTntLabel;
    mmoDRPDU: TTntMemo;
    TntLabel4: TTntLabel;
    edDRStatus: TTntEdit;
    TntLabel5: TTntLabel;
    edDRRepDate: TTntEdit;
    TntLabel6: TTntLabel;
    edDRInfo: TTntEdit;
    procedure OkButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ChangeButtonClick(Sender: TObject);
    procedure TimeStampChange(Sender: TObject);
    procedure ApplyButtonClick(Sender: TObject);
    procedure TimeStampDateKeyPress(Sender: TObject; var Key: Char);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure CancelButtonClick(Sender: TObject);
  private
    { Private declarations }
    FTimestamp: TDateTime;
    FCanEditTime: boolean;
    FSMS: TFmaMessageData;
    FModified: boolean;
    procedure SetSMS(const Value: TFmaMessageData);
    procedure DoShowTimestamp;
    procedure DoSetTimestamp(Value: TDateTime);
  public
    { Public declarations }
    property SMS: TFmaMessageData read FSMS write SetSMS;
    property IsModified: boolean read FModified write FModified;
  end;

var
  frmDetail: TfrmDetail;

implementation

uses
  gnugettext, gnugettexthelpers,
  uSMS, Unit1, uMissedCalls, DateUtils, VirtualTrees;

{$R *.dfm}

resourcestring
  sNoInfo = '(No Information)';
  sChange = 'Chang&e';
  sReset  = '&Reset';

{ TfrmDetail }

procedure TfrmDetail.SetSMS(const Value: TFmaMessageData);
var
  sms: Tsms;
  ARef, ATot, An: Integer;
begin
  FModified := False;
  FSMS := Value;

  sms := TSMS.Create;
  try
    sms.PDU := FSMS.PDU;

    edFrom.Text := FSMS.From;

    memoText.Text := sms.Text;
    edUDHI.Text := sms.UDHI;
    if edUDHI.Text = '' then edUDHI.Text := sNoInfo;
    ebRef.Text := sms.MessageReference;

    edSMSC.Text := sms.SMSC;
    if edSMSC.Text = '' then edSMSC.Text := sNoInfo;

    FCanEditTime := False;
    ChangeButton.Tag := 0;
    ChangeButton.Caption := sChange;
    ChangeButton.Enabled := FSMS.IsOutgoing and (FSMS.ReportPDU = '');

    DoShowTimestamp;

    memoPDU.Clear;

    if sms.IsOutgoing then begin
      lblTarget.Caption := _('To:');
      lblDate.Caption := _('Sent:');
      memoPDU.Lines.Add(WideFormat(_('Message Type: %s'),
        ['SMS SUBMIT'])); // do not localize
    end
    else begin
      lblTarget.Caption := _('From:');
      lblDate.Caption := _('Received:');
      memoPDU.Lines.Add(WideFormat(_('Message Type: %s'),
        ['SMS DELIVER'])); // do not localize
    end;
    memoPDU.Lines.Add(sLineBreak + FSMS.PDU);

    GSMLongMsgData(FSMS.PDU, ARef, ATot, An);
    if ATot < 1 then ATot := 1;

    edLongCount.Text := IntToStr(ATot);

    lblName.Caption := Form1.LookupContact(sms.Number,sUnknownContact);
    lblName2.Caption := lblName.Caption;
    lblName3.Caption := lblName.Caption;
    if ATot > 1 then
      Caption := _('Long Message')
    else
      Caption := _('Message');
    Caption := Caption + ' - [' + lblName.Caption + ']';
  finally
    sms.Destroy;
  end;

  if FSMS.ReportRequested then begin
    mmoDRPDU.Lines.Clear;
    if FSMS.ReportPDU <> '' then begin
      mmoDRPDU.Lines.Add(WideFormat(_('Message Type: %s'),['SMS STATUS REPORT'])); // do not localize
      mmoDRPDU.Lines.Add(sLineBreak + FSMS.ReportPDU);
      edDRStatus.Text := _('Response received');
      edDRRepDate.Text := DateTimeToStr(FSMS.TimeStamp);
      if FSMS.StatusCode = $FF then
        edDRInfo.Text := sNoInfo // unknown
      else
        if FSMS.StatusCode = 0 then
          edDRInfo.Text := _('Delivery was successful')
        else begin
          if FSMS.StatusCode and $60 = $20 then
            edDRInfo.Text := WideFormat(_('Delivery failed, still trying to deliver (code: $%.2x)'),[FSMS.StatusCode])
          else
            edDRInfo.Text := WideFormat(_('Delivery failed with status code: $%.2x'),[FSMS.StatusCode]);
        end;
    end
    else begin
      if FSMS.StatusCode = $FF then begin
        edDRStatus.Text := _('Awaiting response...');
        edDRRepDate.Text := sNoInfo;
        edDRInfo.Text := sNoInfo;
        mmoDRPDU.Lines.Text := sNoInfo;
      end
      else begin
        edDRStatus.Text := _('Not received');
        edDRRepDate.Text := sNoInfo;
        edDRInfo.Text := _('Validity period expired');
        mmoDRPDU.Lines.Text := sNoInfo;
      end;
    end;
  end
  else begin
    edDRRepDate.Text := sNoInfo;
    edDRInfo.Text := sNoInfo;
    mmoDRPDU.Lines.Text := sNoInfo;
    if FSMS.IsOutgoing then
      edDRStatus.Text := _('Not requested')
    else
      edDRStatus.Text := _('Not applicable');
  end;
end;

procedure TfrmDetail.OkButtonClick(Sender: TObject);
begin
  if ApplyButton.Enabled then ApplyButton.Click;
  Close;
end;

procedure TfrmDetail.FormCreate(Sender: TObject);
begin
  gghTranslateComponent(self);

  Image2.Picture.Assign(Image1.Picture);
  Image3.Picture.Assign(Image1.Picture);

{$IFNDEF VER150}
  Form1.ThemeManager1.CollectForms(Self);
{$ENDIF}
end;

procedure TfrmDetail.FormShow(Sender: TObject);
begin
  PageControl1.ActivePageIndex := 0;
  ApplyButton.Enabled := False;
  OkButton.SetFocus;
end;

procedure TfrmDetail.ChangeButtonClick(Sender: TObject);
begin
  if ChangeButton.Tag = 0 then begin
    FTimestamp := FSMS.TimeStamp; // save original value
    ChangeButton.Tag := 1;
    ChangeButton.Caption := sReset;
    FCanEditTime := True;
    TimeStampDate.SetFocus;
  end
  else begin
    DoSetTimestamp(FTimestamp); // reset to original value
    ChangeButton.Tag := 0;
    ChangeButton.Caption := sChange;
    ApplyButton.Enabled := False;
    FModified := True;
    FCanEditTime := False;
    DoShowTimestamp;
  end;
end;

procedure TfrmDetail.TimeStampChange(Sender: TObject);
begin
  if FCanEditTime then
    ApplyButton.Enabled := True
  else
    DoShowTimestamp;
end;

procedure TfrmDetail.ApplyButtonClick(Sender: TObject);
begin
  if FCanEditTime then begin
    DoSetTimestamp(DateOf(TimeStampDate.Date) + TimeOf(TimeStampTime.Time));
    ApplyButton.Enabled := False;
    FModified := True;
  end;
end;

procedure TfrmDetail.DoShowTimestamp;
begin
  if FSMS.TimeStamp > 0 then begin
    TimeStampDate.DateTime := FSMS.TimeStamp;
    TimeStampTime.DateTime := FSMS.TimeStamp;
  end
  else begin
    TimeStampDate.DateTime := Now;
    TimeStampTime.DateTime := Now;
  end;
end;

procedure TfrmDetail.TimeStampDateKeyPress(Sender: TObject; var Key: Char);
begin
  if not FCanEditTime and (Key in ['0'..'9']) then Key := #0;
end;

procedure TfrmDetail.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
  frmDetail := nil;
end;

procedure TfrmDetail.CancelButtonClick(Sender: TObject);
begin
  if not FModified or (MessageDlgW(_('Discard current changes?'),
    mtConfirmation, MB_YESNO or MB_DEFBUTTON2) = ID_YES) then
    Close;
end;

procedure TfrmDetail.DoSetTimestamp(Value: TDateTime);
begin
  FSMS.TimeStamp := Value;
  if Form1.frmMsgView.Visible then
    with Form1.frmMsgView.ListMsg do begin
      { if Received column selected as sort-column? }
      if (Header.SortColumn <> -1) and (Header.Columns[Header.SortColumn].Tag = 111) then
        try
          { yes, so resort the messages list }
          BeginUpdate;
          Sort(nil, Header.SortColumn, Header.SortDirection);
        finally
          EndUpdate;
        end;
    end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -