AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) TAPI - lineMakeCall - Format der Telefonnummer
Thema durchsuchen
Ansicht
Themen-Optionen

TAPI - lineMakeCall - Format der Telefonnummer

Ein Thema von baumina · begonnen am 3. Jun 2013 · letzter Beitrag vom 5. Jun 2013
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: TAPI - lineMakeCall - Format der Telefonnummer

  Alt 4. Jun 2013, 14:55
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: TAPI - lineMakeCall - Format der Telefonnummer

  Alt 5. Jun 2013, 06:16
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
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) = '0049then
  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);
...
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina ( 5. Jun 2013 um 06:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: TAPI - lineMakeCall - Format der Telefonnummer

  Alt 5. Jun 2013, 07:23
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
AliDi

Registriert seit: 3. Jul 2005
Ort: Köln
23 Beiträge
 
Delphi 2007 Professional
 
#14

AW: TAPI - lineMakeCall - Format der Telefonnummer

  Alt 5. Jun 2013, 07:34
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
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: TAPI - lineMakeCall - Format der Telefonnummer

  Alt 5. Jun 2013, 08:21
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;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz