Форум: "Основная";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];
ВнизПередача параметра по ссылке Найти похожие ветки
← →
AFROLOV (2002-07-15 13:18) [0]Вопрос такой как правильно передавать параметр по ссылке в макрос Word (Word 2000):
WordApplication: TWordApplication;
Function GetFormFieldAtPoint (var MSWord:TWordApplication;x:integer;y:integer;var SelStart:Cardinal):integer;
var
OV_x,OV_y,pvarPar:OleVariant;
begin
OV_x:=x;
OV_y:=y;
pvarPar:=SelStart;
result:=MSWord.Run("GetFormFieldAtPoint",OV_x,OV_y,pvarPar);
SelStart:=pvarPar;//почему то значение pvarPar не изменяется хотя внутри макроса ему присваивается нужное значение.
end;
сам макрос:
Function GetFormFieldAtPoint(ByVal x As Long, ByVal y As Long, ByRef SelSt As Long) As Long
Dim i As Long
Dim st As Long
On Error GoTo out
MsgBox Str(SelSt)
st = ActiveWindow.RangeFromPoint(x, y).Start
For i = 1 To ActiveDocument.FormFields.Count
If ((ActiveDocument.FormFields.Item(i).Range.Start <= st) And (ActiveDocument.FormFields(i).Range.End >= st)) Then
GetFormFieldAtPoint = i
SelSt = st
MsgBox Str(SelSt)
Exit Function
End If
Next i
out:
MsgBox Str("Fail")
GetFormFieldAtPoint = 0
End Function
если делать так
MSWord:Variant;
MSWord:=CreateOleObject(Word.Application);
и потом вызвать макрос то все работает.
← →
Digitman (2002-07-15 13:36) [1]Что-то непонятно ...
Вот в этой строчке
result:=MSWord.Run("GetFormFieldAtPoint",OV_x,OV_y,pvarPar);
значение MSWord откуда взялось ?
Разве не в результате
MSWord:=CreateOleObject(Word.Application); ?
Если так, то как понимать несуразицу
"значение pvarPar не изменяется" и "все работает" ?
← →
Fiend (2002-07-15 13:42) [2]То Digitman
Извините что не в тему.
А почему ты до сих пор не пьян????????????????????7
← →
Digitman (2002-07-15 13:51) [3]>Fiend
С чего ты взял ? Уже лыка не вяжу))))
Посему у автора до сих пор ничего не работает, а ветка сейчас в "Потрепаться" поедет))))
← →
AFROLOV (2002-07-15 14:00) [4]2 Digitman © (15.07.02 13:36)
Извеняюсь, если непонятно выразился.
Я рассматривал два пути работы с MSWord один - позднее связывание (MSWord:=CreateOleObject(..);) в этом случае параметры по ссылке удавалось передать без проблем, но скорость работы оставляют желать лучшего(по этой причине от него приходится отказаться), и второй через раннее связывание - скорости хорошие но вот с передачей параметров по ссылке пока возникают проблемы.
> Вот в этой строчке
> result:=MSWord.Run("GetFormFieldAtPoint",OV_x,OV_y,pvarPar);
>
> значение MSWord откуда взялось ?
Значение MSWord в нее передается как параметр
вызов проблемной ф-ии
num:=GetFormFieldAtPoint (WordApplication,x,y,SelectionStart);
← →
AFROLOV (2002-07-15 14:39) [5]Неужели никто такого не делал?
← →
Digitman (2002-07-15 15:06) [6]Сомневаюсь, что здесь играет роль тип связывания.
В конце-концов ведь можно сделать и так :
uses Word97, ...
var
MSWord: _Application; // ссылка на интерфейс
1.
MSWord := IDispatch(CreateOleObject("Word.Application")) as _Application;
2.
MSWord := CreateComObject(CLSID_Ворд-сервера)) as _Application;
оба способа в конечном итоге позволят реализовать ранее связывание (при этом, как видишь, способ 1 загрузки сервера тебе уже знаком как якобы работающий)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c