Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.29;
Скачать: CL | DM;

Вниз

Передача параметра по ссылке   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
7-95592
KarlovAF
2002-03-28 12:46
2002.07.29
Как заблокировать клавиатуру и мышку?


14-95552
Arkady
2002-06-27 08:11
2002.07.29
Зависание BDE


1-95339
Leny
2002-07-18 07:53
2002.07.29
Изменить цвет текста


1-95425
Makuha
2002-07-13 12:57
2002.07.29
TreeView - Help


14-95542
Igorek
2002-07-03 11:42
2002.07.29
Виндовс98 рус. - глюки.