Наконец-то дошли руки до написания FAQ-шки. Выставляю на ваше обозрение. Точнее она у меня уже давно. Я ее делал для себя, но потом понял, что такое достояние нельзя хранить только у себя, а надо делиться. Вот я и сел из текстовика переделывать в HTML-ину. Вопросы, на которые пока нет ссылки, скоро появятся. Я просто еще не успел их переделать из текстовика. Приятно почитать. Что не найдете, пишите мне, постараюсь ответить. И ваш вопрос так же будет помещен сюда.

Как узнать, активна ли программа?

Как установить время, через которое появится подсказка?

Как установить время, через которое исчезнет подсказка?

Как поменять ярлык приложения в TaskBar?

Как изменить заголовок приложения в панели задач?

Как максимизировать приложение?

Как минимизировать приложение?

Как заставить программу обрабатывать сообщения?

Как предпочтительней закрыть программу?

Какое событие совершается при появлении исключительной необработанной ситуации.

Какое событие cовершается при выводе подсказки "на лету"?

Свойства объекта TScreen.

Как выделить весь текст?

Как заставить открываться только один экемпляр программы?

Как активизировать существующую копию программы.

Как заставить мышку двигаться?

Как сделать бегущую строку?

Как найти окно другой программы?

Как узнать текст объекта?

Как задать текст объекта?

Как переместить окно чужой программы?

Как узнать хэндл окна, находящегося в данной точке?

Как показать спрятанное окно?

Как спрятать окно?

Как установить окно в новую позицию?(способ 2)

Как узнать хэндл Рабочего Стола?

Как программно выключить монитор?

Как создать мигающий заголовок (пикторгамму) окна?

Какой самый быстрый способ очистки canvas'а?

Как спрятать и отключить кнопку Пуск?

Как временно отключить перерисовку окна?

Можно ли отключить кнопку закрытия любого окна?

Как узнать путь к каталогам Windows?

Как сделать родительское окно с рисунком в клиентской области?

Как запускать свою программу при каждом старте Windows?

Как очистить пункт Документы меню кнопки Пуск?

Как узнать является диск CD-диском, сетевым диском, вируальным диском или съемным диском?

Как получить хэндл Панели Задач(TaskBar)?

Как спрятать Панель Задач?

Как с помощью Проводника открыть конкретный каталог?

Как запустить из Delphi приложение?

Как открыть URL броузером, установленным по умолчанию?

Как стереть exe-файл во время его исполнения?

Как выяснить положение курсора в Memo?

Как хзнать, находится ли дискета в дисководе?

Как заставить формуляр не разворачиваться из пиктограммы?

Как обработать MessageDlg с тремя кнопками?

Как из Delphi создать документ Word?

Какие функции есть для работы с документами Word из Delphi?


При активном состоянии программа имеет свойство

Application.Active:=True;

Вверх.


Время в миллисекундах, после которого появится подсказка "на лету".

Application.HintPause;

Вверх.


Время в миллисекундах, после которого подсказка исчезнет.

Application.HintHidePause;

Вверх.


Изменение иконки окна программы.

Application.Icon.LoadfromFile('abc.ico');

Вверх.


Заголовок приложения в панели задач

Application.Title;

Вверх.


Максимизирование окна приложения.

Application.Minimize;

Вверх.


Минимизирование окна приложения.

Application.Maximize;

Вверх.


Программа при выполнении какого-либо цикла получает возможность попутно обрабатывать "внешние" сообщения

Application.ProcessMessages;

Вверх.


Предпочтительный способ закрытия программы

Application.Terminatec;

Вверх.


Cобытие, которое вызывается при исключительной необработанной ситуации

OnException;

Вверх.


Событие при выводе подсказки на лету

OnHint;

Вверх.


Свойства TScreen

ActiveControl

Это свойство возвращает объект TWinControl, имеющий фокус ввода. Обычно оно используется для реализации команд Copy, Cut и Paste для текстовых управляющих элементов. Следующий код, помещенный в обработчик TMenuItem, выполняет функцию Copy.

    procedure TFormI.mnuEditCopyClick(Sender: TObject); 
    begin 
        Screen.ActiveControl.Perform(WM_COPY,0,0); 
    end;

Все, что происходит в мире Windows, базируется на сообщениях. Для выполнения какой-либо функции управляющие элементы часто отсылают сообщения самим себе. Так и в этом примере управление происходит путем передачи сообщения WM_COPY.

Height и Width

Это наиболее полезные свойства, возвращающие высоту и ширину экрана в пикселях. Они могут применяться во многих ситуациях, например при определении местоположения формы. Вот как поместить форму в центре экрана.

      Left:= (Screen.Width - Width) div 2; 
	Top:= (Screen.Height - Height) div 2;

Чтобы передать фокус какому-нибудь объекту надо написать

      Object.SetFocus;

Вверх.


Выделить весь текст

Edit1.SelectAll;

Вверх.


Открытие только одного экземпляра программы

begin 
   Application.Initialize; 
   if FindWindow('TFormi','Formi') о 0 then Application.Terminate; 
   Application.Create Form(TForm1,Form1); 
   Application.Run; 
end.

Вверх.


Активизирование существующей копии

Все-таки, сказать пользователю "Ты уже запустил одну копию, теперь иди и ищи ее!"— как-то негуманно... Более профессиональным решением будет активизировать существующую копию с помощью другой функции Windows API — SetForegroundWindow. Измените проект следующим образом.

    var 
        hwndPrev: HWND; 
    begin 
        Application.Initialize; 
        hwndPrev:= FindWindow('TFormi','Formi'); 
        if hwndPrev < 0 then 
        begin 
            SetForegroundWindow(hwndPrev); 
            Application.Terminate; 
        end; 
        Application.CreateForm(TFormi,Formi); 
        Application.Run; 
    end. 

Вверх.


Заставить мышку двигаться можно так

var
M: TPoint;
begin
GetCursorPos(M);
SetCursorPos(x, y);

x, y - координаты курсора

Вверх.


Как сделать бегущую стpоку?

C помощью TLabel и TTimer.

procedure TForm1.Timer1Timer(Sender: TObject);  
const LengthGoString = 10;  
      Gostring = 'В конце стpоку желательно повтоpить,'+  
      ' чтоб получить эффект кольцевого движения! В конце ст';  
const i: Integer = 1;  
begin
 Label1.Caption:=Copy(GoString,i,LengthGoString);  
 Inc(i);  
 if Length(GoString)-LengthGostring < i then
  i:=1;  
end;

Вверх.


Функция FindWindow

function FindWindow(className,WindowName : PChar) : HWND;

Функция возвращает описатель окна, удовлетворяющий запросу (0 -если такого окна не найдено).

ClassName - имя класса, по которому призводится поиск среди ВСЕХ окон системы.

WindowName - заголовок окна

Один из параметров может быть равен nil, тогда поиск ведется по другому параметру.

Пример:

...
Var  Hwnd1 : HWND;
Begin
Hwnd1:=FindWindow('TForm1',nil);//Поиск окна с именем класса TForm
end;

Вверх.


Функция GetWindowText

function GetWindowText(hWnd: HWND; lpString: PChar; nMaxCount: Integer): Integer;

Функция возвращает текст окна. Для формы это будет заголовок, для кнопки - надпись на кнопке.

hWnd

Описатель того окна, текст которого нужно получить.

lpString

Переменная, в которую будет помещен результат

nMaxCount

Максимальная длина текста, если текст длиннее, то он обрезается.

Пример:

...
Var Buff : Array[0..127] of char; s : String;
Begin
GetWindowText(Form1.Handle,Buff,SizeOf(Buff));
s:=StrPas(Buff);
label1.caption:=s;
End 

Вверх.


Функция SetWindowText

function SetWindowText(hWnd: HWND; lpString: PChar): BOOL;

Устанавливает текст окна.

hWnd

Описатель того окна, текст которого нужно установить

lpString

Строка, содержащая устанавливаемый текст.

Пример:

