none
Zero Based array an Active X übergeben?

    Frage

  • Wir verwenden ein ActiveX Control zur Text-Eingabe (TX Text Control),
    bei dem jetzt auch eine Rechtschreibkorrektur eingebaut werden soll.
    Hierfür muss u.a. im SpellCheckText-Event der Parameter
    "misspelledwordpositions" gesetzt werden.
    Bei "misspelledwordpositions" handelt es sich um ein Array, in dem die
    Positionen der fehlerhaften Wörter aufgeführt werden.
     
    Hier nochmal die Original-Doku vom Hersteller:
    MisspelledWordPositions Is an array of Long values which can be used to
    inform the TextControl about misspelled words. This array must be created
    in the event handler after the specified text has been examined.
    The array must contain two entries for each misspelled word: a start
    position and an end position. Both values must be one-based indices in
    the specified text. The example text 'This iss an exxample' contains two
    misspelled words: 'iss' and 'exxample'. For this example an array of four
    Long values must be created containing the values 6, 8, 13, 20.
    TextControl uses these positions to underline the misspelled words with
    a red zigzag line.
     
    Hier ein vereinfachtes Beispiel des entsprechenden Codes:
     
    *** ActiveX Control Event ***
    *SpellCheckText-Event
    LPARAMETERS text, misspelledwordpositions
     
    Local loSpellChecker as AxTXSpell.AxTXSpellChecker
     
    loSpellChecker = CreateObject("AxTxSpell.AxTxSpellchecker")
     
    =ComArray(loSpellChecker, 10)
    =ComArray(this, 10)
     
    loSpellChecker.Check(text)
     
    misspelledwordpositions = loSpellChecker.MisspelledWordPositions
     
    =DoDefault(text, @misspelledwordpositions)
     
    ****************************************************************
     
    Das Array misspelledwordpositions ist ein zero-based Array, deshalb
    habe ich die ComArray()-Funktion verwendet.
    Das ganze scheint aber nicht zu funktionieren. Das Array kommt
    sozusagen nie beim ActiveX Control an.
     
    Hat irgend jemand von euch eine Idee, was hier schief geht?
     
    Gruß,
    Frank
     

    Jörg Schneider
    Mittwoch, 20. März 2013 13:44

Alle Antworten

  • Hast Du schon mal set step on in dem Code benutzt?

    Wenn man in VFP  Arrayname = wert nutzt, wird jedes Element des Arrays auf den Wert gesetzt. Wenn Wert ein COM Array ist, in Deinem Fall also loSpellChecker.MisspelledWordPositions, dann weiß ich nicht was passiert, aber der Debugger wird's Dir zeigen.

    Daneben glaube ich nicht, daß DODEFAULT so gehen würde, wenn dann

    =DoDefault(text, loSpellChecker.MisspelledWordPositions)

    Tschüß, Olaf.


    Olaf Doschke (Setmics)

    Mittwoch, 20. März 2013 19:12
  • Hi!
     
    Also wir ham uns das jetzt nochmal sehr intensiv angesehen.
    Selbst wenn wir von Hand ein Array bauen und dann dieses an DoDefault() übergeben passiert nichts.
     
    In VB setzt man einfach den 2. Parameter des Events als Array und fertig. Kein DoDefault etc. und schon geht es.
    In VFP scheint es so, als dass FoxPro nicht richtig erkennt, dass der 2. Parameter des Events ein Referenzparameter ist.
     
    Wir wissen nun nicht mehr weiter.
     
    Grüße
     Am 20.03.2013 20:12, schrieb Olaf Doschke:
    > Hast Du schon mal set step on in dem Code benutzt?
    >
    > Wenn man in VFP  Arrayname = wert nutzt, wird jedes Element des Arrays auf den Wert gesetzt. Wenn Wert ein COM Array ist, in Deinem Fall also loSpellChecker.MisspelledWordPositions, dann weiß ich nicht was passiert, aber der Debugger wird's Dir zeigen.
    >
    > Daneben glaube ich nicht, daß DODEFAULT so gehen würde, wenn dann
    >
    > =DoDefault(text, loSpellChecker.MisspelledWordPositions)
    >
    > Tschüß, Olaf.
    >
    > ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    >
    > Olaf Doschke (Setmics)
    >
     
     

    Jörg Schneider
    Donnerstag, 21. März 2013 13:57
  • Selbst wenn wir von Hand ein Array bauen und dann dieses an DoDefault() übergeben passiert nichts.
     
    In VB setzt man einfach den 2. Parameter des Events als Array und fertig. Kein DoDefault etc. und schon geht es.

    Das es ein Event ist, an dass Du etwas übergibst ist schon zweifelhaft. Ich kenne mich mit dem TX Text Control nicht aus, aber ich würde erwarten, daß beim Aufruf einer Rechtschreibprüfmethode als Rückantwort dieses Event ausgelöst wird und man im 2. Parameter so ein Array vorfindet, nicht es hereingibt.

    Wie sieht denn die Nutzung der Rechtschreibprüfung in VB aus?

    Tschüß, Olaf.


    Olaf Doschke (Setmics)

    Freitag, 22. März 2013 12:14