Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   TAPI - lineMakeCall - Format der Telefonnummer (https://www.delphipraxis.net/175161-tapi-linemakecall-format-der-telefonnummer.html)

Bernhard Geyer 4. Jun 2013 14:55

AW: TAPI - lineMakeCall - Format der Telefonnummer
 
Zitat:

Zitat von p80286 (Beitrag 1217443)
Bleibt letztlich die Frage wie "gewählt" werden soll/kann
  • 00492211234567
  • +492211234567
  • 02211234567

Version 1 setzt voraus das als Internationale Vorwahlziffern die 00 zu wählen ist.
Ist in DE der Fall, aber nicht überall.

Version 3 setzt voraus das das für nationale Gespräche die 0 vor der Rufnummer zu wählen ist.
ist in DE der Fall, aber nicht überall.

Es gab mal Ideen das in DE immer die ortsvorwahl zu wählen ist - dann aber ohne vorgängte 0.

D.h man müsste z.B. aus München die 2211234567 statt wie bisher die 02211234567 wählen.

baumina 5. Jun 2013 06:16

AW: TAPI - lineMakeCall - Format der Telefonnummer
 
Danke für all eure Tipps, ich habe es nun folgendermaßen gelöst. Ich nehme weiterhin alle möglichen Zeichen aus dem Telefonnummern-String raus, ersetze + durch 00 (alles wie zuvor) nun ersetze ich noch zusätzlich 0049 durch 0, damit meine Telefonanlage die Gespräche innerhalb Deutschlands auch schafft. Ob alles so klappt zeigt die Praxis :stupid:
Delphi-Quellcode:
  // überflüssige Zeichen entfernen (Leerzeichen, '-', '/', etc.)
  aAddress := StringReplace(aAddress, ' ', '', [rfReplaceAll]);
  aAddress := StringReplace(aAddress, '-', '', [rfReplaceAll]);
  aAddress := StringReplace(aAddress, '/', '', [rfReplaceAll]);
  aAddress := StringReplace(aAddress, '(', '', [rfReplaceAll]);
  aAddress := StringReplace(aAddress, ')', '', [rfReplaceAll]);
  aAddress := StringReplace(aAddress, '<', '', [rfReplaceAll]);
  aAddress := StringReplace(aAddress, '>', '', [rfReplaceAll]);
  // '+' durch '00' ersetzen (Ländervorwahl)
  aAddress := StringReplace(aAddress, '+', '00', []);

  if copy(aAddress, 1, 4) = '0049' then
  begin // Unsere Telefonanlage kommt mit der eigenen Ländervorwahl nicht zurecht, deswegen weg damit. 03.06.2013
    delete(aAddress, 2, 3);
  end;

  FillChar(callingNr, sizeof(callingNr), 0);
  StrPCopy(callingNr, aAddress);
  i := lineMakeCall(line, @call, callingNr, 0, @CallParams);
...

DeddyH 5. Jun 2013 07:23

AW: TAPI - lineMakeCall - Format der Telefonnummer
 
Statt der ganzen StringReplace-Aufrufe sollte man vielleicht einfach alles herausfiltern, was keine Ziffer ist. Nicht großartig getestet:
Delphi-Quellcode:
function FilteredNumbers(const NumberStr: string): string;
const
  NUMBERS = ['0'..'9'];
var
  PSrc, PDest, PCurrent: PChar;
begin
  SetLength(Result, Length(NumberStr));
  PSrc := PChar(NumberStr);
  PDest := PChar(Result);
  PCurrent := PDest;
  while PSrc^ <> #0 do
    begin
      {$IFDEF UNICODE}
      if CharInSet(PSrc^, NUMBERS) then
      {$ELSE}
      if PSrc^ in NUMBERS then
      {$ENDIF}
        begin
          PCurrent^ := PSrc^;
          PCurrent := CharNext(PCurrent);
        end;
      PSrc := CharNext(PSrc);
    end;
  SetString(Result, PDest, PCurrent - PDest);
end;

AliDi 5. Jun 2013 07:34

AW: TAPI - lineMakeCall - Format der Telefonnummer
 
Hi baumina,

Ich verwende grundsätzlich das kanonische Format für meine Rufnummern. Mit lineTranslateAddress wandle ich diese dann um. Du erhälst dann automatisch die Rufnummer im korrekten Format (davon ausgehend das die Ländereinstellung/Vorwahl richtig in Windows hinterlegt sind).

Vielleicht hilft Dir das ja weiter

Gruß
Alidi

baumina 5. Jun 2013 08:21

AW: TAPI - lineMakeCall - Format der Telefonnummer
 
Zitat:

Zitat von AliDi (Beitrag 1217484)
Hi baumina,

Ich verwende grundsätzlich das kanonische Format für meine Rufnummern. Mit lineTranslateAddress wandle ich diese dann um. Du erhälst dann automatisch die Rufnummer im korrekten Format (davon ausgehend das die Ländereinstellung/Vorwahl richtig in Windows hinterlegt sind).

Vielleicht hilft Dir das ja weiter

Gruß
Alidi

Ja genau, ich glaube das ist mein Problem, dass LineMakeCall lineTranslateAddress aufruft. Leider versteh ich von der MSDN-Hilfe immer nur Bruchstücke und ich tu mir echt schwer das in Delphi umzusetzen. Mit welchen Optionen müsste ich denn LineMakeCall aufrufen, dass lineTranslateAddress nicht aufgerufen wird?

Durch wildes rumprobieren und mühsames recherchieren im Inet übergebe ich im Moment folgende Parameter ohne wirklich zu kapieren worums geht (bei sowas bin ich glaub zu blond)
Delphi-Quellcode:
  lTAPIDialMode := ldmINTERACTIVEVOICE; // so habe ich es gesetzt

 { Zeros CallParams structure }
  FillChar(CallParams, sizeof(CallParams), 0);
  CallParams.dwTotalSize := sizeof(CallParams);
  CallParams.dwBearerMode := LINEBEARERMODE_VOICE;
  CallParams.dwAddressMode := LINEADDRESSMODE_DIALABLEADDR;

  case lTAPIDialMode of
    ldmINTERACTIVEVOICE : CallParams.dwMediaMode := LINEMEDIAMODE_INTERACTIVEVOICE;
    ldmAUTOVOICE       : CallParams.dwMediaMode := LINEMEDIAMODE_AUTOMATEDVOICE;
    ldmDIGITALDATA     : CallParams.dwMediaMode := LINEMEDIAMODE_DIGITALDATA;
    ldmDATAMODEM       : CallParams.dwMediaMode := LINEMEDIAMODE_DATAMODEM;
    ldmVOICEVIEW       : CallParams.dwMediaMode := LINEMEDIAMODE_VOICEVIEW;
    else CallParams.dwMediaMode := LINEMEDIAMODE_INTERACTIVEVOICE;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz