nyuuzyou/wikis huggingface dataset:
Как послать данные другому приложению используя auto-drag-n-drop?

=== Как послать данные другому приложению используя auto-drag-n-drop? ===
uses
 ShellAPI;
function MakeDrop(const FileNames: array of string): THandle;
// Creates a hDrop Object
var
 I, Size: Integer;
 Data: PDragInfoA;
 P: PChar;
begin
 // Calculate memory size needed
 Size := SizeOf(TDragInfoA) + 1;
 for I := 0 to High(FileNames) do
 Inc(Size, Length(FileNames[I]) + 1);
 // allocate the memory
 Result := GlobalAlloc(GHND or GMEM_SHARE, Size);
 if Result <> 0 then
 begin
 Data := GlobalLock(Result);
 if Data <> nil then
 try
 // fill up with data
 Data.uSize := SizeOf(TDragInfoA);
 P := PChar(@Data.grfKeyState) + 4;
 Data.lpFileList := P;
 // filenames at the at of the header (separated with #0)
 for I := 0 to High(FileNames) do
 begin
 Size := Length(FileNames[I]);
 Move(Pointer(FileNames[I])^, P^, Size);
 Inc(P, Size + 1);
 end;
 finally
 GlobalUnlock(Result);
 end
 else
 begin
 GlobalFree(Result);
 Result := 0;
 end;
 end;
end;
function MyEnum(Wnd: hWnd; Res: PInteger): Bool; stdcall;
// search for a edit control with classname 'TEditControl'
var
 N: string;
begin
 SetLength(N, MAX_PATH);
 SetLength(N, GetClassName(Wnd, Pointer(N), Length(N)));
 Result := AnsiCompareText('TEditControl', N) <> 0;
 if not Result then Res^ := Wnd;
end;
// Example: Open msdos.sys in Delphi's Editor window
procedure TForm1.Button1Click(Sender: TObject);
var
 Wnd: HWnd;
 Drop: hDrop;
begin
 // search for Delphi's Editor
 EnumChildWindows(FindWindow('TEditWindow', nil), @MyEnum, Integer(@Wnd));
 if IsWindow(Wnd) then
 begin
 // Delphi's Editor found. Open msdos.sys
 Drop := MakeDrop(['c:\msdos.sys']);
 if Drop <> 0 then PostMessage(Wnd, wm_DropFiles, Drop, 0);
 // Free the memory?
 GlobalFree(Drop);
 end;
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 00372
Category:VCL
Category:DragAndDrop
Category:Файлы
Как послать нажатие клавиши в какое-нибудь окно?

=== Как послать нажатие клавиши в какое-нибудь окно? ===
Эта процедура посылает сообщение о нажатии клавиши.
procedure PostKeyEx32(Key: Word; const Shift: TShiftState; SpecialKey: Boolean);
type
 TShiftKeyInfo = record
 Shift: Byte;
 VKey: Byte;
 end;
 ByteSet = set of 0..7;
const
 ShiftKeys: array [1..3] of TShiftKeyInfo = (
 (Shift: Ord(ssCtrl); VKey: VK_CONTROL),
 (Shift: Ord(ssShift); VKey: VK_SHIFT),
 (Shift: Ord(ssAlt); VKey: VK_MENU)
 );
var
 flag: DWORD;
 bShift: ByteSet absolute shift;
 i: Integer;
begin
 for i := 1 to 3 do
 if ShiftKeys[i].Shift in bShift then 
 keybd_event(ShiftKeys[i].VKey, MapVirtualKey(ShiftKeys[i].VKey, 0), 0, 0);
 if SpecialKey then
 flag := KEYEVENTF_EXTENDEDKEY
 else
 flag := 0;
 keybd_event(Key, MapVirtualKey(Key, 0), flag, 0);
 flag := flag or KEYEVENTF_KEYUP;
 keybd_event(Key, MapVirtualKey(Key, 0), flag, 0);
 for i := 3 downto 1 do
 if ShiftKeys[i].Shift in bShift then 
 keybd_event(ShiftKeys[i].VKey, MapVirtualKey(ShiftKeys[i].VKey, 0), KEYEVENTF_KEYUP, 0);
end;
Чтобы воспользоваться этой процедурой надо предварительно найти и активизировать нужное окно:
SetForegroundWindow(FindWindow(PChar(WindowClassName), PChar(WindowCaption)));
PS. не забудьте поставить задержки типа Sleep(100) после активизации окна и между посылаемыми клавишами, не то окно может не успевать реагировать на клавиши... 
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01490
Как послать нажатие кнопки мыши в окно?

=== Как послать нажатие кнопки мыши в окно? ===
WM_LBUTTONDOWN
WM_RBUTTONDOWN 
Author: Song
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01576
----
Я решил проверить точку нажатия мышки таким вот образом:
 SetForegroundWindow(WindowUO);
 mouse_event(MOUSEEVENTF_MOVE, 400, 400, 0, 0);
и получилось, что мышка перемещалась не в те координаты(относительно разрешения монитора (800 на 600)) которые я задумал(в не зависимости от местоположения мышки она перемещалась строго по одному направлению на одинаковое расстояние), причем я сделал еще один вариант - dx=100, dy=100, но тогда перемещение мышки произошло в другую сторону(в сторону x=0 y=0 монитора)!
Подскажите плз в чем дело? 
Author: Spawn 
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01577
----
Mouse_event программирует не абсолюьные, а относительные координаты.
Чтобы не думалось, просто сначала установите курсор в нужную позицию - SetCursorPos(), а потом делайте клик - Mouse_event() 
Author: Song
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01578
----
На форму вынесите компонент TTimer и опишите его единственное событие следующим образом: 
procedure TForm1.Timer1Timer(Sender: TObject);
var
 x, y: Integer;
begin
 x := Random(Screen.Width);
 y := Random(Screen.Height);
 SendMessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, x + y shl 16);
 SendMessage(Handle, WM_LBUTTONUP, MK_LBUTTON, x + y shl 16);
end;
Для того, чтобы убедиться, что сообщения на самом деле посылаются, давайте обработаем событие OnMouseDown для формы. Мы попытаем обозначать те места, где якобы была нажата кнопка мыши. 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 Form1.Canvas.Ellipse(x - 2, y - 2, x + 2, y + 2);
end; 
Source: http://delphiworld.narod.ru
ID: 01579
----
// Set the mouse cursor to position x,y: 
// Maus an Position x,y setzen: 
SetCursorPos(x, y);
// Simulate the left mouse button down 
// Linke Maustaste simulieren 
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
// Simulate the right mouse button down 
// Rechte Maustaste simulieren 
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
// Simulate a double click 
// Einen Doppelklick simulieren 
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
GetDoubleClickTime;
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
// Simulate a double click on a panel 
// Einen Doppelklick auf einen Panel simulieren 
SendMessage(Panel1.Handle, WM_LBUTTONDBLCLK, 10, 10)
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01580
Как послать сообщение ICQ?

{
 You need 3 TEdits, 1 TMemo and 1 TClientSocket.
 Set the TClientsocket's Port to 80 and the Host to wwp.mirabilis.com.
}
var
 Form1: TForm1;
 csend: string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
 cSend := 'POST http://wwp.icq.com/scripts/WWPMsg.dll HTTP/2.0' + chr(13) + chr(10);
 cSend := cSend + 'Referer: http://wwp.mirabilis.com' + chr(13) + chr(10);
 cSend := cSend + 'User-Agent: Mozilla/4.06 (Win95; I)' + chr(13) + chr(10);
 cSend := cSend + 'Connection: Keep-Alive' + chr(13) + chr(10);
 cSend := cSend + 'Host: wwp.mirabilis.com:80' + chr(13) + chr(10);
 cSend := cSend + 'Content-type: application/x-www-form-urlencoded' + chr(13) + chr(10);
 cSend := cSend + 'Content-length:8000' + chr(13) + chr(10);
 cSend := cSend + 'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*' +
 chr(13) + chr(10) + chr(13) + chr(10);
 cSend := cSend + 'from=' + edit1.Text + ' &fromemail=' + edit2.Text +
 ' &fromicq:110206786' + ' &body=' + memo1.Text + ' &to=' + edit3.Text + '&Send=';
 clientsocket1.Active := True;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 clientsocket1.Socket.SendText(csend);
 clientsocket1.Active := False;
end;
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03380
Category:Связь
Как послать сообщение всем окнам Windows?

=== Как послать сообщение всем окнам Windows? ===
var
 FM_FINDPHOTO: Integer;
initialization
// Для использовать hwnd_Broadcast нужно сперва
// зарегистрировать уникальное сообщение
FM_FindPhoto := RegisterWindowMessage('MyMessageToAll');
// Чтобы поймать это сообщение в другом приложении
//(приемнике) нужно перекрыть DefaultHandler
procedure TForm1.DefaultHandler(var Message);
begin
 with TMessage(Message) do
 begin
 if Msg = Fm_FindPhoto then
 MyHandler(WPARAM, LPARAM)
 else
 Inherited DefaultHandler(Message);
 end;
end;
// А теперь можно
SendMessage(HWND_BROADCAST, FM_FINDPHOTO, 0, 0);
Кстати, для посылки сообщения дочерним контролам некоего контрола можно использовать метод Broadcast.
Author: Andrey Burov (2:463/238.19)
Author: StayAtHome
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02317
Как послать файл на принтер?

uses winspool;
const
 GenericPrinter: PChar = 'Universal/Nur Text';
 // Change to systems generic drivers name, it's localized
procedure PrintLineToGeneric(const line: string );
var
 BytesWritten: DWORD;
 hPrinter: THandle;
 DocInfo: TDocInfo1;
begin
 if not WinSpool.OpenPrinter(GenericPrinter, hPrinter, nil) then
 raise Exception.Create('Printer not found');
 try
 DocInfo.pDocName := 'MyDocument';
 DocInfo.pOutputFile := Nil;
 DocInfo.pDatatype := 'RAW';
 if StartDocPrinter(hPrinter, 1, @DocInfo) = 0 then
 Abort;
 try
 if not StartPagePrinter(hPrinter) then
 Abort;
 try
 if not WritePrinter(hPrinter, @line[1], Length(line), BytesWritten) then
 Abort;
 finally
 EndPagePrinter(hPrinter);
 end;
 finally
 EndDocPrinter(hPrinter);
 end;
 finally
 WinSpool.ClosePrinter(hPrinter);
 end;
end;
ID: 03258
Category:Принтер
Как послать широковещательный UDP пакет?

procedure TMainForm.FormCreate(Sender: TObject);
var
 Init: TWSAData;
 SockOpt: BOOL;
 Sock: TSocket;
 Target: TSockAddrIn;
begin
 WSAStartup($101, Init);
 Sock := Socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
 SockOpt := TRUE;
 SetSockOpt(Sock, SOL_SOCKET, SO_BROADCAST, PChar(@SockOpt), SizeOf(SockOpt)) ;
 Target.sin_port := htons(8167); // номер порта
 Target.sin_addr.S_addr := INADDR_BROADCAST;
 Target.sa_family := AF_INET;
 SendTo(Sock, Data, DataBytes, 0, Target, SizeOf(Target));
 WSACleanup;
end;
Source: http://forum.sources.ru
ID: 03549
Category:Связь
Category:Сокеты
Как посмотреть требуемые библиотеки для бинарника?

[root@snoppy hello]# ldd helloworld
 /lib/libNoVersion.so.1 => /lib/libNoVersion.so.1 (0x40018000)
 libpthread.so.0 => /lib/i686/libpthread.so.0 (0x4002f000)
 libdl.so.2 => /lib/lib/libdl.so.2 (0x40044000)
 libc.so.6 => /lib/i686/libc.so.6 (0x40048000)
 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
ID: 04623
Category:Kylix
Category:Linux
Как построить строку подключения

=== Как построить строку подключения ===
function BuildConnectionString(Database, Server, Login, Password: string): Widestring;
begin
 if Password <> then
 Password := ';Password=' + Password + ';Persist Security Info=True'
 else
 Password := ';Persist Security Info=False';
 Result := Format('Provider=SQLOLEDB.1%s;User ID=%s;Initial Catalog=%s;Data Source=%s', [Password, Login, Database, Server]);
end;
Author: Автор: Vit
ID: 02788
Category:Базы данных
Category:MS SQL Server
Как посчитать возраст человека?

function CalculateAge(Birthday, CurrentDate: TDate): Integer;
var
 Month, Day, Year, CurrentYear, CurrentMonth, CurrentDay: Word;
begin
 DecodeDate(Birthday, Year, Month, Day);
 DecodeDate(CurrentDate, CurrentYear, CurrentMonth, CurrentDay);
 if (Year = CurrentYear) and (Month = CurrentMonth) and (Day = CurrentDay) then
 begin
 Result := 0;
 end
 else
 begin
 Result := CurrentYear - Year;
 if (Month > CurrentMonth) then
 Dec(Result)
 else
 begin
 if Month = CurrentMonth then
 if (Day > CurrentDay) then
 Dec(Result);
 end;
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 Label1.Caption := Format('Your age is %d', [CalculateAge(StrToDate('01.01.1903'), Date)]);
end;
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 04233
Category:Алгоритмы
Category:Математика
Как правильно работать с прозрачными окнами?

=== Как правильно работать с прозрачными окнами? ===
Как правильно работать с прозрачными окнами (стиль WS_EX_TRANSPARENT)?
Стиль окна-формы указывается в CreateParams. Только вот когда перемещаешь его, фон остается со старым куском экрана. Чтобы этого не происходило, то когда pисуешь своё окно, запоминай, что было под ним,а пpи пеpемещении восстанавливай.
 HDC hDC = GetDC(GetDesktopWindow()) тебе поможет..
 Andrei Bogomolov
 http://cardy.hypermart.net
 ICQ UIN:7329451
 admin@cardy.hypermart.net
 e-pager: 7329451@pager.mirabilis.com
 (2:5013/11.3)
Author: StayAtHome
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00350
Как правильно соединяться с базой данных под Personal Oracle

=== Как правильно соединяться с базой данных под Personal Oracle ===
user/password@2: Это так для Oracle SQL Plus, и более других его утилит. А в BDE надо оставить все как для соединения с сетевым сервером, (протокол TNS, имя пользователя, кодировку, интерфейсную DLL) только вместо имени сервера написать "2:". Это годится и для случая, когда на одной машине и сетевой сервер и приложение.
Author: Nomadic
Source: Взято с http://delphiworld.narod.ru
ID: 02730
Как предотвратить Data Corruption (повреждение данных)?

=== Как предотвратить Data Corruption (повреждение данных)? ===
{
 If a database or a table is local on a PC installed (Paradox or Dbase)
 and the BDE-setting "LOCAL SHARE" is FALSE, then changings are not
 stored immediatly but are kept in the memory.
 This changings are gone after a chrash.
 So it might be better after changing to store the data physically on the disk:
}
uses
 BDE;
procedure TForm1.Table1AfterPost(DataSet: TDataSet);
begin
 DbiSaveChanges(Table1.Handle);
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 02645
Как предотвратить Shut Down?

=== Как предотвратить Shut Down? ===
{
The WM_QUERYENDSESSION message is sent to all applications
when the user chooses to end the session or when an application calls the
ExitWindows function.
If any application returns zero, the session is not ended.
The system stops sending WM_QUERYENDSESSION messages as soon as one application
returns zero.
After processing this message, the system sends the WM_ENDSESSION message with the
wParam parameter set to the results of the WM_QUERYENDSESSION message.
Windows NT/2000/XP: When an application returns TRUE for this message,
it receives the WM_ENDSESSION message and it is terminated,
regardless of how the other applications respond to the WM_QUERYENDSESSION message.
Windows 95/98/Me: After all applications return TRUE for this message,
they receive the WM_ENDSESSION and they are terminated.
}
private
 procedure WMQueryEndSession (var Msg: TWMQueryEndSession); message WM_QueryEndSession;
end;
implementation
procedure TForm1.WMQueryEndSession (var Msg: TWMQueryEndSession);
begin
 if MessageDlg('Close Windows now/ Windows beenden?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
 Msg.Result := 0
 else
 Msg.Result := 1;
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 01675
Как предотвратить появление login dialog?

=== Как предотвратить появление login dialog? ===
To bypass the login dialog when connecting to a server database, use the property LoginPrompt.You will have to provide the username & password at runtime, but you also can set that up at design time in the object inspector, property Params.
This short source code shows how to do it:
Database1.LoginPrompt := false;
with Database1.Params do
begin
 Clear;
 // the parameters SYSDBA & masterkey should be
 // retrieved somewhat different :-)
 Add('USER NAME=SYSDBA');
 Add('PASSWORD=masterkey');
end;
Database1.Connected := tr
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 02881
Category:Базы данных
Category:Interbase
Как предотвратить утечки памяти при возникновении ошибок?

=== Как предотвратить утечки памяти при возникновении ошибок? ===
Используйте конструкцию
try
 { здесь вы пишите код в котором может произойти ошибка }
finally
 { здесь вы пишите код который выполнится в любом случае - хоть произойдёт ошибка, хоть нет }
end
Например, это часто применяется во избежание утечек при динамическом распределении памяти:
var t: TStringList;
...
t := TStringList.Create(); // распределили память под объект t
try
 { здесь работаем с переменной t }
finally
 t.free(); // память выделенная под объект t всегда будет освобождена 
end
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: http://forum.vingrad.ru
ID: 00025
Как преобразовать String в Binary и наоборот?

=== Как преобразовать String в Binary и наоборот? ===
function BinStrToByte(a_sBinStr: string): byte;
var
 i: integer;
begin
 Result := 0;
 for i := 1 to length(a_sBinStr) do
 Result := (Result shl 1) or byte(a_sBinStr[i] = '1');
end;
function ByteToBinStr(a_bByte: byte): string;
var
 i: integer;
begin
 SetLength(Result, 8);
 for i := 8 downto 1 do
 begin
 Result[i] := chr($30 + (a_bByte and 1));
 a_bByte := a_bByte shr 1;
 end;
end;
// Примечание: вторая функция использует тот факт,
// что в таблице ANSI коды '0' = $30 и '1' = $31
Source: Взято с http://delphiworld.narod.ru
ID: 00143
Как преобразовать http://192.168.1.2 в http://3232235778 ?

Функция, представленная в этом примере может быть и не очень элегантна, зато работает. Функция получает в качестве параметра строку, содержащую IP адрес, и возвращает строку с IP адресом в виде DWord значения. Результат легко можно проверить командой "Ping".
Совместимость: Delphi (все версии)
Обратите внимание, что необходимо добавить "Math" в "Uses" для функции "IntPower";
function IP2HEX(OrgIP: string): string;
var
 OrgVal: string; // Сохраняем оригинальное значение IP адреса
 O1, O2, O3, O4: string; // части оригинального IP
 H1, H2, H3, H4: string; // шестнадцатиричные части
 HexIP: string; // Здесь будут собраны все шестнадцатиричные части
 XN: array[1..8] of Extended;
 Flt1: Extended;
 Xc: Integer;
begin
 // Сохраняем в обратном порядке для простого случая
 Xn[8] := IntPower(16, 0); Xn[7] := IntPower(16, 1); Xn[6] := IntPower(16, 2); Xn[5] := IntPower(16, 3);
 Xn[4] := IntPower(16, 4); Xn[3] := IntPower(16, 5); Xn[2] := IntPower(16, 6); Xn[1] := IntPower(16, 7);
 // Сохраняем оригинальный IP адрес
 OrgVal := OrgIP;
 O1 := Copy(OrgVal, 1, Pos('.', OrgVal) - 1); Delete(OrgVal, 1, Pos('.', OrgVal));
 O2 := Copy(OrgVal, 1, Pos('.', OrgVal) - 1); Delete(OrgVal, 1, Pos('.', OrgVal));
 O3 := Copy(OrgVal, 1, Pos('.', OrgVal) - 1); Delete(OrgVal, 1, Pos('.', OrgVal));
 O4 := OrgVal;
 H1 := IntToHex(StrToInt(O1), 2); H2 := IntToHex(StrToInt(O2), 2);
 H3 := IntToHex(StrToInt(O3), 2); H4 := IntToHex(StrToInt(O4), 2);
 // Получаем шестнадцатиричное значение IP адреса
 HexIP := H1 + H2 + H3 + H4;
 // Преобразуем это большое шестнадцатиричное значение в переменную Float
 Flt1 := 0;
 for Xc := 1 to 8 do
 begin
 case HexIP[Xc] of
 '0'..'9': Flt1 := Flt1 + (StrToInt(HexIP[XC]) * Xn[Xc]);
 'A': Flt1 := Flt1 + (10 * Xn[Xc]);
 'B': Flt1 := Flt1 + (11 * Xn[Xc]);
 'C': Flt1 := Flt1 + (12 * Xn[Xc]);
 'D': Flt1 := Flt1 + (13 * Xn[Xc]);
 'E': Flt1 := Flt1 + (14 * Xn[Xc]);
 'F': Flt1 := Flt1 + (15 * Xn[Xc]);
 end;
 end;
 Result := FloatToStr(Flt1);
end;
Author: Roni Havas
Source: http://forum.sources.ru
ID: 03349
Category:Связь
Как преобразовать длинный IP адрес в короткий адрес / порт ?

Некоторые старые internet протоколы (такие как FTP) посылают IP адреса и номера портов в шестизначном формате XXX.XXX.XXX.XXX.XX.XXX Следующий код позволяет преобразовать такой адрес к нормальному четырёхзначному IP адресу.
procedure LongIPToShort(aLongIPAddress: string; out ShortIPAddress: string; out PortNumber: Integer);
var
 I, DotPos, tempPort: Integer;
 tempAddy, temp: string;
 TempStr: string;
begin
 tempAddy := ;
 tempStr := ;
 // Определяем, какой символ использует отправитель в качестве разделителя длинного IP: , или .
 if (POS(',', aLongIPAddress) <> 0) then
 TempStr := ','
 else
 TempStr := '.';
 for I := 1 to 4 do
 begin
 DotPOS := POS(TempStr, aLongIPAddress);
 tempAddy := tempAddy + (Copy(aLongIPAddress, 1, (DotPos - 1)));
 if I <> 4 then TempADdy := TempAddy + '.';
 Delete(aLongIpAddress, 1, DotPos);
 end;
 DotPos := Pos(TempStr, aLongIpAddress);
 temp := Copy(aLongIpAddress, 1, (DotPos - 1));
 tempPort := (StrToInt(temp) * 256);
 Delete(aLongIpAddress, 1, DotPos);
 TempPort := tempPort + StrToInt(ALongIpAddress);
 ShortIPAddress := TempADdy;
 PortNumber := tempPort;
end;
Source: http://forum.sources.ru
ID: 03350
Category:Связь
Как преобразовать значение любого типа в строку

=== Как преобразовать значение любого типа в строку ===
Более подробно ищите в хелпе Delphi по словам "Variant" и "TVarData"... 
function ToString(Value: Variant): String;
begin
 case TVarData(Value).VType of
 varSmallInt,
 varInteger : Result := IntToStr(Value);
 varSingle,
 varDouble,
 varCurrency : Result := FloatToStr(Value);
 varDate : Result := FormatDateTime('dd/mm/yyyy', Value);
 varBoolean : if Value then Result := 'T' else Result := 'F';
 varString : Result := Value;
 else
 Result := ;
 end;
end;
Использование: 
ShowMessage(ToString(10.87));
ShowMessage(ToString(10));
или 
var
 V1 : Double;
 V2 : Integer;
 V3 : TDateTime;
 V4 : Boolean;
begin
 //...
 ShowMessage(ToString(V1)); // Double a String
 ShowMessage(ToString(V2)); // Integer a String
 ShowMessage(ToString(V3)); // DateTime a String
 ShowMessage(ToString(V4)); // Boolean a String
end;
Так же можно пользоваться другими вариантами, например: 
 varCurrency: Result := CurrToStrF(Value ,ffFixed, CurrencyDecimals);
и 
 varDate: Result := DateToStr(Value);
Source: http://delphiworld.narod.ru/
ID: 00946
Как преобразовать указатель на метод в указатель на функцию?

=== Как преобразовать указатель на метод в указатель на функцию? ===
// Converting method pointers into function pointers 
// Often you need a function pointer for a callback function. But what, if you want to specify a method as 
// an callback? Converting a method pointer to a function pointer is not a trivial task; both types are 
// incompatible with each other. Although you have the possibility to convert like this "@TClass.SomeMethod", 
// this is more a hack than a solution, because it restricts the use of this method to some kind of a class 
// function, where you cannot access instance variables. If you fail to do so, you'll get a wonderful gpf. 
// But there is a better solution: run time code generation! Just allocate an executable memory block, and 
// write 4 machine code instructions into it: 2 instructions loads the two pointers of the method pointer 
// (code & data) into the registers, one calls the method via the code pointer, and the last is just a return 
// Now you can use this pointer to the allocated memory as a plain function pointer, but in fact you are 
// calling a method for a specific instance of a Class. 
type TMyMethod = procedure of object; 
function MakeProcInstance(M: TMethod): Pointer; 
begin 
 // allocate memory 
 GetMem(Result, 15); 
 asm 
 // MOV ECX, 
 MOV BYTE PTR [EAX], $B9 
 MOV ECX, M.Data 
 MOV DWORD PTR [EAX+$1], ECX 
 // POP EDX 
 MOV BYTE PTR [EAX+$5], $5A 
 // PUSH ECX 
 MOV BYTE PTR [EAX+$6], $51 
 // PUSH EDX 
 MOV BYTE PTR [EAX+$7], $52 
 // MOV ECX, 
 MOV BYTE PTR [EAX+$8], $B9 
 MOV ECX, M.Code 
 MOV DWORD PTR [EAX+$9], ECX 
 // JMP ECX 
 MOV BYTE PTR [EAX+$D], $FF 
 MOV BYTE PTR [EAX+$E], $E1 
 end; 
end; 
procedure FreeProcInstance(ProcInstance: Pointer); 
begin 
 // free memory 
 FreeMem(ProcInstance, 15); 
end; 
Language: en
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 00094