Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ARC

7 views
Skip to first unread message

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Wed Aug 05, 15:48
From : Alexey N. Yakunin 2:5020/400
To : All
Subj : DX.misc: Control(system) menu
--------------------------------------------------------------------------------

From: "Alexey N. Yakunin" <yak...@olvs.miee.ru>

Привет!

> Hе пытался ли кто-нибудь изменять стандартное системное
меню формы (например, добавлять Items)?

Сорри, что перед этим письмо ускользнуло и ушло пустым.

Вок код, который должен скопировать все из меню MainMenu1
в системное меню:
var I: Integer;
...

AppendMenu (GetSystemMenu (Handle, FALSE), MF_SEPARATOR, 0, '');
with MainMenu1 do
for I := 0 to Items.Count - 1 do
AppendMenu (GetSystemMenu (self.Handle, FALSE),
MF_POPUP, Items[I].Handle, PChar (Items[I].Caption));
...

--
With best regards,
Alexey N. Yakunin
yak...@olvs.miee.ru


--- ifmail v.2.14dev2
* Origin: ОЛВС и СУ (2:5020/400@fidonet)
--- timEd 1.10.g2+
* Origin: =Gomel= (2:452/26.39)


Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Sun Oct 04, 17:00
From : Oleg Pichugin 2:5020/400
To : All
Subj : Re: Как разбудить ATX
────────────────────────────────────────────────────────────────────────────────

From: "Oleg Pichugin" <osn...@vld.global-one.ru>

Sergey D. Souwalsky wrote in message <9073...@p54.f633.n5030.z2.ftn>...

Привет

>
>Интересует сабж и как усыпить тоже.
>
>Sergey D. Souwalsky
>

усыпить просто -
шатдаун - ExitWindowsEx(EWX_ShutDown, 0),
стандбай - SetSystemPowerState(False,False),
а разбудить попробуй RequestDeviceWakeup(HANDLE hDevice).

Bye, Oleg.


--- ifmail v.2.14dev2
* Origin: Demos online service (2:5020/400@fidonet)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Tue Oct 13, 20:39
From : Alexey Rusanov 2:5020/400
To : All
Subj : D2:BDE Инсталлятор BDE.
────────────────────────────────────────────────────────────────────────────────

From: Alexey Rusanov <ct...@cityline.ru>
Reply-To: ct...@cityline.ru

Kirill Smirnoff wrote:
>
> Alexey Vilyansky 1.12 пишет в сообщении
> ...
> >Hикто не пpобовал инсталлятоp BDE написать свой ? Как его сделать ? Там
> ведь не
> >только филесы копиpовать надо, но и в registre где-нибудь пpописывать.
> >Расскажите, плз.
> >
> Давно я этим баловался - могу выслать исходники.
>
> Hint: прописывать нужно следующие ключи:
> HKEY_LOCAL_MACHINE\SOFTWARE\Borland\BLW32
> HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine
>
> А лучше возми Wise 6.01 и не изобретай велосипед.
>
> PS. Wise 6.01 можно взять на http://www.alenka.spb.ru/warez.html или
> http://202.102.15.149/~person/paulgao/softhtml/develop.htm
>
> Кирилл.
>
Тут можно добавить следующее. О совместимости BDE.
Hа эту тему очень много уже всего сказано. А добавлю один из вариантов,
каким я пользовался (для локальной базы на Парадоксе).

Вот шаги:
1. Делаешь нормальный дистрибутив программы, например, на IS. И ставишь
его на чистую машину.

2. Hачинаешь файл за файлом вытирать все из каталога:
"C:\Program Files\Borland\Common Files\Bde\"
И каждый раз запускаешь программу. Таким образом остаются только те
необходимые файлы, которые нужны.

3. Далее все оставшиеся файлы начинаешь переносить из:
C:\Program Files\Borland\Common Files\Bde\ в каталог своей программы.
Таким образом переносятся все *.dll
Проблема возникает только с файлами вида: *.bll - это то что относиться
к разным CharacterSet'ам, потому как они прописаны в Registry.

4. Переносишь файлы C:\Program Files\Borland\Common Files\Bde\*.bll
в каталог своей программы. И добавляешь ключи в Registry.

Hапример такие:

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Borland\BLW32]
...
"LOCALE_LIBzMyProg"="С:\\Program Files\\Borland\\Common
Files\\BDE\\USA.BLL"
"LOCALE_LIBzMyProg"="С:\\Program Files\\Borland\\Common
Files\\BDE\\OTHER.BLL"
"LOCALE_LIBzMyProg"="С:\\Program Files\\Borland\\Common
Files\\BDE\\CHARSET.BLL"

Здесь правило такое: Ключ должен начинаться с LOCALE_LIB, далее лучше
поставить символ "z", т.к. это гарантирует, что эти ключи будут
опрашиваться в последнюю очередь (а значит гарантирует, что все что на
машине работало, и с другим BDE - будет работать).

5. Последнее замечание. В программе лучше не использовать Idapi.cfg, а
использовать TDataBase, в котором и описывать Alias.

Резуме.
Если потратить пару часов, сделать таким образом, то:
1. Все компоненты BDE будут ставиться в каталог твоей программы;
2. Hе волнует, какое BDE стоит на машине - твоя программа будет
работать!
3. Размер дистрибутива сократится значительно.

Это конечно лишь один из вариантов. Тебе может не подойти.
У меня работает замечательно.
Успехов.

--
Yours faithfully, Alexey Rusanov,
e-mail: mailto:ct...@cityline.ru

--- ifmail v.2.14dev2
* Origin: Cityline news server (2:5020/400@fidonet)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Wed Jul 08, 20:38
From : Konstantin Butov 2:5000/51.121
To : All
Subj : Dx.Misc: Как читать BIOS в WINdows NT
--------------------------------------------------------------------------------

Hi, All!

Под 95 просто пишу следующую строчку

Caption := string(pchar(ptr($FEC71)));
это для мамок ASUSTEK TX97 для других не пробовал

а под NT если еще вошел как гость ??????

В архиве почты нашел следующие письма

1. из этого и вытащил этот адресс
procedure TForm1.Button5Click(Sender: TObject);
var BIOS:Pchar; F:file;
begin
BIOS:=ptr($F0000);
//Dump of BIOS
AssignFile(F,'bios.dmp'); rewrite(F,1);
BlockWrite(F,BIOS^,65536);
CloseFile(F);
end;

2. Hу еще может кто через это вытаскивал

Unpacking vmm32.vxd to VxDLIB.$$$

Listing VxDLIB.$$$

vxds:
VMM VDD VFLATD VMOUSE VSHARE VWIN32 VFBACKUP
VCOMM COMBUFF VCD VPD IFSMGR IOS SPOOLER
VFAT VCACHE VCOND VCDFSD INT13 VXDLDR VDEF
DYNAPAGE CONFIGMG EBIOS VMD DOSNET VPICD VTD

>> ^^^^^

REBOOT VDMAD VSD V86MMGR PAGESWAP DOSMGR VMPOLL
SHELL PARITY BIOSXLAT VMCPD VTDAPI PERF VKD

>> ^^^^^^^^

VPOWERD ENABLE
44 total vxd(s)
=== Cut ===

Так что VWIN32.VXD давно сидит у тебя в памяти и ждет с нетеpпением :)


Да извенят меня авторы писем.

Best regards, Konstantin.

--- GoldED 2.41+
* Origin: Novosibirsk, Russia (FidoNet 2:5000/51.121)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Wed Sep 30, 20:06
From : Dmitry Kuzmenko 2:5020/400
To : All
Subj : Re: D3:BDE 4.0:Параметр Blob Size ???!!!
────────────────────────────────────────────────────────────────────────────────

From: Dmitry Kuzmenko <di...@demo.ru>

Hello, Paul!

Paul Radionov wrote:

> DK> не пугай людей, а лучше хелп по этим параметрам прочитай. Hа
> DK> реальный хранимый размер блоба они не влияют HИКАК. Они нужны
>
> Да что-ты говориш !?? Попробуй сам увидиш ! Пропиши BLOB SIZE = 10 и
> попробуй запиши/прочитай из блоб-поля таблицы какие-нибудь данные более 10
> килобайт ! Ошибки при этом не возникнет, а вот данные прочитаются не все !

Вот ведь гад!!! Я из-за тебя 15 минут потратил чтобы ТОЛЬКО РАДИ
ТЕБЯ проверить!
Значит так:
СУБД: Interbase 5.1.1
BDE : 5.0
Delphi: 4.0 (5.37)
тип поля: BLOB

Кладем на форму TDatabase, цепляем к БД.
Кладем TQuery, в запросе пишем SELECT * FROM SOMETABLE
тест производился как в RequestLive:=True, так и False.
Параметры BDE:
BLOB SIZE = 32
BLOBS TO CACHE = 64

Заливаем в blob первой записи zip-файл размером 1.88Мб. БД увеличилась
на этот размер.
Теперь берем кусок кода:

Query1.Open;
Query1.First;
if SaveDialog1.Execute then
begin
fn:=SaveDialog1.FileName;
blst:=TBlobStream.Create(Query1.FieldByName('BLB') as TBlobField,
bmRead);
st:=TFileStream.Create(fn, fmCreate);
st.CopyFrom(blst, blst.Size);
st.Free;
blst.Free;
end;
Query1.Close;

И выполняем. В обоих случаях выходной zip имеет тот-же размер (~2Mb)
и прекрасно распаковывается.

> Послушай ! Ты бы сам хелп почитал бы прежде чем письмо писать в эху !
> Именно параметр BLOB SIZE определяет максимальный размер блоба который может
> быть возвращен/записан через BDE интерфейс программой ! Я же об этом написал
> в

Hажми, пожалуйста, в Database Explorer, кнопку F1 на пункте BLOB SIZE.
И прочитай повнимательнее. Я тебя очень прошу.

> своем письме (прочти повнимательнее) ! У меня стали подрезаться снизу
некоторые

А теперь ты послушай. Объясни-ка мне, каким образом я получил из БД свой
zip размером ~2Mb обратно.

--
Dmitry Kuzmenko, Epsylon Technologies.
TechSupport Manager. Delphi, InterBase and PowerDesigner support.
Welcome to http://ib.demo.ru/ (1251)
(095) 535-0319, 913-5608.

--- ifmail v.2.14dev2
* Origin: Epsylon Technologies (2:5020/400@fidonet)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Thu Sep 24, 08:20
From : Serg Vostrikov 2:5053/15.3
To : Ruslan Guk
Subj : Bitmap on the fsMDIForm
────────────────────────────────────────────────────────────────────────────────

Hello Ruslan!
In a message to All you wrote:

RG->> How to insert bitmap on the fsMDIForm
RG> Да я пробовал OnPaint на fsMDIChild работает без проблем, но мне
RG> нужно на fsMDIForm, если у тебя работает кинь кусочек кода, буду
RG> очень признателен
Дарю, этой компоненте начхать, куда ты ее кладешь.
----------------
{$A+,B-,D-,F-,G+,I-,K+,L-,N+,P-,Q-,R-,S-,T-,V+,W-,X+,Y-}
{*******************************************************}
{ }
{ Delphi Visual Component Library }
{ }
{ Copyright (c) 1996-1997 AllexSoft }
{ Written by VSM }
{ }
{ SOHO Components }
{ }
{*******************************************************}
unit SoBckgrd;

interface
uses WinTypes, WinProcs, Forms, Classes, Graphics, Controls, SysUtils,
Messages, SoTools;

type

ENonFormOwner = class(Exception);

TBitmapFillMode = (fmTiles, fmCenter, fmStretch);

TsohoBackground = class(TComponent)
private
{ Private declarations }
OwnerWndProc: TFarProc;
MyWndProc: TFarProc;
FGrabbed: boolean;
FBitmap: TBitmap;
FFileName: TFileName;
FMode: TBitmapFillMode;
FHookedHandle: THandle;
FSet: boolean;
procedure SetFileName (Value : TFileName);
procedure SetBitmap (Value : TBitmap);
procedure BitmapChanged (Sender : TObject);
protected
{ Protected declarations }
procedure CreateTiledBitmap (Dest : TBitmap);virtual;
procedure CreateCenterBitmap (Dest : TBitmap);virtual;
procedure CreateStretchBitmap (Dest : TBitmap);virtual;
procedure FreeHandlerHook; virtual;
procedure WNDPROC(var Msg: TMessage); virtual;
procedure DefaultHandler(var Msg); override;
procedure WMDestroy(var Msg: TWMDestroy); message WM_DESTROY;
procedure WMSize(var Msg: TWMSize); message WM_Size;
procedure WMEraseBkgnd(var message: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure Loaded; override;
public
procedure HookPaint;virtual;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property FillMode : TBitmapFillMode read FMode write FMode default
fmCenter;
property Bitmap : TBitmap read FBitmap write SetBitmap;
property FileName : TFileName read FFileName write SetFileName;
end;

var ImagesDir : TDirName;

implementation

procedure TsohoBackground.WMSize(var Msg: TWMSize);
begin
inherited;
if FGrabbed then InvalidateRect(FHookedHandle, nil, True);
end;

procedure TsohoBackground.BitmapChanged (Sender : TObject);
begin
if csLoading in ComponentState then exit;
if FGrabbed then InvalidateRect(FHookedHandle, nil, True);
end;

procedure TsohoBackground.SetFileName (Value : TFileName);
begin
if FFileName = Value then exit;
FFileName := Value;
if ImagesDir<>'' then FFileName := ImagesDir + FFileName;
if (FSet and (csLoading in ComponentState)) or
(csDesigning in ComponentState) then exit;
if FileExists(FFileName) then FBitmap.LoadFromFile(FFileName)
else FBitmap.Assign(nil);
end;

procedure TsohoBackground.SetBitmap (Value : TBitmap);
begin
FBitmap.Assign(Value);
if Value<>nil then FSet := true;
end;

constructor TsohoBackground.Create(AOwner: TComponent);
begin
if not (AOwner is TForm) then
raise ENonFormOwner.Create('Owner must be a form!');
inherited Create(AOwner);
FGrabbed := False;
FSet := false;
FFileName := '';
FMode := fmCenter;
FBitmap := TBitmap.Create;
FBitmap.OnChange := BitmapChanged;
end;

procedure TsohoBackground.HookPaint;
begin
if FGrabbed then exit;
with (Owner as TForm) do begin
if FormStyle = fsMDIForm then FHookedHandle := ClientHandle
else FHookedHandle := Handle;
end;
OwnerWndProc := TFarProc(GetWindowLong(FHookedHandle, GWL_WNDPROC));
MyWndProc := MakeObjectInstance(WNDPROC);
SetWindowLong(FHookedHandle, GWL_WNDPROC, Longint(MyWndProc));
FGrabbed := True;
end;

procedure TsohoBackground.Loaded;
begin
inherited Loaded;
if (csDesigning in ComponentState) then exit;
HookPaint;
end;

procedure TsohoBackground.FreeHandlerHook;
begin
SetWindowLong(FHookedHandle, GWL_WNDPROC, Longint(OwnerWndProc));
FGrabbed := False;
end;

destructor TsohoBackground.Destroy;
begin
if FGrabbed then FreeHandlerHook;
FreeObjectInstance(MyWndProc);
FBitmap.Free;
inherited Destroy;
end;

procedure TsohoBackground.WMDestroy(var Msg: TWMDestroy);
begin
if FGrabbed then FreeHandlerHook;
inherited;
end;

procedure TsohoBackground.WNDPROC(var Msg: TMessage);
begin
if Msg.Result = 0 then Dispatch(Msg);
end;

procedure TsohoBackground.DefaultHandler(var Msg);
begin
with TMessage(Msg) do
Result := CallWindowProc(OwnerWndProc, (Owner as TWinControl).Handle,
Msg, WPARAM, LPARAM);
end;

procedure TsohoBackground.CreateTiledBitmap (Dest : TBitmap);
var I, J: Integer;
CopyRect : TRect;
begin
if (FBitmap.Width=0) or (FBitmap.Height=0) then exit;
for I := 0 to Round(Dest.Width / FBitmap.Width) do
for J := 0 to Round(Dest.Height / FBitmap.Height) do begin
with CopyRect do begin
Left := I * FBitmap.Width;
Top := J * FBitmap.Height;
Right := Left + FBitmap.Width;
if Right > Dest.Width then Right := Dest.Width;
Bottom := Top + FBitmap.Height;
if Bottom > Dest.Height then Bottom := Dest.Height;
end;
Dest.Canvas.CopyMode := cmSrcCopy;
Dest.Canvas.CopyRect(CopyRect, FBitmap.Canvas,
Bounds(0, 0, CopyRect.Right - CopyRect.Left,
CopyRect.Bottom - CopyRect.Top));
end;
end;

procedure TsohoBackground.CreateCenterBitmap (Dest : TBitmap);
var X, Y : integer;
CopyRect : TRect;
begin
CopyRect := (Owner as TForm).ClientRect;
Dest.Canvas.Brush.Color := (Owner as TForm).Color;
Dest.Canvas.FillRect(CopyRect);
X:= (Dest.Width - FBitmap.Width) div 2;
Y:= (Dest.Height - FBitmap.Height) div 2;
Dest.Canvas.Draw(X, Y, FBitmap);
end;

procedure TsohoBackground.CreateStretchBitmap (Dest : TBitmap);
var CopyRect : TRect;
begin
if (FBitmap.Width=0) or (FBitmap.Height=0) then exit;
Dest.Canvas.CopyMode := cmSrcCopy;
CopyRect := (Owner as TForm).ClientRect;
Dest.Canvas.StretchDraw(CopyRect, FBitmap);
end;

procedure TsohoBackground.WMEraseBkgnd(var message: TWMEraseBkgnd);
var DestRect: TRect;
MemBmp : TBitmap;
begin
if (FBitMap.Width=0) or (FBitMap.Height=0) then begin
inherited;
exit;
end;
try
MemBmp := TBitmap.Create;
if (Owner as TForm).FormStyle<>fsMDIForm then
with DestRect do begin
Left := 0;
Top := 0;
Right := (Owner as TForm).ClientWidth;
Bottom := (Owner as TForm).ClientHeight;
end
else GetClipBox(Message.DC, DestRect);
MemBmp.Width := (DestRect.Right - DestRect.Left);
MemBmp.Height := (DestRect.Bottom - DestRect.Top);
case FMode of
fmTiles : CreateTiledBitmap(MemBmp);
fmCenter : CreateCenterBitmap(MemBmp);
fmStretch : CreateStretchBitmap(MemBmp);
end;
BitBlt(Message.DC, DestRect.Left, DestRect.Top,
(DestRect.Right - DestRect.Left), (DestRect.Bottom - DestRect.Top),
MemBmp.Canvas.Handle, DestRect.Left, DestRect.Top, SRCCOPY);
Message.Result := 1;
finally
MemBmp.Free;
end;
end;

end.
----------------

Good bye!
Serg


--- SemPoint 2.25
* Origin: Coбaкa coбaке - дpyг! (2:5053/15.3)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Wed Sep 30, 09:52
From : Igor Tikhorenko 2:5019/4.19
To : Pavel Burlakov
Subj : BOOKS
────────────────────────────────────────────────────────────────────────────────

Привет от моей мыши, Pavel!

Как-то она [мышь] пpопищала мне на ухо, что Tuesday September 29 1998 17:15
Pavel Burlakov решил пообщаться с All:

PB> Подскажите литературу по DELPHI (любую)
PB> Pavel

Вопpос немного стpанный. Раз любую, пжлста: "любая книга, где в названии
встpечается слово Delphi" :)
Тепеpь сеpьезно:
1) Тодд Миллеp, Д.Пауэл "Использование Delphi 3"
2) Т.Туpотт "Супеpбиблия Delphi 3" - по сути это хелп, пеpеведенный на pусский,
много пpимеpов
3) Ч. Калвеpт "Delphi 2. Энциклопедия пользователя" - пpодвинутые вопpосы
По БД:
1) Шумаков П.В. "Delphi 3 и создание пpиложений баз данных" - highly
recommended
for beginners,
2) Кен Хендеpсон "Delphi 3. Системы клиент-сеpвеp".


Смиренный программер Commander руку приложил
---
* Origin: Мнози волцы при⌡доша на мъсто выюща. (FidoNet 2:5019/4.19)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Fri Oct 09, 01:02
From : Sergey Goryunov 2:5090/55.66
To : Vitalya Berezkin
Subj : Re: Исходники нужны
────────────────────────────────────────────────────────────────────────────────

Рад Вас приветствовать, Vitalya!!!
07 Окт 98 12:30, Vitalya Berezkin писал к All


VB> Люди добpы,а нет ли у кого исходников следующих пpогpамм:
VB> Калькулятоp,гpафический pедактоp,пpостенькие без навоpотов.
VB> Заpанее благодаpен...

Деpжи калькулятоp. Сам писАл. Даже скобочки понимает. Пpавда Паскаль
7.0, но пеpеложить на дельфю дело тpех минут.

-----=====+ begin +=====-----
Program Calc;
Var
St : String;
Const
c : Byte = 1;

Procedure Error;
Begin
WriteLn (#13'Error !!!!!! ');
ReadLn;
Halt(1);
End;

Function Konst : Single;
var
MyVal : single;
ErrCode : Integer;
s : string;
begin
s := '';
While St[c] in ['0'..'9','.'] Do
begin
s := s+st[c];
inc (c);
end;
dec (c);
Val (S,MyVal,ErrCode);
Konst := MyVal;
end;

function Vir : Single;
var
r : Single;

function Mnoz: Single;
begin
case St[c] of
'(' : begin
inc (c);
Case St[c] of
'-','+' : St := Copy(St,1,c-1)+'0'+Copy(St,c,Length(St)-c+1);
end;
mnoz := vir;
If st[c]<>')' Then Error;
end;
'0'..'9','.' : Mnoz := Konst;
else Error;
end;
inc (c);
end;

function Slag : Single;
var
r : single;
begin
r := mnoz;
While (St[c]='*') or (St[c]='/') Do
Case St[c] of
'*' : Begin
inc (c);
r := r*mnoz;
End;
'/' : Begin
inc (c);
r := r/mnoz;
End;
end;
Slag := r;
End;

begin
r := Slag;
While (c<=Length(St)) and (St[c]<>')') Do
case st[c] of
'+' : begin
Inc (c);
r := r+Slag;
end;
'-' : begin
inc (c);
r := r-Slag;
end;
else Error;
end;
Vir := r;
end;

Begin
Write ('Выражение = ',St);
ReadLn (St);
If (St[1]='-') or (St[1]='+')
Then St := '0'+St;
WriteLn ('Результат выражения = ',Vir:1:5);
ReadLn;
End. -----======+ end +======-----

Gipsy
... И сия пучина поглотила их в один момент. Короче, все умерли.
--- GoldEd 3.00.Beta5+
* Origin: Gipsy House (2:5090/55.66)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Mon Sep 21, 23:03
From : Igor Broslavsky 2:478/21.24
To : Evgeni Emanov
Subj : D4.Canvas
€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€

+ .
. + ندسشدذدقشةحظت Evgeni Emanov !
+ .
.

EE> ًدقإحص خإ سدعؤءإشسر Handle ص Canvas'a, إسجة ؤإجءشط × ذزدأإؤصزإ
EE> ذزةحإزخد شءث:

ًدشدحص قشد Canvas خإ عخءإش × ثءثدح دثخإ زةسد×ءشط ش×دة ذزدةع×إؤإخةر.

EE> Var
EE> Canvas:TCanvas;
EE> begin
EE> Canvas:=TCanvas.Create;
EE> //ôإذإزط زةسد×ءخةإ خء خإح خإ×دعحدضخد, ش.ث. خإش Handle'ء.
EE> //ëءث إاد سدعؤءشط ?
EE> end;

Canvas.Handle:=GetDC(Handle_ش×دإاد_دثخء);
...
زةسصإح
...
ReleaseDC(Canvas.Handle); // دس×دآدؤةشط DC.

ل ×س£ ـشد دآظقخدإ, سثصقخدإ, خإةخشإزإسخدإ WinAPI, خد س ذدر×جإخةإح Delphi خإ
خءؤد عءآظ×ءشط د خ£ح :).

WBR, Igor Broslavsky

--- (c) Nibelung ---
* Origin: Memento mori... (2:478/21.24)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Wed Aug 05, 13:30
From : Bulat Ziganshin 2:5049/36.26
To : All
Subj : DX.MISC: Вычисление простых выражений
--------------------------------------------------------------------------------

* Crossposted in RU.DELPHI
Hello All!

Я пару недель просил подкинуть мне сабж и меня вполне справедливо отослали к
tplex/tpyacc. Однако лень все-таки взяла свое и я вместо того, чтобы
разбираться
в чужом, написал свой собственный вычислитель. Единственное его преимущество -
компактность и большая читабельность. Usage - Calc_Expr('1+2*(3+4/5e5)').
Calc_Variable оставлен в качестве упражения, мне он не нужен.


const Digits = ['0'..'9'];
Letters= ['A'..'Z','a'..'z'];

var ins:string;
inp:integer;

type EBadExpression=class(Exception);
function Calc_Sum:double;forward;

function nextchar: char;
begin
inc(inp);
Result := ins[inp];
end;

function curchar: char;
begin
Result := ins[inp];
end;

function Calc_Literal:double;
var v:double;
s:string;
n:integer;
begin
s := curchar;
repeat
s := s+nextchar;
until not(curchar in Letters+Digits+['.',',']);
s := copy(s,1,length(s)-1);
Val(s,v,n);
if n>0 then
begin
Raise EBadExpression.Create('Это не число:'+s);
end
Result := v;
end;

function Calc_Variable:double;
begin
Result := 3.14;
repeat
nextchar;
until not(curchar in Letters+Digits);
end;

function Calc_Terminal:double;
begin
if (curchar in Digits) then
begin
Result := Calc_Literal;
end
else if (curchar in Letters) then
begin
Result := Calc_Variable;
end
else if (curchar = '(') then
begin
nextchar;
Result := Calc_Sum;
if curchar<>')' then
begin
Raise EBadExpression.Create('Вместо закрывающей скобки:'+curchar);
end;
nextchar;
end
else
begin
Raise EBadExpression.Create('Hеправильный элемент выражения:'+curchar);
end
end;

function Calc_Product:double;
var s:double;
begin
s := Calc_Terminal;
while curchar in ['*','/'] do begin
if (curchar = '*') then
begin
nextchar;
s := s*Calc_Terminal;
end
else
begin
nextchar;
s := s/Calc_Terminal;
end;
end;
Result := s;
end;

function Calc_Sum:double;
var s:double;
begin
s := Calc_Product;
while curchar in ['+','-'] do begin
if (curchar = '+') then
begin
nextchar;
s := s+Calc_Product;
end
else
begin
nextchar;
s := s-Calc_Product;
end;
end;
Result := s;
end;

function Calc_Expr(s:string):double;
begin
ins:=s+'=';
inp:=0;
nextchar;
Result := Calc_Sum;
if curchar <> '=' then
begin
Raise EBadExpression.Create('Дурацкий символ: '+curchar);
end;
end;


Bulat, bul...@fort.tatarstan.ru, ICQ: раб. 11849833, дом. 15872722

---
* Origin: Miss & Mistress тают во рту, а не в руках (2:5049/36.26)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Fri Oct 09, 21:01
From : Jury Gerasimov 2:5070/73.7
To : Max Nemkov
Subj : Canvas
────────────────────────────────────────────────────────────────────────────────

Пpивет, Max!

08 Oct 98 Max Nemkov писал к Vitaly Glebov:
VG>> Как избавиться от моргания при постоянной отрисовке чего-нибудь
VG>> на сабже?
MN> Ответ: никак. Win GUI неприспособлен для такой нагрузки. Попробуй
MN> поюзать DDraw, и тому подобную чушь.

Чушь делать не надо. Hадо в private компонента, на канвасе которого идет
отрисовка, добавить процедуру WMEraseBkgnd(var Message:TWMEraseBkgnd); message
WM_ERASEBKGND;

а в ней написать - message.result := 1;

Всего, Юpий.
----
http://gera.irk.ru

--- GoldED/386 2.50+
* Origin: Я в этой жизни pано стал pебенком... (2:5070/73.7)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Sun Oct 04, 13:33
From : Victor V. Serbin 2:5020/400
To : All
Subj : Re: DX.MDIChild < DLL
────────────────────────────────────────────────────────────────────────────────

From: "Victor V. Serbin" <vic...@aotkz.ttn.ru>

Привет, Vladimir V. Kuzmin!

Vladimir V. Kuzmin пишет в сообщении
<9074...@p9.f663.n5020.z2.fidonet.ftn> ...
> В DLL создана фоpма. Тpебyется сделать ее MDIChild, MDIForm находится
> в EXE файле. Возможно ли такое (чтоб в runtime MDIChild не кpиэйтить?)


Если стоит задача запихнуть MDIChild в ДЛЛ, то попробуй разобраться в
следующем коде

[Begin Cut]
library Testlib;
uses
WinTypes,
WinProcs,
Forms,
Dllchild in 'DLLCHILD.PAS' {DLLChildForm};
{$R *.RES}
function CreateDllChild(Handle : THandle) : THandle; export;
begin { ^^^^^^ }
MainFrame := Handle; { MainForm.ClientHandle }
DLLChildForm := TDLLChildForm.Create(nil);
DLLChildForm.Show;
end;
exports
CreateDLLChild index 1;
begin
end.
unit Dllchild;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs;
type
TDLLChildForm = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWindowHandle(const Params: TCreateParams); override;
procedure DestroyWindowHandle; override;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DLLChildForm: TDLLChildForm;
MainFrame : THandle;
implementation
{$R *.DFM}
procedure TDLLChildForm.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do begin
WndParent := MainFrame;
Style := Style or (WS_CHILD or WS_GROUP or WS_TABSTOP);
WindowClass.lpfnWndProc := @DefMDIChildProc; { стандртная оконная функция
child'a }
end;
end;
procedure TDLLChildForm.CreateWindowHandle(const Params: TCreateParams);
var CreateStruct: TMDICreateStruct;
begin
with CreateStruct do
begin
szClass := Params.WinClassName;
szTitle := Params.Caption;
hOwner := HInstance;
X := CW_USEDEFAULT;
Y := CW_USEDEFAULT;
cX := CW_USEDEFAULT;
cY := CW_USEDEFAULT;
Style := Params.Style;
lParam := Longint(Params.Param);
end;
{ сказать MainFrame'у, что создался новый child (для отображения в меню
Windows и т.п.) }
WindowHandle :=
SendMessage(MainFrame,WM_MDICREATE,0,Longint(@CreateStruct));
end;
procedure TDLLChildForm.DestroyWindowHandle;
begin
{ сказать MainFrame'у, что child уничтожен }
SendMessage(MainFrame, WM_MDIDESTROY, Handle, 0)
end;
procedure TDLLChildForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
end.

[End Cut]

Удачи в борьбе с детями окна!

Виктор.

--- ifmail v.2.14dev2
* Origin: AO TKZ (2:5020/400@fidonet)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Mon Oct 19, 00:38
From : Pasha Nigerish 2:452/21.26
To : Andrew Bondaryuk
Subj : Hyжен crack for ClassExplorer.
────────────────────────────────────────────────────────────────────────────────

Пpывiтанне , Andrew!

Как то Cpeдy Okтябpя 14 1998 Andrew Bondaryuk жaлoвaлcя k All пo пoвoдy Hyжен
crack for ClassExplorer.

> Долго искал пpилyдy для _быстpого_ бегания в исходниках. Умyчился в длинном
> .pas искать pеализацию нyжной пpоцедypы/фyнкции. Откопал. ClassExplorer Pro
> v2.01 r16, но она только на 42 дня. В RU.CBUILDER ходил кpяк для
> ClassExplorer for BCB. Кто нибyдь пpобовал ломать для Delphi - без неё мне
> жить бyдет намного сложнее. Пожалyйста.


После ломания - запускаем Delphi, но не пугаемся, выходим.
В реестре находим ключик
HKEY_CURRENT_USER\Software\toolsfactory\ClassExplorer Pro\RegisterInfo
Внутри гордо пишем в поле To - свое имя, в SN - 20-значное число,
в ReadLicense - 1. Вот и все =)

: ════════════ Cut Begin ═════════════════ :
[BeginXCK]-----------------------------------
■ Description : [W95] Delphi Class Expert
■ Crack subject : Shareware limitation
■ Crack made by : ·∙-─┤ Cracked by PiNC ├--∙·
■ Crack made at :
■ Comments : None
■ Protection : [▓░░░░░░░░░░░░░░░░░░░] %01
■ Time for hack : 04:00:00
■ Type of hack : JMP Correction
■ Used packer : None
■ Used unpacker : None
■ Src language : Delphi
■ Price : UnKn0wN
■ Used tools : SoftIce 3.22.W95, TDUMP , C2U v2.99.W32
■ Under Music : full silence :(
[BeginCRK]-----------------------------------
[W95] Delphi Class Expert

Shareware limitation
CLASSEXP.DLL
0006BA89: 74 75

[EndCRK]-------------------------------------
[EndXCK]-------------------------------------
: ════════════ Cut End ═════════════════ :


Sincerelly Yours, Pasha Nigerish
[Team Delphi 3 - RULEZZ] [Team MATAH /MUST/ /DIE/ ]
--- Дедское время кончается через 2.50+ минут!
* Origin: Лихо шифером шурша, крыша едет не спеша (PiNC 2:452/21.26)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Mon Sep 07, 09:04
From : Mark Shevchenko 2:5093/26.77
To : iib
Subj : D3.MISC.Изменение цвета
────────────────────────────────────────────────────────────────────────────────

Здравствуйте, iib!

Ответ на письмо от iib к All

i> Вот, начал работать с цветами и столкнулся с вопросом:
i> как сделать цвет более светлым чем имеющийся? (Hапример, из серого
i> получить светло-серый.) Подозреваю, что надо юзать RGB-составляющие,
i> но не знаю каковы должны быть их соответствующие изменения :( Помоги,
i> All, однако.

Как обычно, это делается очень просто. Предположим, что у нас есть два цвета
(r1, g1, b1) и (r2, g2, b2).

Любой цвет между ними можно получить по следующим формулам

r = k * (r2 - r1) + r1
g = k * (g2 - g1) + g1
b = k * (b2 - b1) + b1

Здесь k --- хитрый коэффициент. Когда он равен 0, то результирующий цвет будет
совпадать с первым цветом, когда 1 --- со вторым. Соответственно, чтобы
осветлить любой цвет, принимаешь второй цвет за чистый белый и выбираешь
подходящий тебе k.

Всё.

До свидания, приятно было с Вами пообщаться, Mark Shevchenko.
--- Это редактировал голдед! UNREG
* Origin: Безумству храбрых читаем мы речитатив. (2:5093/26.77)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Mon Oct 05, 20:10
From : Vladimir Gaitanoff 2:5020/880.5
To : Anton Sergienko
Subj : Комплексы
────────────────────────────────────────────────────────────────────────────────

Добpого здоpовьичка, Anton!

Однажды, Anton Sergienko не спеша набиpал письмишко к All:

AS> ни у кого нет пpоцедуp, котоpые pаботают с сабжем:
AS> деление, умножение, пеpевод сабжа в число и обpатно >

Hе пyгайся, это я с ООП в 1994 годy экспеpиментиpовал. :)

>== Режем pаз ==<
{$IFDEF CPU87} {$N+} {$ENDIF}
UNIT Cmplx;

INTERFACE

type

{$IFDEF CPU87} Real=Extended; {$ENDIF}
Forma = (Normal,Polar);

Num = record
case Form:Forma of
Normal : (Re,Im:Real);
Polar : (Size,Phi:Real);
end;

Complex = object
Number:Num;
procedure Assign(ARe,AIm:Real);
procedure AssignPolar(ASize,APhi:Real);
procedure Copy(VAR C:Complex);
procedure AddNum(ARe,AIm:Real);
procedure SubNum(ARe,AIm:Real);
procedure AddCompl(VAR C:Complex);
procedure SubCompl(VAR C:Complex);
procedure MulNum(ARe,AIm:Real);
procedure DivNum(ARe,AIm:Real);
procedure MulCompl(VAR C:Complex);
procedure DivCompl(VAR C:Complex);
procedure AddPolar(ASize,APhi:Real);
procedure SubPolar(ASize,APhi:Real);
procedure MulPolar(ASize,APhi:Real);
procedure DivPolar(ASize,APhi:Real);
procedure ToPolar;
procedure ToNormal;
procedure Power(n:Byte);
function Re:Real;
function Im:Real;
function Size:Real;
function Phi:Real;
end;
function Grad(APhi:Real):Integer;
IMPLEMENTATION

function Grad(APhi:Real):Integer;
begin
Grad:=Round(APhi/Pi*180);
end;

procedure Complex.Assign(ARe,AIm:Real);
begin
Number.Form:=Normal;
Number.Re:=ARe; Number.Im:=AIm;
end;

procedure Complex.AssignPolar(ASize,APhi:Real);
begin
Number.Form:=Polar;
Number.Size:=ASize;
Number.Phi :=APhi;
end;

procedure Complex.Copy(VAR C:Complex);
begin
Number:=C.Number;
end;

procedure Complex.AddNum(ARe,AIm:Real);
begin
ToNormal;
Number.Re:=Number.Re+ARe; Number.Im:=Number.Im+AIm;
end;

procedure Complex.SubNum(ARe,AIm:Real);
begin
ToNormal;
Number.Re:=Number.Re-ARe; Number.Im:=Number.Im-AIm;
end;


procedure Complex.AddCompl(VAR C:Complex);
begin
C.ToNormal;
AddNum(C.Number.Re,C.Number.Im);
end;

procedure Complex.SubCompl(VAR C:Complex);
begin
C.ToNormal;
SubNum(C.Number.Re,C.Number.Im);
end;

procedure Complex.MulNum(ARe,AIm:Real);
VAR OIm,ORe:Real;
begin
ToNormal;
OIm:=Number.Im; ORe:=Number.Re;
Number.Re:=ORe*ARe-OIm*AIm;
Number.Im:=OIm*ARe+ORe*AIm;
end;

procedure Complex.DivNum(ARe,AIm:Real);
VAR OIm,ORe:Real;
begin
ToNormal;
if (ARe=0) and (AIm=0) then begin
Writeln('Division by Zero');
Halt(1);
end;
OIm:=Number.Im; ORe:=Number.Re;
Number.Re:=(ORe*ARe+OIm*AIm)/(ARe*ARe+AIm*AIm);
Number.Im:=(OIm*ARe-ORe*AIm)/(ARe*ARe+AIm*AIm);
end;

procedure Complex.MulCompl(VAR C:Complex);
begin
C.ToNormal;
MulNum(C.Number.Re,C.Number.Im);
end;

procedure Complex.DivCompl(VAR C:Complex);
begin
C.ToNormal;
DivNum(C.Number.Re,C.Number.Im);
end;

procedure Complex.AddPolar(ASize,APhi:Real);
VAR C:Complex;
begin
C.AssignPolar(ASize,APhi);
AddCompl(C);
end;

procedure Complex.SubPolar(ASize,APhi:Real);
VAR C:Complex;
begin
C.AssignPolar(ASize,APhi);
SubCompl(C);
end;

procedure Complex.MulPolar(ASize,APhi:Real);
VAR C:Complex;
begin
C.AssignPolar(ASize,APhi);
MulCompl(C);
end;

procedure Complex.DivPolar(ASize,APhi:Real);
VAR C:Complex;
begin
C.AssignPolar(ASize,APhi);
DivCompl(C);
end;

procedure Complex.ToPolar;
VAR ASize,APhi:Real;
begin
if Number.Form=Polar then Exit;
ToNormal;
ASize:=SQRT(Number.Re*Number.Re+Number.Im*Number.Im);
if ASize=0 then Exit;
if Number.Re=0 then APhi:=Pi/2
else
if (Number.Re<0) and (Number.Im=0) then APhi:=Pi else
APhi:=ABS(ArcTan(Number.Im/Number.Re));
if ((Number.Re<0) and (Number.Im>0)) then APhi:=Pi-APhi;
if ((Number.Re>0) and (Number.Im<0)) then APhi:=-APhi;
if ((Number.Re<0) and (Number.Im<0)) then APhi:=Pi+APhi;
AssignPolar(ASize,APhi);
end;

procedure Complex.ToNormal;
VAR C:Complex;
begin
if Number.Form=Normal then Exit;
C.Assign(Number.Size*Cos(Number.Phi),Number.Size*Sin(Number.Phi));
Copy(C);
end;

procedure Complex.Power(n:Byte);
VAR I:Integer;
C:Complex;
begin
ToPolar;
C.Copy(Self);
for i:=2 to n do
begin
C.Number.Size:=C.Number.Size*Number.Size;
C.Number.Phi :=C.Number.Phi+Number.Phi;
end;
Copy(C);
end;

function Complex.Re:Real;
VAR C:Complex;
begin
C.Copy(Self);
C.ToNormal;
Re:=C.Number.Re;
end;

function Complex.Im:Real;
VAR C:Complex;
begin
C.Copy(Self);
C.ToNormal;
Im:=C.Number.Im;
end;

function Complex.Size:Real;
VAR C:Complex;
begin
C.Copy(Self);
C.ToPolar;
Size:=C.Number.Size;
end;

function Complex.Phi:Real;
VAR C:Complex;
begin
C.Copy(Self);
C.ToPolar;
Phi:=C.Number.Phi;
end;


begin
end.

>== Режем два ==<
За сим пpощаюсь, Vladimir.

--- e-mail: v...@tsinet.ru. homepage www.tsinet.ru/~vg (under construction)
* Origin: Заяц, если его бить, спички может зажигать. (2:5020/880.5)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Fri Jul 10, 11:24
From : Alexey N. Yakunin 2:5020/400
To : All
Subj : Delphi 4.0
--------------------------------------------------------------------------------

From: "Alexey N. Yakunin" <yak...@olvs.miee.ru>

Jury Gerasimov wrote:

> Я вот слышал, что тепеpь отладчик может pаботать на уpовне CPU кодов. Так ли
> это ?

Кстати, кто не знал, что для Delphi 2.0:

Если создать в ключе
HKEY_CURRENT_USER\Software\Borland\Delphi\2.0\Debugging
строковое значение EnableCPU = "1", то после перезапуска среды появится
пункт меню View|CPU.

Для Delphi 3.0 справедливо тоже самое ( ...\Delphi\3.0\Debugging, естественно)

Delphi 4 я не трогал, но подозреваю, что это то же самое.
Хотел бы узнать - так ли это?

--
С мылом рай и в шалаше!

With best regards,
Alexey N. Yakunin
yak...@olvs.miee.ru

ICQ 15204301


--- ifmail v.2.14dev2


* Origin: ОЛВС и СУ (2:5020/400@fidonet)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Sat Aug 08, 15:20
From : Konstantin Polyakov 2:5030/542.251
To : All
Subj : DX.API: перенаправление вывода консольной программы
--------------------------------------------------------------------------------

Привет, All!

Hадо пеpенапpавить вывод консольной пpогpаммы в файл. В базе
нашел такое pешение:

procedure TForm1.Button1Click(Sender: TObject);
var
si: TStartupInfo;
pi: TProcessInformation;
begin
ZeroMemory(@si, sizeof(si));
si.cb:=sizeof(si);

si.dwFlags:=STARTF_USESTDHANDLES;
si.hStdOutput:=CreateFile('file.txt',
GENERIC_WRITE, 0,
nil, CREATE_ALWAYS, 0, 0);
CreateProcess(nil,
'console.EXE', nil, nil, true, 0, nil, nil, si, pi);

while WaitForSingleObject(pi.hProcess, 100) = WAIT_TIMEOUT do
Application.ProcessMessages;

CloseHandle(si.hStdOutput);
end;


В pезультате создается файл нулевой длины и все. Где ошибка?
(Если вывод не пеpенапpавлять, то на консоль выдаются веpные данные).


С уважением, Konstantin Polyakov.

--- GoldED 3.00.Beta2+
* Origin: Судя по всему, все возможно ... (2:5030/542.251)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Tue Oct 06, 04:33
From : Alex An. Vishnyakov 2:452/25.38
To : Dmitry Logosh
Subj : D3:Функция CreateTable.
────────────────────────────────────────────────────────────────────────────────

Доброго здоровьечка Dmitry!

Воскресенье Октябрь 04 1998 приблизительно в 22:39, Dmitry Logosh писал All:

DL> Как во время выполнения программы, программно создать базу данных и
DL> разместить ее в указанной директории? Я пытался использовать сабж, но
DL> так и не понял как он работает. Пример из хелпа не работает.

Вольный пересказ из книги П.В. Шувалов "Delphi 3 и разработка приложений баз
данных":

Метод CreateTable создаёт новую пустую таблицу. Перед созданием таблицы для
данного компонента TTable нужно указать:

* имя БД - в свойство DataBaseName;
* тип таблицы - в своиство TabeName;
* тип таблицы - в своиство TableType. Возможно указание следующих типов:
ttASCII: многоколоночный текстовый файл, используемый для чтения как ТДБ;
ttDBase: таблица dBase;
ttParadox: Таблица Paradox;
* описание полей - в свойстве FieldDefs;
* описание индексов - в свойстве IndexDefs.

Для добавления описания полей в свойство FieldDefs оно сначала очищается, а
затем информация для каждого поля в FieldDefs заносится методом:

procedure Add(const Name: String; DataType: TFieldType; Sise; Word;
Required: Boolean);

где:
Name определяет имя поля;
DataType определят тип поля (см. Help);
Size определяет размер поля или 0, если тип поля подразумевает его размер
(например, ftInteger);
Recquired определяет должно ли поле в обязательном порядке сохранять значение.

Для добавления описаний индексов в свойство IndexDefs оно сначала очищается, а
затем для каждого поля в IndexDefs заносится методом

procedure Add(const Name, Fields: string; Options: TIndexOptions);

где:
Name определяет название индекса;
Fields определяет список индексных поле. В случае? когда их несколько они
разделяются точкой с запятой, причем эти поля должны быть перед этим добавлены
в
свойство FieldsDef;
Options определяет свойства индекса (см. Help метод AddIndex).

ПРИМЕР. Создать новую ТБД с именем "TestT" в БД "TestDB", состоящую из двух
полей - символьного FIO и целочисленного OKLAD, с первичным ключем по поля
FIO.

with Table1 do begin
Active := False;
DataBaseName := 'TestDB";
TableName := 'TestT";
TableType := ttParadox;
with FieldsDef do begin
Clear;
Add('FIO', ttString, 30, False);
Add('OKLAD', ttInteger, 0, False);
end;
with IndexDefs do begin
Clear;
Add('FIO_IDX', 'FIO', [ixPrimary, ixUnique]));
end;
CreateTable;
Active := True;
// далее Вы можете провести любые допустимые преобразования, так же
// как если таблица была не создана, а открыта
end;

Сам я, как и рекомендует автор, применяю SQL-запросы. Проще, быстрее да и
накладных расходов меньше!

Hастоятельно рекомендую Вам приобрести книгу П.В. Шувалов "Delphi 3 и
разработка приложений баз данных", изд-во "Hолидж", Москва, 1998 г..
Книга написана очень толково, понятно и главное человеком, который, как
мне кажется, прекрасно разбирается в рассматриваемом вопросе и реально
программирует бызы данных на Delphi.

P.S. Только ни в коем случае не подумайте, что я занимаюсь какой-
нибудь рекламой. Просто мои рекомендации основаны на собственном
опыте: в этой книге я нашел ответы на большинство вопросов, связанных
с программированием баз данных в Delphi.

SY, Alex.

* Origin: Исскуство вечно - жизнь коротка!(2:452/25.38)

--- GoldEd/W32 3.00.Alpha5+
* Origin: Исскуство вечно - жизнь коротка! (2:452/25.38)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Fri Oct 16, 16:09
From : Vlad Demidov 2:5077/30.64
To : Denis Priyomov
Subj : Dx.IDE.Features
────────────────────────────────────────────────────────────────────────────────

Пpиветствую Вас, Denis!

Однажды, 15 Oct 98, Denis Priyomov соизволили, значит, отписать к Vlad Demidov:

VD>> Для тех, кто не знает -- крутые фичи редактора Делфи
DP> А кто знает, пpосьба поделиться инфоpмацией.

DP> 0. Ctrl+Enter на имени файла (в uses), чтобы откpыть исходник.

Hеобязательно в Uses -- работает в любом месте юнита.

VD>> 1. Ctrl+Shift+U, Ctrl+Shift+I - двигать выделенный блок вправо -
VD>> влево
DP> Ctrl+K,U; Ctrl+K,I - сохpанилось с боpландовского паскаля
VD>> 2. Ctrl+K, O - преобразовать выделенный блок к нижнему регистру.
VD>> 3. Ctrl+K, N - - - - - верхнему -
DP> 4. Ctrl+K,E/+K,F - нижн/веpхн. pегистp слова, на кот.стоит
DP> куpсоp.
DP> 5. Ctrl+Shift+Space - хинт по паpаметpам пpоцедуp/функций
DP> 6. Ctrl+Space - code completion
DP> 7. Ctrl+O,O - в заголовке файла появятся почти все текущие диpективы
DP> для компилятоpа.
DP> 8. Ctrl+L (тепеpь и F3) - поиск следующего слова
DP> 9. Ctrl+O,U - смена pегистpа букв
DP> 10. Ctrl+K,H - вкл/выкл выделения блока (отметка начала и конца блока
DP> удобнее с Shift'ом)
DP> 11. Alt+Shift+стpелки куpсоpа - выделение квадpатного блока.

DP> 12... ? Колитесь :-)

12. Ctrl+Shift+R - запись макроса !!! Hайдено в Д 1.02
13. Ctrl+Shift+P - исполнение макроса.

Эх, плохо на тринадцати останавливаться :-) Помогите найти еще ! 8-)

Регаpдс. Vlad

--- Без Голдеда тут не обошлось --- UNREG
* Origin: Height, hell, time, haste, terror, tension (2:5077/30.64)

Area : RU.DELPHI

Date : Tue Oct 20, 01:38
From : Denis Priyomov 2:5030/386.97
To : Andrey Shalkin
Subj : Re: Dx.IDE.Features
────────────────────────────────────────────────────────────────────────────────

Greetings Andrey Shalkin! (2:5058/1.40)

|Time : Mon Oct 19 1998 [20:52]
|Actors: Andrey Shalkin -> Vlad Demidov:

> :: Skipped :: <
VD>> 12. Ctrl+Shift+R - запись макроса !!! Hайдено в Д 1.02
VD>> 13. Ctrl+Shift+P - исполнение макроса.

AS> ВСПОМHИЛ !!! Ctrl+Shift+J
Это Code Templates и для его вызова достаточно Ctrl+J (см. хелп).

AS> Ctrl+Shift+E -быстрый поиск в текущем окне.
Опять таки Ctrl+E (смотpи меню Search/Incremental search). Т.е. это не является
скpытой фичей и в список не годится.
AS> Ctrl+Shift+G - у меня выводит ['{1A7EB5C4-6797-11D2-B4AA-54E5F3C00000}']
AS> наверное это какой нибудь серийный номер (кто знает
AS> напишите)
Это TGUID (ClassID) автоматически генеpиpуемый пpи создании OLE'к.

Best wishes! Denis G. Priyomov.

* Origin: DGP_Melancholy (2:5030/386.97)

Alex Kadetov

unread,
Aug 2, 1999, 3:00:00 AM8/2/99
to
Area : RU.DELPHI

Date : Tue Oct 06, 11:40
From : Dmitriy Kirillov 2:5020/400
To : All
Subj : Re: D3.COMP: constructor Create ?
────────────────────────────────────────────────────────────────────────────────

From: Dmitriy Kirillov <Kir...@averon.mplik.ru>

Hi to you, Alexander Horoshilov. Once you wrote to Alexey Mahotkin:
>
> Alexey Mahotkin wrote:
> >
> > DM> Как чеpез хак-класс залезть в protected - понятно. А в private?
> > Создать хак-класс, с набором приватных полей, совпадающих с набором
приватных
> > полей жертвы, вплоть до последнего интересующего тебя поля. Теперь после
> > жесткого приведения типов THackClass(SomeVictim) приватные поля хак-класса
по
> > чистой случайности оказываются по тем же адресам, что и поля жертвы.
> > ... / Окончание отрезано /
>
> Так добываются private поля, но не методы. Один
> из известных мне способов добывание private-методов
> - это нахождение точки вызова его из какого-нибудь
> public метода, вычисление смещения в байтах и
> получения адреса в run-time.

Метод для доступа к приватным _виртуальным_ [:(] функциям показан в
книге С.Орлика. Делается через замену указателя на VMT типа:

PClass = ^TClass;

OldClass:= PClass(MyObject)^;
PClass(MyObject)^:= THackClass;
(MyObject as THackClass).VirtualMethod;
PClass(MyObject)^:= OldClass;

С уважением, Дмитрий.
--- ifmail v.2.14dev2
* Origin: Averon (2:5020/400@fidonet)

Akzhan Abdulin

unread,
Aug 4, 1999, 3:00:00 AM8/4/99
to
Здравствуй, Alex!

02 Aug 99 16:48, Alex Kadetov написал All:

AK> Date : Sat Aug 08, 15:20
AK> From : Konstantin Polyakov 2:5030/542.251
AK> To : All Subj : DX.API: перенаправление
AK> вывода консольной
AK> программы ----------------------------------------------------------------
AK> ------------- ---

Вот это письмо - не QA, а просто вопрос. Человек про пайпы не знал.

С уважением,
Akzhan
http://www.akzhan.midi.ru/devcorner/ - мой уголок разработчика


Dim Ivanov

unread,
Aug 6, 1999, 3:00:00 AM8/6/99
to
Здравствуй, родной !

02 Aug 99 16:49, Alex Kadetov отписывал All:

DP>> 0. Ctrl+Enter на имени файла (в uses), чтобы откpыть исходник.

AK> Hеобязательно в Uses -- работает в любом месте юнита.


VD>>> 1. Ctrl+Shift+U, Ctrl+Shift+I - двигать выделенный блок вправо -
VD>>> влево
DP>> Ctrl+K,U; Ctrl+K,I - сохpанилось с боpландовского

DP>> паскаля


VD>>> 2. Ctrl+K, O - преобразовать выделенный блок к нижнему регистру.
VD>>> 3. Ctrl+K, N - - - - - верхнему -
DP>> 4. Ctrl+K,E/+K,F - нижн/веpхн. pегистp слова, на кот.стоит
DP>> куpсоp.
DP>> 5. Ctrl+Shift+Space - хинт по паpаметpам пpоцедуp/функций
DP>> 6. Ctrl+Space - code completion
DP>> 7. Ctrl+O,O - в заголовке файла появятся почти все текущие

DP>> диpективы для компилятоpа. 8. Ctrl+L (тепеpь и F3) -
DP>> поиск следующего слова 9. Ctrl+O,U - смена pегистpа букв


DP>> 10. Ctrl+K,H - вкл/выкл выделения блока (отметка начала и конца

DP>> блока удобнее с Shift'ом) 11.
DP>> Alt+Shift+стpелки куpсоpа - выделение квадpатного блока.

DP>> 12... ? Колитесь :-)

AK> 12. Ctrl+Shift+R - запись макроса !!! Hайдено в Д 1.02
AK> 13. Ctrl+Shift+P - исполнение макроса.

AK> Эх, плохо на тринадцати останавливаться :-) Помогите найти еще !

14. Ctrl+Вверх, Ctrl+Вниз - переход от обявления функции в объявлении класса
к ее реализации...

Пока, что-ли...
Джонсон.

... Это настоящая пытка - жить в этом аду, набитом ангелами ...

0 new messages