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

📄 ucomposesms.pas

📁 FMA is a free1 powerful phone editing tool allowing users to easily manage all of the personal data
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit uComposeSMS;

{
*******************************************************************************
* Descriptions: Implementation for SMS Editor Dialog
* $Source: /cvsroot/fma/fma/uComposeSMS.pas,v $
* $Locker:  $
*
* Todo:
*
* Change Log:
* $Log: uComposeSMS.pas,v $
*
*******************************************************************************
}

interface

uses
  Windows, TntWindows, Messages, SysUtils, TntSysUtils, Variants, Classes, TntClasses, Graphics, TntGraphics,
  Controls, TntControls, Forms, TntForms, Dialogs, TntDialogs, StdCtrls, TntStdCtrls, ComCtrls, TntComCtrls,
  UniTntCtrls, ToolWin, ImgList, Placemnt, Buttons, TntButtons, ExtCtrls, TntExtCtrls, Menus, TntMenus, Registry,
  uSMS;

const
  MaxFavorites = 20;

type
  TfrmMessageContact = class(TTntForm)
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    StatusBar: TTntStatusBar;
    FormPlacement1: TFormPlacement;
    Memo: TTntMemo;
    ToolBar2: TToolBar;
    WarningPanel: TTntPanel;
    Panel1: TTntPanel;
    Image1: TTntImage;
    lbWarning: TTntLabel;
    FavoritesPopupMenu: TTntPopupMenu;
    btnSend: TToolButton;
    ToolButton8: TToolButton;
    ToolButton5: TToolButton;
    ToolButton9: TToolButton;
    btnStatusReport: TToolButton;
    btnRequestReply: TToolButton;
    ToolButton1: TToolButton;
    btnSave: TToolButton;
    btnLongSMS: TToolButton;
    btnFlashSMS: TToolButton;
    btnRecent: TToolButton;
    ToolButton6: TToolButton;
    PopupMenu2: TTntPopupMenu;
    ClearMessageCounter1: TTntMenuItem;
    ToPopupMenu: TTntPopupMenu;
    Add1: TTntMenuItem;
    N1: TTntMenuItem;
    Delete1: TTntMenuItem;
    AddToPhonebook1: TTntMenuItem;
    AddToFavorites1: TTntMenuItem;
    Organize1: TTntMenuItem;
    N2: TTntMenuItem;
    btnTo: TToolButton;
    N3: TTntMenuItem;
    Edit1: TTntEdit;
    EncodingPopupMenu1: TTntPopupMenu;
    ForceUCS2Encoding1: TTntMenuItem;
    procedure SendClick(Sender: TObject);
    procedure MemoChange(Sender: TObject);
    procedure Edit1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure Edit1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure ClearClick(Sender: TObject);
    procedure MemoKeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
    procedure LongClick(Sender: TObject);
    procedure ToolBar2Resize(Sender: TObject);
    procedure ToClick(Sender: TObject);
    procedure Edit1Click(Sender: TObject);
    procedure SaveClick(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure PopupMenu1Click(Sender: TObject);
    procedure FavoritesPopupMenuPopup(Sender: TObject);
    procedure btnRecentClick(Sender: TObject);
    procedure ClearMessageCounter1Click(Sender: TObject);
    procedure PopupMenu2Popup(Sender: TObject);
    procedure ToPopupMenuPopup(Sender: TObject);
    procedure Delete1Click(Sender: TObject);
    procedure AddToPhonebook1Click(Sender: TObject);
    procedure AddToFavorites1Click(Sender: TObject);
    procedure Organize1Click(Sender: TObject);
    procedure UCS2Click(Sender: TObject);
    procedure EncodingPopupMenu1Popup(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure TntFormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
    FMaxLength: Integer;
    FDCS: TGSMCodingScheme;
    procedure DoSend(AsDraft: boolean = False);
  protected
    FChatMode: boolean;
  public
    { Public declarations }
    procedure AddRecipient(node: TTreeNode); overload;
    procedure AddRecipient(str: WideString); overload;
    procedure Clear;
  end;

var
  frmMessageContact: TfrmMessageContact;

implementation

uses
  gnugettext, gnugettexthelpers,
  Unit1, uGlobal, uSelectContact, uDialogs;

{$R *.dfm}

procedure TfrmMessageContact.MemoChange(Sender: TObject);
var
  len, packetCount, packetL: Integer;
begin
  if Form1.FForceUCSusage then
    FDCS := gcs16bitUcs2
  else
    FDCS := GSMCodingScheme(Memo.Text);

  if FDCS = gcs16bitUcs2 then begin
    StatusBar.Panels[1].Text := _('UCS-2');
    FMaxLength := 70;
  end
  else
  if FDCS = gcs8BitOctets then begin
    StatusBar.Panels[1].Text := _('8-bit');
    FMaxLength := 140;
  end
  else
  if FDCS = gcsDefault7Bit then begin
    StatusBar.Panels[1].Text := _('GSM');
    FMaxLength := 160;
  end
  else begin
    StatusBar.Panels[1].Text := _('Error');
    FMaxLength := 0;
  end;

  if not btnLongSMS.Down then begin
     if Length(Memo.Text) > FMaxLength then begin
       { Auto-switch to long-sms mode ON }
       btnLongSMS.Down := True;
     end
  end;
  if btnLongSMS.Down then begin
     packetL := 0;
     case FDCS of
       gcsDefault7Bit:
         packetL := (FMaxLength - 7); { 160 septets - UDH (6 octets+padding) }
       gcs8BitOctets:
         packetL := (FMaxLength - 6); { 140 octets - UDH (6 octets) }
       gcs16bitUcs2:
         packetL := (FMaxLength - 3); { 140 octets (70widechars) - UDH (6 octets) }
     end;
     len := length(Memo.Text);
     packetCount := (len div packetL) + 1;
     if len <= FMaxLength then packetCount := 1;
     if packetCount > 1 then begin
       StatusBar.Panels[0].Text := _('SMS: ') + IntToStr(packetCount);
       StatusBar.Panels[0].Text := StatusBar.Panels[0].Text + _(' - chars ') + IntToStr(length(Memo.Text));
     end
     else begin
       { Auto-switch to long-sms mode OFF }
       btnLongSMS.Down := False;
     end;
  end;
  if not btnLongSMS.Down then begin
     len := length(Memo.Text);
     StatusBar.Panels[0].Text := Format(ngettext('%s char left','%s chars left',FMaxLength - len),
       [IntToStr(FMaxLength - len)]);
  end;

  btnSave.Enabled := memo.Text <> '';
end;

procedure TfrmMessageContact.Edit1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
  node: TTreeNode;
begin
  Accept := False;

  if Source is TTntTreeView then begin
    node := (Source As TTntTreeView).Selected;
    if (node.ImageIndex >= 9) and (node.ImageIndex <= 13) then Accept := True;
  end;
end;

procedure TfrmMessageContact.Edit1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  if Source is TTntTreeView then AddRecipient((Source As TTntTreeView).Selected);
end;

procedure TfrmMessageContact.ClearClick(Sender: TObject);
begin
  Clear;
end;

procedure TfrmMessageContact.AddRecipient(node: TTreeNode);
var
  str: WideString;
begin
  str := node.Parent.Text + ' [' + node.Text + ']';

  if trim(Edit1.Text) <> '' then Edit1.Text := trim(Edit1.Text) + '; ';
  Edit1.Text := Edit1.Text + str;
end;

procedure TfrmMessageContact.AddRecipient(str: WideString);
begin
  Edit1.Text := str;
end;

procedure TfrmMessageContact.Clear;
begin
  if btnSave.Enabled then begin
    MessageBeep(MB_ICONQUESTION);
    case MessageDlgW(_('Do you want to save your current message as a Draft?'),
      mtConfirmation, MB_YESNOCANCEL) of
      ID_YES: begin
        btnSave.Click;
        Form1.Status(_('Previous message saved in Drafts'));
      end;
      ID_CANCEL: Abort;
    end;
  end;
  Memo.Lines.Clear;
  Edit1.Text := '';
  StatusBar.Panels[0].Text := '';
  StatusBar.Panels[1].Text := '';
  btnSave.Enabled := False;
end;


procedure TfrmMessageContact.MemoKeyPress(Sender: TObject; var Key: Char);
begin
  if ord(Key) = 10 then btnSend.Click; // Ctrl-Enter Sent
end;

procedure TfrmMessageContact.FormShow(Sender: TObject);
begin
  try
    if Form1.FConnected then
      btnStatusReport.Enabled := Form1.FStatusReport
    else
      btnStatusReport.Enabled := Form1.IsK750orBetter;
    btnStatusReport.Down := btnStatusReport.Enabled;
    if btnStatusReport.Enabled then
      btnStatusReport.Hint := _('Request Status Report')
    else
      btnStatusReport.Hint := _('Not supported by phone');

    btnSave.Enabled := False;
    if Edit1.Text = '' then Edit1.SetFocus else
      Memo.SetFocus;
    CoolBar1.Bands[0].MinHeight := 36;
    CoolBar1.Bands[1].MinHeight := 22;
    Memo.Clear();
  except
  end;
end;

procedure TfrmMessageContact.ToolBar2Resize(Sender: TObject);
begin
  Edit1.Width := ToolBar2.Width - btnTo.Width - btnRecent.Width - 4;
end;

procedure TfrmMessageContact.ToClick(Sender: TObject);
begin
  with TfrmSelContact.Create(nil) do
  try
    SelContacts := Edit1.Text;
    if ShowModal = mrOk then
      Edit1.Text := SelContacts;
  finally
    Free;
  end;
end;

procedure TfrmMessageContact.Edit1Click(Sender: TObject);
var
  a,b: string;
  i,j: integer;
  p,r: pchar;
begin
  a := Copy(Edit1.Text,1,Edit1.SelStart);
  b := Edit1.Text;
  Delete(b,1,Edit1.SelStart);
  i := 1;
  if a <> '' then begin
    p := @a[1];
    r := AnsiStrRScan(p,';');
    if r <> nil then begin
      i := r-p+2;
      while (i < length(a)) and (a[i] = ' ') do inc(i); 
    end;
  end;
  j := Length(b);
  if b <> '' then begin
    p := @b[1];
    r := AnsiStrScan(p,';');
    if r <> nil then j := r-p+1;
  end;
  with Edit1 do begin
    SelStart := i-1;
    SelLength := length(a)-i+1+j;
  end;
end;

procedure TfrmMessageContact.DoSend(AsDraft: boolean);

⌨️ 快捷键说明

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