?? ucomposesms.pas
字號:
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);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -