nyuuzyou/wikis huggingface dataset:
Hook на буфер обмена

=== Hook на буфер обмена ===
{
 *Just create a new form and call it ClipFormats.
 *Drop a TButton and call it btnUpdate.
 *Drop a TListBox and call it lbFormats.
 Then just add the code below and hook up all the event handlers.
 All it does is display all the formats currently on the clipboard and
 updates as soon as the clipboard changes.
}
unit DynaClip;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;
type
 TClipFormats = class(TForm)
 btnUpdate: TButton;
 lbFormats: TListBox;
 procedure FormCreate(Sender: TObject);
 procedure FormDestroy(Sender: TObject);
 procedure btnUpdateClick(Sender: TObject);
 private
 { Private declarations }
 NextWindow: HWND;
 procedure WMChangeCBChain(var Message: TWMChangeCBChain); message WM_CHANGECBCHAIN;
 procedure WMDrawClipboard(var Message: TWMDrawClipboard); message WM_DRAWCLIPBOARD;
 public
 { Public declarations }
 end;
var
 ClipFormats: TClipFormats;
implementation
 {$R *.DFM}
procedure TMDIChildClipFormats.FormCreate(Sender: TObject);
begin
 NextWindow := SetClipboardViewer(Handle);
end;
procedure TClipFormats.FormDestroy(Sender: TObject);
begin
 ChangeClipboardChain(Handle, NextWindow);
end;
procedure TClipFormats.WMChangeCBChain(var Message: TWMChangeCBChain);
begin
 with Message do
 begin
 if (Remove = NextWindow) then
 begin
 NextWindow := Next;
 end
 else
 begin
 SendMessage(NextWindow, WM_CHANGECBCHAIN, Remove, Next);
 end;
 end;
end;
procedure TClipFormats.WMDrawClipboard(var Message: TWMDrawClipboard);
begin
 btnUpdate.Click;
 SendMessage(NextWindow, WM_DRAWCLIPBOARD, 0, 0);
end;
procedure TClipFormats.btnUpdateClick(Sender: TObject);
const
 PreDefinedFormats: array[1..16] of string = ('CF_TEXT',
 'CF_BITMAP',
 'CF_METAFILEPICT',
 'CF_SYLK',
 'CF_DIF',
 'CF_TIFF',
 'CF_OEMTEXT',
 'CF_DIB',
 'CF_PALETTE',
 'CF_PENDATA',
 'CF_RIFF',
 'CF_WAVE',
 'CF_UNICODETEXT',
 'CF_ENHMETAFILE',
 'CF_HDROP',
 'CF_LOCALE');
var
 ClipFormat: TClipFormat;
 szBuffer: array[0..511] of char;
 FormatID: string;
begin
 if not OpenClipboard(Handle) then
 Exit;
 try
 lbFormats.Items.BeginUpdate;
 try
 lbFormats.Items.Clear;
 ClipFormat := EnumClipboardFormats(0);
 while (ClipFormat <> 0) do
 begin
 if (ClipFormat in [1..16]) then
 begin
 FormatID := PreDefinedFormats[ClipFormat];
 end
 else
 begin
 GetClipboardFormatName(ClipFormat, szBuffer, SizeOf(szBuffer));
 FormatID := string(szBuffer);
 end;
 lbFormats.Items.Add(Format('%s [%d]', [FormatID, ClipFormat]));
 ClipFormat := EnumClipboardFormats(ClipFormat);
 end;
 finally
 lbFormats.Items.EndUpdate;
 end;
 finally
 CloseClipboard;
 end;
end;
end.
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01880
Hook функций в собственном приложении

=== Hook функций в собственном приложении ===
type
 TSaveRedir = packed record
 Addr: Pointer;
 Bytes: array[0..4] of Byte;
 end;
 PSaveRedir = ^TSaveRedir;
procedure RedirectCall(FromAddr, ToAddr: Pointer; SaveRedir: PSaveRedir);
var
 OldProtect: Cardinal;
 NewCode: packed record
 JMP: Byte;
 Distance: Integer;
 end;
begin
 if not VirtualProtect(FromAddr, 5, PAGE_EXECUTE_READWRITE, OldProtect) then
 RaiseLastWin32Error;
 if Assigned(SaveRedir) then
 begin
 SaveRedir^.Addr := FromAddr;
 Move(FromAddr^, SaveRedir^.Bytes, 5);
 end;
 NewCode.JMP := $E9;
 NewCode.Distance := PChar(ToAddr) - PChar(FromAddr) - 5;
 Move(NewCode, FromAddr^, 5);
 if not VirtualProtect(FromAddr, 5, OldProtect, OldProtect) then
 RaiseLastWin32Error;
end;
procedure UndoRedirectCall(const SaveRedir: TSaveRedir);
var
 OldProtect: Cardinal;
begin
 if not VirtualProtect(SaveRedir.Addr, 5, PAGE_EXECUTE_READWRITE, OldProtect) then
 RaiseLastWin32Error;
 Move(SaveRedir.Bytes, SaveRedir.Addr^, 5);
 if not VirtualProtect(SaveRedir.Addr, 5, OldProtect, OldProtect) then
 RaiseLastWin32Error;
end;
// Example: Replace Application.MessageBox with your own.
function MyNewMessageBox(Self: TApplication; const Text, Caption: PChar;
 Flags: Longint): Integer;
begin
 ShowMessage('New Messagebox');
 //....
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 Application.MessageBox('You`ll never see this Text /
 Diesen Text wirst du nie sehen', '...', MB_OK);
end;
var
 S: TSaveRedir;
initialization
 RedirectCall(@TApplication.MessageBox, @MyNewMessageBox, @S);
finalization
 UndoRedirectCall(S);
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 02222
How do I create an executible file using the command line directive in Linux with Kylix?

How do I create an executable file, i.e. foo.exe, using dcc in Kylix?
Create the project file, i.e. foo.dpr, using VI, Pico or some other text writing tool. Next, at the command line type: dcc foo. You can pass in flags like -BE: dcc -BE foo, the will build and execute the file. There are a number of different flags you can pass in, look at the help for dcc for a full listing and description.
program foo
uses
 SysUtils;
begin
 writeln('Hello World');
 readln;
end.
ID: 04622
Category:Kylix
Category:Linux
How immediately start a service after its installation?

=== How immediately start a service after its installation? ===
{ To automatically start a service after its installation use this code }
procedure TMyService.ServiceAfterInstall(Sender: TService);
var
 sm: TServiceManager;
begin
 sm := TServiceManager.Create;
 try
 if sm.Connect then
 if sm.OpenServiceConnection(self.name) then
 sm.StartService;
 finally
 sm.Free;
 end;
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 02239
How to check, if a CD-Recorder is available? (WinXP)

=== How to check, if a CD-Recorder is available? (WinXP) ===
{....}
uses Registry;
{....}
function HasCDRecorder: Boolean;
var
 reg: TRegistry;
begin
 reg := TRegistry.Create;
 try
 // set the the Mainkey, 
 reg.RootKey := HKEY_CURRENT_USER;
 // Open a key
 reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\CD Burning', False);
 // Check if the Key exists
 Result := reg.ValueExists('CD Recorder Drive');
 // Close the key
 reg.CloseKey;
 finally
 // and free the TRegistry Object
 reg.Free;
 end;
end;
// Example:
procedure TForm1.Button1Click(Sender: TObject);
begin
 if HasCDRecorder then
 ShowMessage('CD-Recorder available.')
 else
 ShowMessage('CD-Recorder NOT available.');
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 01407
How to check for unread email

= Как проверить непрочитанную почту =
var
 Inbox: MAPIFolder;
 NewMail: boolean;
begin
 Inbox := NmSpace.GetDefaultFolder(olFolderInbox);
 NewMail := (Inbox.UnreadItemCount > 0);
 if NewMail then
 ShowMessage(Format('Unread items in Inbox: %d', [Inbox.UnreadItemCount]));
end;
The constant olFolderInbox is defined in Outlook_TLB as $00000006.
ID: 04454
Category:COM
Category:MS Office
How to check for unsent email

= Как проверить неотправленную почту =
var
 Outbox: MAPIFolder;
 UnsentMail: integer;
begin
 Outbox := NmSpace.GetDefaultFolder(olFolderOutbox);
 UnsentMail := Outbox.Items.Count;
 if (UnsentMail > 0) then
 ShowMessage(Format('Unsent items in Outbox: %d', [UnsentMail]));
end;
The constant olFolderOutbox is defined in Outlook_TLB as $00000004
ID: 04455
Category:COM
Category:MS Office
How to check if the Workstation is locked?

=== How to check if the Workstation is locked? ===
function IsWorkstationLocked: Boolean;
var
 hDesktop: HDESK;
begin
 Result := False;
 hDesktop := OpenDesktop('default',
 0, False,
 DESKTOP_SWITCHDESKTOP);
 if hDesktop <> 0 then
 begin
 Result := not SwitchDesktop(hDesktop);
 CloseDesktop(hDesktop);
 end;
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 01698
How to debug an Apache Shared Module

I am running Apache on Windows and want to know how to debug Apache Shared Modules?
It is a straight forward task to debug Shared Modules in Delphi. The only thing that needs to be done is to set the Host Application and Parameters for the Shared Module's Project. From the Delphi menu bar go to Run | Parameters. Set the Host Application to point to Apache.exe, and specify the following parameters: -X -w -f "c:\path tohttpd.conf".
When you run the project be sure that IIS is not running. If you need IIS to run while Apache is running then change the Port value stored in httpd.conf.
ID: 03429
Category:Связь
Category:Web
How to get all the resource names that are loaded in a given application?

=== How to get all the resource names that are loaded in a given application? ===
type
 TForm1 = class(TForm)
 Button1: TButton;
 Memo1: TMemo;
 procedure Button1Click(Sender: TObject);
 private
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
function enumResNamesProc(module: HMODULE; restype, resname: PChar; list: TStrings): Integer; stdcall;
begin
 if HiWord(Cardinal(resname)) <> 0 then
 list.Add(' ' + resname)
 else
 list.Add(Format(' #%d', [loword(Cardinal(resname))]));
 Result := 1;
end;
function StockResourceType(restype: PChar): string;
const
 restypenames: Array [1..22] of String =
 ( 'RT_CURSOR', // = MakeIntResource(1);
 'RT_BITMAP', // = MakeIntResource(2);
 'RT_ICON', // = MakeIntResource(3);
 'RT_MENU', // = MakeIntResource(4);
 'RT_DIALOG', // = MakeIntResource(5);
 'RT_STRING', // = MakeIntResource(6);
 'RT_FONTDIR',// = MakeIntResource(7);
 'RT_FONT', // = MakeIntResource(8);
 'RT_ACCELERATOR',// = MakeIntResource(9);
 'RT_RCDATA', // = MakeIntResource(10);
 'RT_MESSAGETABLE',// = MakeIntResource(11);
 // DIFFERENCE = 11;
 'RT_GROUP_CURSOR',// = MakeIntResource(DWORD(RT_CURSOR +7DIFFERENCE));
 'UNKNOWN', // 13 not used
 'RT_GROUP_ICON', // = MakeIntResource(DWORD(RT_ICON +DIFFERENCE));
 'UNKNOWN', // 15 not used
 'RT_VERSION', // = MakeIntResource(16);
 'RT_DLGINCLUDE', // = MakeIntResource(17);
 'UNKNOWN',
 'RT_PLUGPLAY', // = MakeIntResource(19);
 'RT_VXD', // = MakeIntResource(20);
 'RT_ANICURSOR', // = MakeIntResource(21);
 'RT_ANIICON' // = MakeIntResource(22);
 );
var
 resid: Cardinal absolute restype;
begin
 if resid in [1..22] then
 Result := restypenames[resid]
 else
 Result := 'UNKNOWN';
end;
function enumResTypesProc(module: HMODULE; restype: PChar; list: TStrings): Integer; stdcall;
begin
 if HiWord(Cardinal(restype)) <> 0 then
 list.Add(restype)
 else
 list.Add(Format('Stock type %d: %s', [LoWord(Cardinal(restype)),
 StockResourcetype(restype)]));
 EnumResourceNames(module, restype, @enumResNamesProc, Integer(list));
 Result := 1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 memo1.Clear;
 if not EnumResourceTypes(hinstance, @enumResTypesProc, Integer(memo1.Lines)) then
 memo1.Lines.Add(Format('GetLastError= %8.8x', [GetLastError]))
 else
 memo1.Lines.Add('Successful');
end;
end.
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 02166
How to get the NT Domain and UserName of a Process?

=== How to get the NT Domain and UserName of a Process? ===
uses
 TlHelp32;
type
 PTOKEN_USER = ^TOKEN_USER;
 _TOKEN_USER = record
 User: TSidAndAttributes;
 end;
 TOKEN_USER = _TOKEN_USER;
function GetUserAndDomainFromPID(ProcessId: DWORD;
 var User, Domain: string): Boolean;
var
 hToken: THandle;
 cbBuf: Cardinal;
 ptiUser: PTOKEN_USER;
 snu: SID_NAME_USE;
 ProcessHandle: THandle;
 UserSize, DomainSize: DWORD;
 bSuccess: Boolean;
begin
 Result := False;
 ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId);
 if ProcessHandle <> 0 then
 begin
 // EnableProcessPrivilege(ProcessHandle, 'SeSecurityPrivilege', True);
 if OpenProcessToken(ProcessHandle, TOKEN_QUERY, hToken) then
 begin
 bSuccess := GetTokenInformation(hToken, TokenUser, nil, 0, cbBuf);
 ptiUser := nil;
 while (not bSuccess) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) do
 begin
 ReallocMem(ptiUser, cbBuf);
 bSuccess := GetTokenInformation(hToken, TokenUser, ptiUser, cbBuf, cbBuf);
 end;
 CloseHandle(hToken);
 if not bSuccess then
 begin
 Exit;
 end;
 UserSize := 0;
 DomainSize := 0;
 LookupAccountSid(nil, ptiUser.User.Sid, nil, UserSize, nil, DomainSize, snu);
 if (UserSize <> 0) and (DomainSize <> 0) then
 begin
 SetLength(User, UserSize);
 SetLength(Domain, DomainSize);
 if LookupAccountSid(nil, ptiUser.User.Sid, PChar(User), UserSize, PChar(Domain), DomainSize, snu) then
 begin
 Result := True;
 User := StrPas(PChar(User));
 Domain := StrPas(PChar(Domain));
 end;
 end;
 if bSuccess then
 begin
 FreeMem(ptiUser);
 end;
 end;
 CloseHandle(ProcessHandle);
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
 hProcSnap: THandle;
 pe32: TProcessEntry32;
 Domain, User: string;
 s: string;
begin
 hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
 if hProcSnap = INVALID_HANDLE_VALUE then Exit;
 pe32.dwSize := SizeOf(ProcessEntry32);
 if Process32First(hProcSnap, pe32) = True then
 while Process32Next(hProcSnap, pe32) = True do
 begin
 if GetUserAndDomainFromPID(pe32.th32ProcessID, User, Domain) then
 begin
 s := Format('%s User: %s ; Domain: %s',[StrPas(pe32.szExeFile), User, Domain]);
 Listbox1.Items.Add(s);
 end
 else
 Listbox1.Items.Add(StrPas(pe32.szExeFile));
 end;
 CloseHandle(hProcSnap);
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 02115
How to implement a microsecond resolution Delay?

=== How to implement a microsecond resolution Delay? ===
// Wait 0.2ms
procedure PerformanceDelay;
var
 hrRes, hrT1, hrT2, dif: Int64;
begin
 if QueryPerformanceFrequency(hrRes) then
 begin
 QueryPerformanceCounter(hrT1);
 repeat
 QueryPerformanceCounter(hrT2);
 dif := (hrT2 - hrT1) * 10000000 div hrRes;
 until dif > 2;
 end;
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 01657
How to open a presentation

Как открыть презентацию PowerPoint
PowerPoint.Presentations.Open('PresName.ppt', msoFalse, msoFalse, msoTrue);
The second parameter specifies whether the presentation should be opened in read-only mode. If the third parameter is True, an untitled copy of the file is made. The last parameter specifies whether the opened presentation should be visible. You can miss these parameters out in late binding if you're happy with the defaults (False, False, True, respectively, as in the code shown.)
ID: 04460
Category:COM
Category:MS Office
How to patch a process?

=== How to patch a process? ===
{....}
var
 WindowName: Integer;
 ProcessId: Integer;
 ThreadId: Integer;
 buf: PChar;
 HandleWindow: Integer;
 Write: Cardinal;
{....}
const
 WindowTitle = 'a program name';
 Address = $A662D6;
 PokeValue = $4A;
 NumberOfBytes = 2;
{....}
procedure TForm1.Button1Click(Sender: TObject);
begin
 WindowName := FindWindow(nil, WindowTitle);
 if WindowName = 0 then
 begin
 MessageDlg('Program not running.', mtWarning, [mbOK], 0);
 end;
 ThreadId := GetWindowThreadProcessId(WindowName, @ProcessId);
 HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
 GetMem(buf, 1);
 buf^ := Chr(PokeValue);
 WriteProcessMemory(HandleWindow, ptr(Address), buf, NumberOfBytes, Write);
 FreeMem(buf);
 CloseHandle(HandleWindow);
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 02114
How to render a TRichEdit text onto a canvas?

=== How to render a TRichEdit text onto a canvas? ===
procedure RichEditToCanvas(RichEdit: TRichEdit; Canvas: TCanvas; PixelsPerInch: Integer);
var
 ImageCanvas: TCanvas;
 fmt: TFormatRange;
begin
 ImageCanvas := Canvas;
 with fmt do
 begin
 hdc:= ImageCanvas.Handle;
 hdcTarget:= hdc;
 // rect needs to be specified in twips (1/1440 inch) as unit
 rc := Rect(0, 0,
 ImageCanvas.ClipRect.Right * 1440 div PixelsPerInch,
 ImageCanvas.ClipRect.Bottom * 1440 div PixelsPerInch
 );
 rcPage:= rc;
 chrg.cpMin := 0;
 chrg.cpMax := RichEdit.GetTextLen;
 end;
 SetBkMode(ImageCanvas.Handle, TRANSPARENT);
 RichEdit.Perform(EM_FORMATRANGE, 1, Integer(@fmt));
 // next call frees some cached data
 RichEdit.Perform(EM_FORMATRANGE, 0, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 RichEditToCanvas(RichEdit1, Image1.Canvas, Self.PixelsPerInch);
 Image1.Refresh;
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 00574
How to save a presentation

= Как сохранить презентацию PowerPoint =
PowerPoint.Save;
Or for SaveAs:
var
 EmbedFonts: OleVariant;
begin
 EmbedFonts := False;
 PowerPoint.ActivePresentation.SaveAs('PresName.ppt', ppSaveAsPresentation, EmbedFonts);
The second parameter for SaveAs determines the save format - possible values are ppSaveAsAddIn, ppSaveAsPowerPoint3, ppSaveAsPowerPoint4, ppSaveAsPowerPoint7, ppSaveAsPresentation, ppSaveAsRTF, or ppSaveAsTemplate. These are constants defined in the type library. If you aren't using the type library, you can define them yourself like this:
const
 ppSaveAsPresentation = $00000001;
 ppSaveAsPowerPoint7 = $00000002;
 ppSaveAsPowerPoint4 = $00000003;
 ppSaveAsPowerPoint3 = $00000004;
 ppSaveAsTemplate = $00000005;
 ppSaveAsRTF = $00000006;
 ppSaveAsShow = $00000007;
 ppSaveAsAddIn = $00000008;
 ppSaveAsWizard = $00000009;
 ppSaveAsPowerPoint4FarEast = $0000000A;
 ppSaveAsDefault = $0000000B;
ID: 04459
Category:COM
Category:MS Office
How to scale bitmap by percent?

{ .... }
 private
 function ScalePercentBmp(bitmp: TBitmap; iPercent: Integer): Boolean;
{ .... }
function TForm1.ScalePercentBmp(bitmp: TBitmap; iPercent: Integer): Boolean;
var
 TmpBmp: TBitmap;
 ARect: TRect;
 h, w: Real;
 hi, wi: Integer;
begin
 Result := False;
 try
 TmpBmp := TBitmap.Create;
 try
 h := bitmp.Height * (iPercent / 100);
 w := bitmp.Width * (iPercent / 100);
 hi := StrToInt(FormatFloat('#', h)) + bitmp.Height;
 wi := StrToInt(FormatFloat('#', w)) + bitmp.Width;
 TmpBmp.Width := wi;
 TmpBmp.Height := hi;
 ARect := Rect(0, 0, wi, hi);
 TmpBmp.Canvas.StretchDraw(ARect, Bitmp);
 bitmp.Assign(TmpBmp);
 finally
 TmpBmp.Free;
 end;
 Result := True;
 except
 Result := False;
 end;
end;
// Example:
procedure TForm1.Button1Click(Sender: TObject);
begin
 ScalePercentBmp(Image1.Picture.Bitmap, 33);
end;
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03828
== См. также ==
* Алгоритм качественного Resize'a, если точнее, то уменьшения
* How to scale bitmap by percent?
* Качественно уменьшить изображение
* Изменение размера
* Растягивание изображения
* Масштабирование для Canvas
* Создание уменьшенной копии картинки
* Качественное увеличение изображения билинейной интерполяцией
Category:Графика
Category:Bitmap
How to send and receive email

= Как отправлять и принимать емейлы =
This code activates the Tools|Send and Receive|All accounts menu item:
uses Office_TLB; // Office97 for D5 users
var
 ToolsMenu: CommandBar;
 SendRecMenuItem, AllAccs: CommandBarControl;
begin
 ToolsMenu := (Outlook.ActiveExplorer.CommandBars as CommandBars).Item['Tools'];
 // D5 users can omit the underscore after 'Controls' in the next two lines
 SendRecMenuItem := ToolsMenu.Controls_['Send and Receive'];
 AllAccs := (SendRecMenuItem.Control as CommandBarPopup).Controls_['All Accounts'];
 AllAccs.Execute;
If you're using Outlook 2000, you'll have to change 'Send and Receive', perhaps to 'Send/Receive'. (I've had one report that this works, one that it doesn't - perhaps there are spaces around the '/'? Any clarification of this would be very welcome! Pointless menu changes don't make automation any easier...)
ID: 04453
Category:COM
Category:MS Office
How to start a new presentation

Как начать новую презентацию PowerPoint
PowerPoint.Presentations.Open('PresName.ppt', msoFalse, msoFalse, msoTrue);
The second parameter specifies whether the presentation should be opened in read-only mode. If the third parameter is True, an untitled copy of the file is made. The last parameter specifies whether the opened presentation should be visible. You can miss these parameters out in late binding if you're happy with the defaults (False, False, True, respectively, as in the code shown.)
ID: 04461
Category:COM
Category:MS Office
How to turn off ISAPI DLL caching on Windows 2000 and IIS5

You may want to turn off DLL caching to allow you to better debug ISAPI DLL's. Note that if you do turn it off, it is best to turn it back on when you are ready to use your DLL as it greatly improves performance.
Click on Start->Settings->Control Panel->Administrative Tools->Internet Services Manager. Right click on your website and select Properties:
[IIS Manager Screen Shot]
Select the "Home Directory" tab, and click on Configuration...:
[Configuration]
Uncheck "Cache ISAPI applications":
[uncheck cache extensions]
ID: 03430
Category:Связь
Category:Web
HyperText Transfer Protocol - протокол обмена WWW-серверов

HyperText Transfer Protocol (HTTP) - это протокол прикладного уровня, применяемый в распределенных информационных системах гипермедиа. HTTP используется проектом World Wide Web с 1990 года.
HTTP/1.0 предоставляет открытое множество методов, которые могут быть использованы для указания целей запроса. Они построены на дисциплине ссылок, где для указания ресурса, к которому должен быть применен данный метод, используется Универсальный Идентификатор Ресурсов (Universal Resource Identifier - URI), в виде местонахождения (URL) или имени (URN). Формат сообщений сходен с форматом Internet Mail или Multipurpose Internet Mail Extensions (MIME-Многоцелевое Расширение Почты Internet).
HTTP/1.0 используется также для коммуникаций между различными пользовательскими просмотрщиками и шлюзами, дающими гипермедиа доступ к существующим Internet протоколам, таким как SMTP, NNTP, FTP, Gopher и WAIS. HTTP/1.0 разработан, чтобы позволять таким шлюзам через proxy серверы, без какой-либо потери передавать данные с помощью упомянутых протоколов более ранних версий.
== Общая Структура ==
HTTP основывается на парадигме запросов/ответов. Запрашивающая программа (обычно она называется клиент) устанавливает связь с обслуживающей программой-получателем (обычно называется сервер) и посылает запрос серверу в следующей форме: метод запроса, URI, версия протокола, за которой следует MIME-подобное сообщение, содержащее управляющую информацию запроса, информацию о клиенте и, может быть, тело сообщения. Сервер отвечает сообщением, содержащим строку статуса (включая версию протокола и код статуса - успех или ошибка), за которой следует MIME-подобное сообщение, включающее в себя информацию о сервере, метаинформацию о содержании ответа, и, вероятно, само тело ответа. Следует отметить, что одна программа может быть одновременно и клиентом и сервером. Использование этих терминов в данном тексте относится только к роли, выполняемой программой в течение данного конкретного сеанса связи, а не к общим функциям программы.
В Internet коммуникации обычно основываются на TCP/IP протоколах. Для WWW номер порта по умолчанию - TCP 80, но также могут быть использованы и другие номера портов - это не исключает возможности использовать HTTP в качестве протокола верхнего уровня.
Для большинства приложений сеанс связи открывается клиентом для каждого запроса и закрывается сервером после окончания ответа на запрос. Тем не менее, это не является особенностью протокола. И клиент, и сервер должны иметь возможность закрывать сеанс связи, например, в результате какого-нибудь действия пользователя. В любом случае, разрыв связи, инициированный любой стороной, прерывает текущий запрос, независимо от его статуса
Source: Взято с http://delphiworld.narod.ru
ID: 03369
Category:Связь