...
Var Buff : Array[0..127] of char;
Begin
StrPCopy("New Text",Buff);
SetWindowText(form2.button1.handle,Buff);{установить надпись на кнопке Button2 "New Text"}
End;

Вверх.


Функция MoveWindow

MoveWindow(hWnd: HWND; X, Y, nWidth, nHeight: Integer; bRepaint: BOOL): BOOL; Перемещает окно в новую позицию. 

hWnd

Описатель перемещаемого окна.

X, Y, nWidth, nHeight

Соответственно: новые координаты X,Y; новая ширина, высота.

bRepaint

Булево значение, показывающее будет ли окно перерисовано заново.

Вверх.


Функция WindowFromPoint

WindowFromPoint(Point: TPoint): HWND;

Возвращает описатель окна, находящегося в данной точке экрана.

Point

Координата точки экрана типа TPoint(определение типа смотри ниже)

Вверх.


Функция ShowWindow

function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; Показывает или прячет окно. 

hWnd

Описатель нужного окна

nCmdShow

Константа, определяющая, что будет сделано с окном:

SW_HIDE

SW_SHOWNORMAL

SW_NORMAL

SW_SHOWMINIMIZED

SW_SHOWMAXIMIZED

SW_MAXIMIZE

SW_SHOWNOACTIVATE

SW_SHOW

SW_MINIMIZE

SW_SHOWMINNOACTIVE

SW_RESTORE

SW_SHOWDEFAULT

SW_MAX

Пример:

...
Begin 
  ShowWindow(Application.Handle,sw_hide);//Будет скрыт значок приложения на панели задач
  ShowWindow(form1.Handle,sw_hide);//Будет скрыта  форма Form1
End;  
...

Вверх.


Функция CloseWindow

function CloseWindow(hWnd: HWND): BOOL; stdcall;

Закрывает окно.

hWnd

Описатель закрываемого окна.

Вверх.


Функция SetWindowPos

function SetWindowPos(hWnd: HWND; hWndInsertAfter: HWND; X, Y, cx, cy: Integer; uFlags: UINT): BOOL; stdcall; 

Устанавливает окно в новую позицию

hWnd

Описатель окна

hWndInsertAfter

Описатель окна, перед которым в списке Z-Order будет вставлено окно hWnd, или одна из следующих констант:

HWND_BOTTOM

Поместить окно на дно списка Z-Order

HWND_TOP

Поместить окно на верх списка Z-Order

X, Y, cx, cy

Соответственно - новые горизонт. , верт. позиции окна (X, Y), а также новая ширина и высота (cx, cy)

uFlags

Одна или несколько (разделенных OR) следующих констант:

SWP_NOSIZE

Не изменять размер окна после перемещения (cx, cy игнорируются)

SWP_NOZORDER

Не изменять положение окна в списке Z-Order

SWP_SHOWWINDOW

Сделать окно видимым после перемещения

SWP_HIDEWINDOW

Спрятать окно после перемещения

SWP_NOACTIVATE

Не передавать фокус окну после перемещения

SWP_NOMOVE

Не перемещать окно (игнорируется X, Y)

Вверх.


Функция GetDesktopWindow

function GetDesktopWindow: HWND

Функция возвращает описатель окна Рабочего Стола (Desktop). Без параметров.

Вверх.


Как программно выключить монитор?

Программно можно отключить монитор совместимый со стандартом EnergyStar. Отправьте сообщение wm_SysCommand с параметром WParam = SC_MonitorPower

и LParam = 0 для отключения монитора

LParam = 1 для включения монитора

В приведенном примере монитор отключается на 10 секунд.

Пример:

 type 
               TForm1 = class(TForm) 
                 Button1: TButton; 
                 Timer1: TTimer; 
                 procedure FormCreate(Sender: TObject); 
                 procedure Timer1Timer(Sender: TObject); 
                 procedure Button1Click(Sender: TObject); 
               private 
                 { Private declarations } 
               public 
                 MonitorOff : bool; 
                 { Public declarations } 
               end; 
             var 
               Form1: TForm1; 
             implementation 
             {$R *.DFM} 
             procedure TForm1.FormCreate(Sender: TObject); 
             begin 
               Timer1.Enabled := false; 
               Timer1.Interval := 10000; 
               MonitorOff := false; 
             end; 
             procedure TForm1.Timer1Timer(Sender: TObject); 
             begin 
               if MonitorOff then begin 
                 MonitorOff := false; 
                 SendMessage(Application.Handle, 
                             wm_SysCommand, 
                             SC_MonitorPower, 
                             -1); 
                 Timer1.Enabled := false; 
               end; 
             end; 
             procedure TForm1.Button1Click(Sender: TObject); 
             begin 
               MonitorOff := true; 
               Timer1.Enabled := true; 
               SendMessage(Application.Handle, 
                           wm_SysCommand, 
                           SC_MonitorPower, 
                           0); 
             end; 

Вверх.


Как создать мигающий заголовок окна (пиктограмму)?

Можно воспользоваться функцией API

FlashWindow():
 

Пример:

var 
               Flash : bool; 
             procedure TForm1.Timer1Timer(Sender: TObject); 
             begin 
               FlashWindow(Form1.Handle, Flash); 
               FlashWindow(Application.Handle, Flash); 
               Flash := not Flash; 
             end; 
             procedure TForm1.FormCreate(Sender: TObject); 
             begin 
              Flash := False; 
             end; 

Вверх.


Какой самый быстрый способ для очистки canvasа?

Windows API функция

PatBlt().

Пример:

procedure TForm1.Button1Click(Sender: TObject); 
             begin 
               PatBlt(Form1.Canvas.Handle, 
                      0, 
                      0, 
                      Form1.ClientWidth, 
                      Form1.ClientHeight, 
                      WHITENESS); 
             end; 

Вверх.


Как спрятать и отключить кнопку "Пуск"?

Приведенный пример прячет и показывает кнопку "Пуск", а также разрешает и запрещает ее.

Пример:

            procedure TForm1.Button1Click(Sender: TObject); 
             var 
               Rgn : hRgn; 
             begin 
              {Cпрятать кнопку "Пуск"} 
               Rgn := CreateRectRgn(0, 0, 0, 0); 
               SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 
                                                    0, 
                                                   'Button', 
                                                    nil), 
                                                    Rgn, 
                                                    true); 
             end; 
             procedure TForm1.Button2Click(Sender: TObject); 
             begin 
              {Показать кнопку "Пуск"} 
               SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 
                                                    0, 
                                                   'Button', 
                                                    nil), 
                                                    0, 
                                                    true); 
             end; 
             procedure TForm1.Button3Click(Sender: TObject); 
             begin 
              {Запретить кнопку "Пуск"} 
               EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 
                                                    0, 
                                                    'Button', 
                                                    nil), 
                                                    false); 
             end; 
             procedure TForm1.Button4Click(Sender: TObject); 
             begin 
              {Разрешить кнопку "Пуск"} 
               EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 
                                                    0, 
                                                    'Button', 
                                                    nil), 
                                                    true); 
             end 

Вверх.


Как временно отключить перерисовку окна?

Вызовите функцию WinAPI LockWindowUpdate передав ей дескриптор окна, которое необходимо не обновлять. Передайте ноль в качестве параметра для восстановления нормального обновления.

LockWindowUpdate(Memo1.Handle); 
               . 
               . 
               LockWindowUpdate(0); 

Вверх.


Можно ли отключить кнопку закрытия любого окна?

Да, приведенный пример отключает кнопку закрытия и пункт "закрыть" ситсемного меню заданного окна.

  procedure TForm1.Button1Click(Sender: TObject); 
             var 
               hwndHandle : THANDLE; 
               hMenuHandle : HMENU; 
             begin 
               hwndHandle := FindWindow(nil, 'Untitled - Notepad'); 
               if (hwndHandle  0) then begin 
                 hMenuHandle := GetSystemMenu(hwndHandle, FALSE); 
                 if (hMenuHandle  0) then 
                   DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND); 
               end; 
             end; 

Вверх.


Как узнать путь к каталогам Windows?

Следующий пример получает полный список каталогов по умолчанию (Favorites, Desktop, Programs, Fonts, SendTo, Start, Menu, Templates, Startup, Recent and NetHood) Windows и заносит его в Memo.

Пример:

             uses Registry; 
             procedure TForm1.Button1Click(Sender: TObject); 
             var 
               reg : TRegistry; 
               ts : TStrings; 
               i : integer; 
             begin 
               reg := TRegistry.Create; 
               reg.RootKey := HKEY_CURRENT_USER; 
               reg.LazyWrite := false; 
               reg.OpenKey( 'Software\Microsoft\Windows\CurrentVersion\
               Explorer\Shell Folders', false); 
                 ts := TStringList.Create; 
                 reg.GetValueNames(ts); 
                 for i := 0 to ts.Count -1 do begin 
                   Memo1.Lines.Add(ts.Strings[i] + 
                                   ' = ' + 
                                   reg.ReadString(ts.Strings[i])); 
                 end; 
                 ts.Free; 
               reg.CloseKey; 
               reg.free; 
             end; 

Вверх.


Как сделать родительское окно с фоновым рисунком в клиентской области?

Для того чтобы сделать это выполните следующие шаги:

Содайте новый проект.

Установите FormStyle формы в fsMDIForm

Разместите Image на форме и загрузите в него картинку.

Найдите { Private Declarations } в обьявлении формы и добаьте следующие строки:

                 FClientInstance : TFarProc;
                 FPrevClientProc : TFarProc; 
                 procedure ClientWndProc(var Message: TMessage);  

Добаьте следующие строки в разделе implementation:

             procedure TMainForm.ClientWndProc(var Message: TMessage); 
             var 
               Dc : hDC; 
               Row : Integer; 
               Col : Integer; 
             begin 
               with Message do 
                 case Msg of 
                   WM_ERASEBKGND: 
                   begin 
                     Dc := TWMEraseBkGnd(Message).Dc; 
                   for Row := 0 to ClientHeight div Image1.Picture.Height do 
                   for Col := 0 to ClientWidth div Image1.Picture.Width do 
                         BitBlt(Dc, 
                            Col * Image1.Picture.Width, 
                            Row * Image1.Picture.Height, 
                            Image1.Picture.Width, 
                            Image1.Picture.Height, 
                            Image1.Picture.Bitmap.Canvas.Handle, 
                            0, 
                            0, 
                            SRCCOPY); 
                       Result := 1; 
                   end; 
                   else 
                     Result := CallWindowProc(FPrevClientProc, 
                                              ClientHandle, 
                                              Msg, 
                                              wParam, 
                                              lParam); 
               end; 
             end; 

В методе формы OnCreate добавьте:

                FClientInstance := MakeObjectInstance(ClientWndProc); 
                FPrevClientProc := Pointer(GetWindowLong(ClientHandle, 
                                           GWL_WNDPROC)); 
                SetWindowLong(ClientHandle, 
                              GWL_WNDPROC, LongInt(FClientInstance)); 

Добавьте к проекту новую форму и установите ее свойство FormStyle в fsMDIChild. У Вас получился MDI-проект с "обоями" в клиентской области MDI формы.

Вверх.


Как запускать мою программу на каждом старте Windows?

Пример работает и для Win32и для Win16.

             uses 
               Registry, {For Win32} 
               IniFiles; {For Win16} 
             {$IFNDEF WIN32} 
               const MAX_PATH = 144; 
             {$ENDIF} 
             {For Win32} 
             procedure TForm1.Button1Click(Sender: TObject); 
             var 
               reg: TRegistry; 
             begin 
               reg := TRegistry.Create; 
               reg.RootKey := HKEY_LOCAL_MACHINE; 
               reg.LazyWrite := false; 
               reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', 
                           false); 
               reg.WriteString('My App', Application.ExeName); 
               reg.CloseKey; 
               reg.free; 
             end; 
             {For Win16} 
             procedure TForm1.Button2Click(Sender: TObject); 
             var 
               WinIni : TIniFile; 
               WinIniFileName : array[0..MAX_PATH] of char; 
               s : string; 
             begin 
               GetWindowsDirectory(WinIniFileName, sizeof(WinIniFileName)); 
               StrCat(WinIniFileName, '\win.ini'); 
               WinIni := TIniFile.Create(WinIniFileName); 
               s := WinIni.ReadString('windows', 
                                      'run', 
                                      ''); 
               if s = '' then 
                 s := Application.ExeName else 
                 s := s + ';' + Application.ExeName; 
               WinIni.WriteString('windows', 
                                  'run', 
                                  s); 
               WinIni.Free; 
             end; 

