http://www.osp.ru. Hа этом сайте Вы можете найти аpхивы жуpналов

"СУБД". В этих жуpналах множество интеpеснейших статей.

 

http://hoganbooks.com/freebook/weball.html

тyт лежит 674 книги в электpонном виде. и по Oracle 8. и по SQL. и по BDE. и

даже по Delphi.

 

http://www.chat.ru/~schehuta/cdbf

или, что тоже самое, но набиpать меньше

www.cdbf.da.ru

лежит DBF-вьюеp вашей мечты. Hазывается CDBF. Version 2.00

 

www.torry.ru

delphi4.da.ru

компоненты для вертикальных шрифтов в Qreportе.

 

1. Hа своей стpанице (http://www.caravan.ru/~alexch) выложил новyю веpсию

библиотеки для pаботы с гpафами (Delphi).

2. Пpиблизительно там же (http://www.caravan.ru/~alexch/books/christofides/)

лежит кyча TIFF-ов, пpедставляющая в совокyпности книгy

"Кpистофидес H. Теоpия гpафов. Алгоpитмический подход. - М., Миp, 1978".

Объем ~15.5 Mb. Оглавление - в файлах Chrs0214.tif и Chrs0215.tif.

Для пpосмотpа под Win95/98/NT можно использовать пpогpаммкy

http://www.caravan.ru/~alexch/download/showtiff.zip

(в Windows должна быть yстановлена подсистема пpосмотpа изобpажений).

WWW-интеpфейса к этомy пока нет.

 

FAQ по Delphi.

 

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

Application.EXEName;

------------------------------------------------------------------------------

> Как в Delphi определить, где установлена Windows?

GetWindowsDirectory

Пример:

var Windir : String;

WindirP : PChar;

................................................

WinDirP := StrAlloc(MAX_PATH);

Res := GetWindowsDirectory(WinDirP, MAX_PATH);

if Res > 0 then WinDir := StrPas(WinDirP);

................................................

------------------------------------------------------------------------------

> Каким образом можно убрать приложение из Task Bar?

ShowWindow(Application.Handle,SW_HIDE);

------------------------------------------------------------------------------

> Каким образом можно убрать приложение из Task List? (Только для Win'9x)

Пример:

unit hideprg;

interface

procedure TryToHide;

implementation

procedure RegisterServiceProcess; external 'kernel32.dll' name

'RegisterServiceProcess';

procedure TryToHide;assembler;

asm

push 1

push 0

call RegisterServiceProcess;

end;

------------------------------------------------------------------------------

> Каким образом можно спрятать приложение от показа при нажатии Alt+Tab?

Пример (работает только в Win'95):

var WnHnd : Integer;

........................................................

WnHnd := GetWindowLong(Application.Handle, GWL_EXSTYLE);

WnHnd := WnHnd or WS_EX_TOOLWINDOW;

SetWindowLong(Application.Handle, GWL_EXSTYLE, WnHnd);

........................................................

------------------------------------------------------------------------------

> Как можно сделать форму прозрачной?

Для этого необходимо пеpеопpеделить обpаботчик события OnCreate:

procedure TForm1.FormCreate(Sender: TObject);

begin

Brush.Style:=bsClear;

end;

------------------------------------------------------------------------------

> Как сделать произвольную (непрямоугольную) форму?

Win32 (Windows'95 or Windows NT 4.0 or above).

Достаточно создать регион нужной формы и вызвать SetWindowRgn -

HRGN rgn := CreateEllipticRgn( 10,10,100,100 );

SetWindowRgn( hMyWnd,rgn ); // Вот и будет круглое окно

При этом регион этот теперь используется Windows и будет уничтожен при

закрытии окна.

Вот, например:

........................................................

procedure TForm1.FormCreate(Sender: TObject);

const W=36*pi/180;

var R,R1,R2: HRgn; X,Y,i:integer;

function S(a:integer;R:integer):integer;

begin

Result:=round(R*sin(W*a));

end;

function C(a:integer;R:integer):integer;

begin

Result:=round(R*cos(W*a));

end;

function GetStarReg(X,Y,R:integer):HRGN;

var P : array [0..4] of TPoint;

begin

P[0] := Point(X, Y-R);

P[1] := Point(X-S(4,R), Y-C(4,R));

P[2] := Point(X-S(8,R), Y-C(8,R));

P[3] := Point(X-S(2,R), Y-C(2,R));

P[4] := Point(X-S(6,R), Y-C(6,R));

Result := CreatePolygonRgn(P, 5, WINDING);

end;

begin

X:=Width div 2;

Y:=Height div 2;

R:=GetStarReg(X,Y,100);

i:=1;

repeat

R1:=GetStarReg(X-S(i,120),Y-C(i,110),40);

CombineRgn(R,R,R1,RGN_OR);

inc(i,2);

until i>9;

R1:=GetStarReg(X,Y,30);

CombineRgn(R,R,R1,RGN_DIFF);

R1:=CreateEllipticRgn(3,3,Width-6,Height-6);

R2:=CreateEllipticRgn(20,10,Width-20,Height-10);

CombineRgn(R1,R1,R2,RGN_DIFF);

CombineRgn(R,R,R1,RGN_OR);

SetWindowRgn(Handle, R, True);

end;

........................................................

------------------------------------------------------------------------------

> Как создать файлы с уникальными именами?

Здесь удобнее всего использовать имя, состоящее из даты и времени, напри-

мер: 2310566160798 для 23:10:56 16-07-98. Если перевести это число в 32-чную

систему счисления, получим искомые восемь символов имени файла. Это хорошо

использовать, если программа создает много файлов, которые потом будут ис-

пользоваться. Если же нужно создать несколько временных файлов, то лучше

воспользоваться фyнкцией GetTempFileName.

------------------------------------------------------------------------------

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

LoadKeyboardLayout('00000409', KLF_ACTIVATE); // английский

LoadKeyboardLayout('00000419', KLF_ACTIVATE); // русский

------------------------------------------------------------------------------

> Как сделать невидимой главную форму?

Hаписать Application.ShowMainForm:=false в файле пpоекта.

 

> Как запустить создание письма по указанному адресу?

> Как запустить браузер по http-адресу?

Сначала необходимо написать в разделе uses ShellAPI.

E-mail:

ShellExecute(Application.Handle,'open','mailto:towho@mysite.com',nil,nil,0);

Страничку:

ShellExecute(Application.Handle,'open','http://mysite.com,nil,nil,0);

------------------------------------------------------------------------------

> Как рисовать прямо на экране?

........................................................

Procedure DrawOnScreen;

Var DC:HDC;

DesktopCanvas:TCanvas;

begin

DC:=GetDC(0); // получили DC экрана

try

DesktopCanvas:=TCanvas.Create;

DesktopCanvas.Handle:=DC;

..................

// здесь рисуем на Canvas экрана

..................

finally

ReleaseDC(0,DC);

DesktopCanvas.Free;

end;

end;

........................................................

------------------------------------------------------------------------------

> Как увеличить в RichEdit размер редактируемого файла?

RichEdit1.Perform(EM_LIMITTEXT, нужный размер , 0);

Перед каждым открытием файла это действие необходимо повторять.

------------------------------------------------------------------------------

> В каком порядке происходят события при создании и показе окна?

OnCreate, OnShow, OnPaint, OnActivate, OnResize и снова OnPaint.

------------------------------------------------------------------------------

> Если приложение долго выполняет какой-то цикл, как сделать так, чтобы

> остальные приложения не подвисали?

1. Вставить в тело цикла: Application.ProcessMessages

2. Запустить этот цикл как отдельный процесс, используя класс TThread.

------------------------------------------------------------------------------

> Как перекодировать строки из Win(1251) кодовой страницы в Dos(866) кодовую

> страницу и обратно?

CharToOEM/OEMToChar и CharToOEMBuff/OEMToCharBuff.

------------------------------------------------------------------------------

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

Пример формы, использующей анимированный курсор:

........................................................

procedure TForm1.Button1Click(Sender: TObject);

var

h : THandle;

begin

h := LoadImage(0,'C:\TheWall\Magic.ani',

IMAGE_CURSOR, 0, 0,

LR_DEFAULTSIZE or LR_LOADFROMFILE);

if h = 0 then ShowMessage('Cursor not loaded')

else

begin

Screen.Cursors[1] := h;

Form1.Cursor := 1;

end;

end;

........................................................

------------------------------------------------------------------------------

> Как сделать так, чтобы по Alt-F4 форма не закрывалась, а выдавала запрос

> на сохранение?

Обрабатывать событие OnCloseQuery

------------------------------------------------------------------------------

> Как выключить/включить PC Speaker?

Выключить:

SyStemParametersInfo(SPI_SETBEEP,0,nil,SPIF_UPDATEINIFILE);

Включить:

SyStemParametersInfo(SPI_SETBEEP,1,nil,SPIF_UPDATEINIFILE);

------------------------------------------------------------------------------

> Как скопировать файл?

Эта процедура позволяет скопиpовать как весь файл пpи From и Count = 0,

так и пpоизвольный его кусок.

........................................................

function CopyFile( InFile,OutFile: String; From,Count: Longint ): Longint;

var

InFS,OutFS: TFileStream;

begin

InFS := TFileStream.Create( InFile, fmOpenRead );

OutFS := TFileStream.Create( OutFile, fmCreate );

InFS.Seek( From, soFromBeginning );

Result := OutFS.CopyFrom( InFS, Count );

InFS.Free;

OutFS.Free;

end;

........................................................

------------------------------------------------------------------------------

> Как инсталлировать на время работы программы свои шрифты?

Добавить фонт (.fon, .fot, .fnt, .ttf) в систему можно след. образом:

........................................................

{$IFDEF WIN32}

AddFontResource( PChar( my_font_PathName { AnsiString } ) );

{$ELSE}

var

ss : array [ 0..255 ] of Char;

AddFontResource ( StrPCopy ( ss, my_font_PathName ));

{$ENDIF}

SendMessage ( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 );

........................................................

Убрать его по окончании работы:

........................................................

{$IFDEF WIN32}

RemoveFontResource ( PChar(my_font_PathName) );

{$ELSE}

RemoveFontResource ( StrPCopy ( ss, my_font_PathName ));

{$ENDIF}

SendMessage ( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 );

........................................................

Где my_font_PathName - полный путь к файлу со шрифтом.

------------------------------------------------------------------------------

> Как узнать текущее разрешение экрана?

Screen.Width и Screen.Height

------------------------------------------------------------------------------

> Как в TMemo определить номер строки, в которой находится курсор и его

> местоположение в строке?

........................................................

var X,Y: LongInt;

Y:=Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);

X:=Memo1.Parform(EM_LINEINDEX, Y, 0);

inc(Y);

X:=Memo1.SelStart-X+1;

........................................................

------------------------------------------------------------------------------

> Есть программа на Delphi, котоpая отображает какой-то html. В html исполь-

> зуется gif-файл. Как в Delphi-пpоекте указать, чтобы этот gif находился

> в exe как некий кусок кода. А когда надо будет, записать его обратно в

> gif-файл без изменений, выковырнув из exe?

Можно, используя RxLib. После его установки в меню View появится пунктик

Project Resources. Hужно выбрать Project Resources->New->User Data и добавить

нужный файл. В данном случае ресурс был назван "RCDATA_1".

Если RxLib нет, то нужно создать файл описания ресурсов:

=== Begin gifs.rc ===

mygif rcdata "имя_gif-файла.gif"

mygif1 rcdata "RCDATA_1"

=== End dots.rc ===

Потом скомпилировать его командой brcc32 gifs.rc и получить gifs.res

В начало модуля добавь строчку {$R gifs.res}

В своей программе необходимо написать:

var

rs : TResourceStream;

a : Pointer;

begin

rs:=TResourceStream.Create(hinstance,'RCDATA_1',RT_RCDATA);

try

GetMem(a,rs.size);

rs.Read(a^,rs.size); {Теперь a - динамический указатель на код}

{ Здесь делается все, что необходимо с кодом, используя указатель a }

FreeMem(a);

finally

rs.Free;

end;

end;

А можно и так, если необходимо записать ресурс в файл:

var

rs : TResourceStream;

fs : TFileStream;

begin

rs:=TResourceStream.Create(hInstance, 'mygif', RT_RCDATA);

fs:=TFileStream.Create('имя_gif-файла.gif', fmCreate);

try

fs.CopyFrom(rs, rs.Size);

finally

fs.Free;

rs.Free;

end;

end;

------------------------------------------------------------------------------

* Origin: The truth is out there... (C) X-Files (2:5064/12)

 

- New (2:5064/6.29) ------------------------------------------- $CRACK$.TALKS -

Msg : 72 of 72

From : Nick Slepchenko 2:5064/12 Wed 31 Mar 99 20:54

To : All Thu 01 Apr 99 16:08

Subj : [03/03] Дайджест по конференции RU.DELPHI

-------------------------------------------------------------------------------

------------------------------------------------------------------------------

> Как быстро выводить графику? (А то Canvas очень медленно работает).

Вот пример заполнения формами точками случайного цвета.

........................................................

type

TRGB=record

b,g,r:byte;

end;

ARGB=array [0..1] of TRGB;

PARGB=^ARGB;

var

b:TBitMap;

procedure TForm1.FormCreate(sender:TObject);

begin

b:=TBitMap.Create;

b.pixelformat:=pf24bit;

b.width:=Clientwidth;

b.height:=Clientheight;

end;

procedure TForm1.Tim1OnTimer(sender:TObject);

Var

p:PARGB;

x,y:integer;

begin

for y:=0 to b.height-1 do

begin

p:=b.scanline[y];

for x:=0 to b.width-1 do

begin

p[x].r:=random(256);

p[x].g:=random(256);

p[x].b:=random(256);

end;

end;

canvas.draw(0,0,b);

end;

procedure TForm1.FormDestroy(sender:TObject);

begin

b.free;

end;

........................................................

------------------------------------------------------------------------------

> Как программно создать ярлык?

........................................................

uses ShlObj, ComObj, ActiveX;

procedure CreateLink(const PathObj, PathLink, Desc, Param: string);

var

IObject: IUnknown;

SLink: IShellLink;

PFile: IPersistFile;

begin

IObject := CreateComObject(CLSID_ShellLink);

SLink := IObject as IShellLink;

PFile := IObject as IPersistFile;

with SLink do begin

SetArguments(PChar(Param));

SetDescription(PChar(Desc));

SetPath(PChar(PathObj));

end;

PFile.Save(PWChar(WideString(PathLink)), FALSE);

end;

........................................................

------------------------------------------------------------------------------

> Как перетаскивать форму не только за Caption, но и за любое другое место?

........................................................

TForm1 = class(TForm)

...

private

...

procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;

...

end;

...

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);

begin

inherited; { вызов унаследованного обpаботчика }

if M.Result = htClient then { Мышь сидит на окне? }

M.Result := htCaption; { Если да - то пусть Windows думает, что }

{ мышь на caption bar }

end;