ss:='Кликни правой по калку …';
dc:=GetDC(h); SetBkMode(dc, TRANSPARENT);
TextOut(dc,15,4,pansichar(ss),length(ss));
// –
x:=TMsg(Pointer(lParam)^).message; // Получаем код сообщения окна
// Запрещаем щелкать по окошку калькулятора
if (wnd=h2) and (x=WM_LBUTTONDOWN) then begin
MessageBox(0, 'Нельзя !!!', 'Щелкать по окошку',0 );
TMsg(Pointer(lParam)^).message:=0; // Анулируем сообщение
end;
// Механиз обработки "нашего" пункта меню в калькуляторе
if (wnd=h) and (x=WM_COMMAND)
and (lo(TMsg(Pointer(lParam)^).wParam) = IDM_TSN)
then MessageBox(0, 'Да!', 'Калькулятор говорит', 0);
{ Передаем сообщение дальше по цепочке hook-ов }
1: Result:=CallNextHookEx(SysHook, Code, wParam, lParam);
end;
exports hook;
begin
end.
ЛЕКЦИЯ №8
1. РАБОТА С ПРИЛОЖЕНИЕМ «MS WORD»
unit main;
uses … ComCtrls, WordXP, OleServer, Variants;
type TForm1 = class(TForm)
…
wa: TWordApplication;
wd: TWordDocument;
var Form1: TForm1; t, tt, vv: OleVariant; // параметры для передачи
implementation
…
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
wa := wa.Create(nil); // создаем экземпляр Word
wa.Visible := true; // делаем его видимым
t := 'Normal'; // шаблон
tt := false; // не создавть шаблон
wa.Documents.Add(t, tt, EmptyParam, EmptyParam); // добавляем документ
// подключаем к объекту WordDocument созданный документ
wd.ConnectKind := ckAttachToInterface; wd.ConnectTo(wa.ActiveDocument);
t := wd.Range; // переменная – параметр, шаблон для нового абзаца
// добавляем в документ 3 абзаца:
wd.Paragraphs.Add(t); wd.Paragraphs.Add(t); wd.Paragraphs.Add(t); // абзац #3
wd.Paragraphs.Item(1).Range.InsertBefore('Привет, TSN !!!'); // вставляем текст в абзац #1
// вставляем текст в абзац #2
wd.Paragraphs.Item(2).Range.InsertBefore('Переключившись в программу, можно программно менять текст ячеек !');
wd.Paragraphs.Item(1).Range.Font.ColorIndex := 11; // цвет зеленый в абзаце #1
wd.Paragraphs.Item(2).Range.Font.ColorIndex := 5; // цвет розовый в абзаце #2
wd.Paragraphs.Item(3).Range.Font.Bold := 1; // шрифт – жирный