Вверх.


Как очистить пункт документы меню кнопки Пуск

Вызовите Windows API функцию SHAddToRecentDocs() передав nil вместо имени файла в качестве параметра.

Пример:

             uses 
               ShlOBJ; 
             procedure TForm1.Button1Click(Sender: TObject); 
             begin 
               SHAddToRecentDocs(SHARD_PATH, nil); 
             end; 

Вверх.


Как узнать является диск CD-диском,сетевым диском, виртуальным диском или сьемным диском?

Windows API функция GetDriveType().

Пример:

procedure TForm1.Button1Click(Sender: TObject); 
       begin 
       case GetDriveType('C:\') of 
     0 : ShowMessage('The drive type cannot be determined'); 
     1 : ShowMessage('The root directory does not exist'); 
       DRIVE_REMOVABLE:ShowMessage('The disk can be removed'); 
       DRIVE_FIXED    : ShowMessage('The disk cannot be removed'); 
       DRIVE_REMOTE   : ShowMessage('The drive is remote (network) drive'); 
       DRIVE_CDROM    : ShowMessage('The drive is a CD-ROM drive'); 
       DRIVE_RAMDISK  : ShowMessage('The drive is a RAM disk'); 
      end; 
     end; 

Вверх.


Как получить дескриптор панели задач (TaskBar)?

hTaskbar := FindWindow('Shell_TrayWnd', Nil )

Вверх.


Как спрятать TaskBar?

Вначале необходимо вызвать функцию FindWindow(), чтобы определить handle TaskBar. Затем вызвите функцию ShowWindow(), передав ей в качестве параметра костанту SW_HIDE.

Пример:

             procedure TForm1.Button1Click(Sender: TObject); 
             var 
               hTaskBar : THandle; 
             begin 
               hTaskbar := FindWindow('Shell_TrayWnd', Nil); 
               ShowWindow(hTaskBar, SW_HIDE); 
             end; 
             procedure TForm1.Button2Click(Sender: TObject); 
             var 
               hTaskBar : THandle; 
             begin 
               hTaskbar := FindWindow('Shell_TrayWnd', Nil); 
               ShowWindow(hTaskBar, SW_SHOWNORMAL); 
             end; 

Вверх.


Как с помощью Проводника открыть конкретный каталог?

Пример:

             uses ShellApi; 
             procedure TForm1.Button1Click(Sender: TObject); 
             begin 
               ShellExecute(0, 
                            'explore', 
                            'C:\WINDOWS', 
                            nil, 
                            nil, 
                            SW_SHOWNORMAL); 
             end; 

Вверх.


Запуск приложения

WinExec('C:\WINDOWS\CONTROL.EXE', sw_ShowNormal); 

Вверх.


Как открыть URL браузером, установленным по умолчанию?

Используйте функцию ShellExecute.

Пример:

             uses ShellAPI; 
             procedure TForm1.Button1Click(Sender: TObject); 
             begin 
               ShellExecute(Form1.Handle, 
                            nil, 
                            'http://www.borland.com', 
                            nil, 
                            nil, 
                            SW_SHOWNORMAL); 
             end; 

Вверх.


Как стереть ехе-файл во время его исполнения?

Это не возможно. Вы можете стереть его во время следующего запуска Windows, добавив ключ RunOnce: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce

Пример:

           uses 
             Registry; 
           procedure TForm1.Button1Click(Sender: TObject); 
           var 
           reg: TRegistry; 
           begin 
            reg := TRegistry.Create; 
             with reg do begin 
              RootKey := HKEY_LOCAL_MACHINE; 
              LazyWrite := false; 
              OpenKey('Software\Microsoft\Windows\CurrentVersion\RunOnce', 
                          false); 
              WriteString('Delete Me!','command.com /c del FILENAME.EXT'); 
              CloseKey; 
              free; 
             end; 
            end; 

Вверх.


Как выяснить положение курсора в МЕМО?

Необходимо вызвать дважды API-функцию "SendMessage":

var 
  xChr, 
  xRow, 
  xCol: LongInt;
...
xRow := SendMessage(Memo1.Handle, EM_LINEFROMCHAR, Memo1.SelStart, 0);
xChr := SendMessage(Memo1.Handle, EM_LINEINDEX, Zeile, 0);
xCol := Memo1.SelStart - xChr + 1;

Вверх.


Как узнать, находится ли дискета в дисководе?

type
  TDriveState(DS_NO_DISK, DS_UNFORMATTED_DISK, 
    DS_EMPTY_DISK, DS_DISK_WITH_FILES);
function DriveState(DrvLetter: Char): TDriveState;
var
  Mask: String[6];
  SearchRec: TSearchRec;
  oldMode: Cardinal;
  ReturnCode: Integer;
begin
  oldMode: = SetErrorMode(SEM_FAILCRITICALERRORS);
  Mask:= '?:\*.*';
  Mask[1] := DrvLetter;
  {$I-}  { отключить обработку исключительных ситуаций }
  ReturnCode := FindFirst(Mask, faAnyfile, SearchRec);
  FindClose(SearchRec);
  {$I+}
  case ReturnCode of
    { как минимум один файл был найден }
    0: Result := DS_DISK_WITH_FILES;
    { файлов не найдено и дискета в порядке }
    -18: Result := DS_EMPTY_DISK;
    { DS_NO_DISK для DOS, ERROR_NOT_READY для WinNT, ERROR_PATH_NOT_FOUND для Win 3.1 }
    -21, -3: Result := DS_NO_DISK;
  else
    { дискета лежит в дисководе но она не форматировнная }
    Result := DS_UNFORMATTED_DISK;
  end;
  SetErrorMode(oldMode);
end; { DriveState }

Вверх.


Как "заставить" формуляр не разворачиваться из иконки?

Для этого необходимо перехватить сообщение "WM_QUERYOPEN". Для этого необходимо объявить соответствующую процедуру в private-области.

{ объявление процедуры в классе TMainForm }
procedure WMQueryOpen(var Msg: TWMQueryOpen); message WM_QUERYOPEN;
{ ... и ее реализация }
procedure TMainForm.WMQueryOpen(var Msg: TWMQueryOpen);
begin
  Msg.Result := 0;
end;

Вверх.


Как обработать MessageDlg с тремя кнопками?

Если в MessageDlg указывается больше двух кнопок, то обрабатывается это так:

CASE MessageDlg('Файл '+ExtractFileName(SaveDialog1.FileName)+' был изменен. Сохранить?', mtConfirmation, mbYesNoCancel, 0) OF
 idYes   :  Save1.onClick(Sender);
 idNo    :;
 idCancel:CanClose:=False;;
end;

Вверх.


Для создания документа Microsoft Word из Delphi нужно создать переменную, ассоциированную с Word. Если Word еще не открыт, его нужно открыть.

uses ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
  MSWord: Variant;
begin
  try
    MsWord := GetActiveOleObject('Word.Application');
  except
    try
      MsWord := CreateOleObject('Word.Application');
      MsWord.Visible := True;
    except
      Exception.Create('Error');
    end;
  end;
  MSWord.Documents.Add;
  MSWord.Selection.Font.Size := 12;
  MSWord.Selection.TypeText('Текст');
  MSWord.Selection.Font.Bold := true;
  MSWord.Selection.TypeText(#13#10'new');
  MSWord.ActiveDocument.SaveAs('C:\ex.doc');
end;

Вверх.


Это пожалуй единственный вопрос, который я тут объяснять не буду. Все материалы по этому вопросу вы найдете в этом zip-файле.

Вверх.




©Приходько Олег, 2001-2005 г.