ucalling.pas

来自「FMA is a free1 powerful phone editing to」· PAS 代码 · 共 520 行 · 第 1/2 页

PAS
520
字号
        FRingSecs := 0;
      end;
    end;
end;

procedure TfrmCalling.Set_IsIncoming(const Value: Boolean);
begin
  FIsIncoming := Value;
  if Visible then
    if Value then Form1.ShowBaloonInfo(_('Incoming call...'),60);
end;

function TfrmCalling.HasPersonalizedSound: boolean;
begin
  Result := FPersonalized and (MediaPlayer1.FileName <> '');
end;

function TfrmCalling.Get_Busy: Boolean;
begin
  Result := FRingOn = 1;
end;

procedure TfrmCalling.Set_Busy(const Value: Boolean);
begin
  if Value then FRingOn := 1 else FRingOn := DefRingOutgoingSecs;
  FRingSecs := 0;
end;

procedure TfrmCalling.CreateCall(Number: WideString; Popup: boolean; AlphaBlend: Integer);
var
  CallName: WideString;
begin
  { Setup variables }
  FRingSecs := 0;
  FRingOn := DefRingOutgoingSecs;
  FStopped := False;
  FPersonalized := False;
  FPersonalizedSem := False;
  FCheck := False;
  lblTime.Caption := '00:00'; // do not localize ?
  FNotesContact := nil;
  FillChar(FContactData,0,SizeOf(FContactData));
  Memo.Clear;
  Memo.Visible := False;
  HeadsetButton.Enabled := True;
  AnswerButton.Enabled := True;
  HandupButton.Enabled := True;
  { Prepare transparancy }
  AlphaBlendValue := AlphaBlend;
  { Resize form to fix message }
  if Number = '' then CallName := sUnknownNumber
    else CallName := form1.LookupContact(Number,sUnknownContact);
  lbAlpha.Font.Style := lbAlpha.Font.Style + [fsBold];  
  lbAlpha.Alignment := taLeftJustify;
  lbAlpha.AutoSize := True;
  lbAlpha.Caption := CallName;
  lbNumber.Caption := Number;
  IsCustomImage := False;
  { Restore form position }
  FormPlacement1.RestoreFormPlacement;
  Application.ProcessMessages;
  { Resize form }
  DoResizeWide;
  Height := Constraints.MinHeight;
  FCreated := True;
  if not Popup then exit;
  { Show window but not activate it --- if using this CLOSE is not working!!!
  SetWindowPos(Handle, HWND_TOPMOST,
    Left, Top, Width, Height,
    SWP_NOACTIVATE or SWP_NOSIZE);
  ShowWindow(Handle,SW_SHOWNOACTIVATE);
  ShowWindow(HeadsetButton.Handle,SW_SHOWNOACTIVATE);
  ShowWindow(AnswerButton.Handle,SW_SHOWNOACTIVATE);
  ShowWindow(HandupButton.Handle,SW_SHOWNOACTIVATE);
  ShowWindow(Memo.Handle,SW_SHOWNOACTIVATE);
  ShowWindow(ImagePanel.Handle,SW_SHOWNOACTIVATE);
  ShowWindow(Image32.Handle,SW_SHOWNOACTIVATE);
  }
  Show;
  Update;
end;

procedure TfrmCalling.FormCreate(Sender: TObject);
begin
  Left := (Screen.Width - Width) div 2;
  Top := (Screen.Height - Height) div 2;
  gghTranslateComponent(self);

  lbAlpha.Font.Style := lbAlpha.Font.Style + [fsBold];
  Image1.Picture.Assign(Form1.CommonBitmaps.Bitmap[1]);
end;

procedure TfrmCalling.DoResizeWide;
var
  wide,dif: integer;
begin
  wide := lbAlpha.Width;
  if lbNumber.Width > wide then wide := lbNumber.Width;
  wide := wide + lbAlpha.Left - 4;
  if wide > (Constraints.MinWidth-16) then begin
    dif := (wide + 8) - ClientWidth;
    ClientWidth := wide + 8;
  end
  else begin
    dif := Constraints.MinWidth - Width;
    Width := Constraints.MinWidth;
  end;
  Left := Left - dif div 2;
end;

procedure TfrmCalling.Set_CustomImage(const Value: Boolean);
begin
  FCustomImage := Value;
  if not Value then
    Image32.Bitmap.Assign(Form1.CommonBitmaps.Bitmap[0]);
end;

procedure TfrmCalling.DoExiting;
begin
  DoStopPersonalize;
end;

procedure TfrmCalling.DoInCall;
begin
  DoStopPersonalize(False);
end;

procedure TfrmCalling.DoShowNotes;
var
  SIMData: PSIMData;
  ContactName: WideString;
  Where: TFindContactResult;
begin
  if not Memo.Visible then begin
    ContactName := Form1.ExtractContact(lbAlpha.Caption);
    Where := Form1.WhereisContact(ContactName,fcByName);
    if Where = Form1.WhereisContact(lbNumber.Caption,fcByNumber) then
    case Where of
      frPhonebook:
        if Form1.frmMEEdit.FindContact(ContactName,SIMData) then begin
          { Fill data needed for Notes access }
          FContactData.LUID := SIMData^.LUID;
          FContactData.CDID := SIMData^.CDID;
          FNotesContact := @FContactData;
        end;
      frSIMCard:
        if Form1.frmSMEdit.FindContact(ContactName,SIMData) then begin
          { Fill data needed for Notes access }
          FContactData.LUID := SIMData^.LUID;
          FContactData.CDID := SIMData^.CDID;
          FNotesContact := @FContactData;
        end;
      frIrmcSync:
        Form1.frmSyncPhonebook.FindContact(ContactName,FNotesContact);
    end;
    // notes
    if Assigned(FNotesContact) then
      Memo.Visible := GetContactNotes(FNotesContact,Memo.Lines);
  end;
end;

procedure TfrmCalling.CloseCall(CanClose,CanHangUp: boolean);
begin
  if FCreated then begin
    FCreated := False;
    { Cancel any call attempt. If we're in call do not hang up here! }
    if CanHangUp and Form1.FConnected and IsCalling and not IsTalking then
      Form1.VoiceHangUp(IsIncoming);
    { Stop any sound }
    DoExiting;
    TimeTimer.Enabled := False;
    Image32.Bitmap.Clear;
    FormPlacement1.SaveFormPlacement;
  end;
  if CanClose then Close; // No stack overflow coz CanClose is false in Close().
end;

procedure TfrmCalling.HeadsetButtonClick(Sender: TObject);
begin
  DoInCall;
  try
    Form1.VoiceAnswer;
  except
  end;
  FCheck := True;
  Form1.DoDisconnectTemporary;
end;

procedure TfrmCalling.AddToPhonebook1Click(Sender: TObject);
begin
  if Form1.AddNewToPhonebook(lbNumber.Caption) then begin
    { Update view }
    lbAlpha.Caption := Form1.ExtractContact(Form1.ContactNumberByTel(lbNumber.Caption));
    Image32.Bitmap.Clear;
    AddToPhonebook1.Enabled := False;
    { Personalize again }
    FPersonalized := False;
    FPersonalizedSem := False;
    DoPersonalize;
  end;
end;

procedure TfrmCalling.MoreButtonClick(Sender: TObject);
var
  p: TPoint;
begin
  with (Sender as TTntButton) do
    p := ClientToScreen(Point(0,Height));
  PopupMenu1.Popup(p.X,p.Y);
end;

procedure TfrmCalling.AnswerButtonClick(Sender: TObject);
begin
  AnswerButton.Enabled := False;
  DoInCall;
  try
    Form1.VoiceAnswer;
  except // Error may occur if call is alerady active...
  end;
  FCheck := True;
  if Visible and Memo.Visible then
    Memo.SetFocus;
end;

procedure TfrmCalling.HandupButtonClick(Sender: TObject);
begin
  HandupButton.Enabled := False;
  DoExiting;
  try
    Form1.VoiceHangUp;
  except
  end;
end;

procedure TfrmCalling.PopupMenu1Popup(Sender: TObject);
begin
  Answer1.Enabled := AnswerButton.Enabled;
  HangUp1.Enabled := HandupButton.Enabled;
  MessageContact1.Enabled := Pos(sUnknownNumber,lbAlpha.Caption) = 0;
  { Add to ME if no name included or it is an unknown contact name }
  AddToPhonebook1.Enabled := MessageContact1.Enabled and (Pos(sUnknownContact,lbAlpha.Caption) <> 0);
end;

procedure TfrmCalling.Ignore1Click(Sender: TObject);
begin
  Close;
end;

procedure TfrmCalling.MessageContact1Click(Sender: TObject);
begin
  if lbNumber.Caption <> '' then begin
    frmMessageContact.Clear;
    Form1.ActionSMSNewMsg.Execute;
    frmMessageContact.AddRecipient(Form1.ExtractContact(lbAlpha.Caption)+' ['+lbNumber.Caption+']');
    frmMessageContact.Memo.SetFocus;
  end;
end;

end.

⌨️ 快捷键说明

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