Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Часто задаваемые вопросы по программированию в Delphi 02.09.2002


Информационный Канал Subscribe.Ru


Частые вопросы по программированию в Delphi

 ВОПРОСЫ:

1. Как из программы вызвать Notepad и заставить его открыть нужный файл ?

uses ShellApi;

procedure TForm1.Button1Click(Sender: TObject);
var zFileName, zParams, zDir: array[0..79] of Char;
begin
 ShellExecute(Application.MainForm.Handle, nil, StrPCopy(zFileName, 'notepad'), StrPCopy(zParams, '1.txt'), StrPCopy(zDir, ''), SW_SHOWNORMAL);
end;

или же вот так:
var StInfo:TStartupInfo;
    prInfo:TProcessInformation;
begin
 FillChar(StInfo,SizeOf(StInfo),0);
 Createprocess(nil,pchar('notepad.exe '+chr(34)+Global.LogFile+chr(34)), nil, nil, false, 0, nil, nil, StInfo,PrInfo);
end;

2. Как проверить подключен ли компьютер к internet ?

interface
uses
Windows, SysUtils, Registry, WinSock, WinInet;

type
TConnectionType = (ctNone, ctProxy, ctDialup);

function ConnectedToInternet : TConnectionType;
function RasConnectionCount : Integer;


implementation

//For RasConnectionCount =======================
const
cERROR_BUFFER_TOO_SMALL = 603;
cRAS_MaxEntryName = 256;
cRAS_MaxDeviceName = 128;
cRAS_MaxDeviceType = 16;
type
ERasError = class(Exception);

HRASConn = DWord;
PRASConn = ^TRASConn;
TRASConn = record
dwSize: DWORD;
rasConn: HRASConn;
szEntryName: Array[0..cRAS_MaxEntryName] Of Char;
szDeviceType : Array[0..cRAS_MaxDeviceType] Of Char;
szDeviceName : Array [0..cRAS_MaxDeviceName] of char;
end;

TRasEnumConnections =
function (RASConn: PrasConn; { buffer to receive Connections data }
var BufSize: DWord; { size in bytes of buffer }
var Connections: DWord { number of Connections written to buffer }
): LongInt; stdcall;
//End RasConnectionCount =======================


function ConnectedToInternet: TConnectionType;
var
Reg : TRegistry;
bUseProxy : Boolean;
UseProxy : LongWord;
begin
Result := ctNone;
Reg := TRegistry.Create;
with REG do
try
try
RootKey := HKEY_CURRENT_USER;
if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Internet settings',False) then begin
//I just try to read it, and trap an exception
if GetDataType('ProxyEnable') = rdBinary then
ReadBinaryData('ProxyEnable', UseProxy, SizeOf(LongWord) )
else begin
bUseProxy := ReadBool('ProxyEnable');
if bUseProxy then
UseProxy := 1
else
UseProxy := 0;
end;
if (UseProxy <> 0) and ( ReadString('ProxyServer') <> '' ) then Result := ctProxy;
end;
except
//Obviously not connected through a proxy
end;
finally
Free;
end;

//We can check RasConnectionCount even if dialup networking is not installed
//simply because it will return 0 if the DLL is not found.
if Result = ctNone then begin
if RasConnectionCount > 0 then Result := ctDialup;
end;
end;

function RasConnectionCount : Integer;
var
RasDLL : HInst;
Conns : Array[1..4] of TRasConn;
RasEnums : TRasEnumConnections;
BufSize : DWord;
NumConns : DWord;
RasResult : Longint;
begin
Result := 0;

//Load the RAS DLL
RasDLL := LoadLibrary('rasapi32.dll');
if RasDLL = 0 then exit;

try
RasEnums := GetProcAddress(RasDLL,'RasEnumConnectionsA');
if @RasEnums = nil then
raise ERasError.Create('RasEnumConnectionsA not found in rasapi32.dll');

Conns[1].dwSize := Sizeof (Conns[1]);
BufSize := SizeOf(Conns);

RasResult := RasEnums(@Conns, BufSize, NumConns);

If (RasResult = 0) or (Result = cERROR_BUFFER_TOO_SMALL) then Result := NumConns;
finally
FreeLibrary(RasDLL);
end;
end;

3. Как в дельфи переместить указатель мыши в нужную точку экрана ?

Есть такая функция - SetCursorPos(X, Y: Integer)
Это не "родная" дельфийская функция, а одна из функций API Windows, поэтому в списке Uses должен присутствовать модуль Windows. Впрочем, этот модуль прописывается в Uses по умолчанию.
А еще есть такая хорошая функция API - GetCursorPos(var Point: TPoint)

4. Как програмно прокрутить Tmemo ?

Var

ScrollMessage:TWMVScroll;


ScrollMessage.Msg:=WM_VScroll;
for i := Memo1.Lines.Count DownTo 0 do
begin
ScrollMessage.ScrollCode:=sb_LineUp;
ScrollMessage.Pos:=0;
Memo1.Dispatch(ScrollMessage);
end;

5. Как сделать многострочную надпись на TBitBtn ?

Выводите текст надписи непосредственно на "glyph" TBitBtn'а. См. пример.

Пример:

procedure TForm1.FormCreate(Sender: TObject);
var R : TRect;
N : Integer;
Buff : array[0..255] of Char;
Begin
   with BitBtn1 do
    begin
      Caption := 'A really really long caption';
      Glyph.Canvas.Font := Self.Font;
      Glyph.Width := Width - 6;
       Glyph.Height := Height - 6;
       R := Bounds(0, 0, Glyph.Width, 0);
       StrPCopy(Buff, Caption);
       Caption := '';
        DrawText(Glyph.Canvas.Handle,Buff,StrLen(Buff),R, DT_CENTER or DT_WORDBREAK or DT_CALCRECT);
OffsetRect(R,(Glyph.Width - R.Right) div 2, (Glyph.Height - R.Bottom) div 2); DrawText(Glyph.Canvas.Handle,Buff,StrLen(Buff),R, DT_CENTER or DT_WORDBREAK);
     end;
end;

 КРАТКОЕ СОДЕРЖАНИЕ СТАТЕЙ:

Функция CreateProcess 

...Функция CreateProcess предназначена для запуска новой программы. Функции WinExec и LoadModule также работают, но не предоставляют таких возможностей, как CreateProcess. В дополнение к созданию процесса, CreateProcess также создаёт потоковый объект. Поток создаётся с инициализационным стеком, чей размер описан в заголовке образа исполняемого файла...

 КОМПОНЕНТЫ:

Twain Tool Kit (Delphi 6) 

...Набор компонент предназначенных для работы с TWAIN устройствами - такими как сканеры и цифровые камеры....

Вопросы по программированию в Delphi - www.mydelphi.hoha.ru

С уважением, Сергей
mydelphi@hoha.ru
Здесь может быть и Ваш баннер тоже

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное