NewString:= 'C:\';
ClickedOK:= InputQuery('Database Path', 'Path: –> C:\DELPHI\DEMOS\DATA', NewString);
if ClickedOK then begin
Database1.DatabaseName:= 'MyNewAlias';
Database1.DriverName:= 'STANDARD';
Database1.Params.Clear;
Database1.Params.Add('Path=' + NewString);
Table1.DatabaseName:= 'MyNewAlias';
Table1.TableName:= 'CUSTOMER';
Table1.Active:= True;
DataSource1.DataSet:= Table1;
DBGrid1.DataSource:= DataSource1;
end;
end;
3. Запускаем приложение.
Информация о псевдонимах BDE
Как через конфигурацию IDAPI получить физический каталог расположения базы данных, зная ее псевдоним?
Обратите внимание на метод GetAliasParams класса TSession.
Возвращенная строка будет содержать искомый путь.
Я пользуюсь следующей функцией:
uses DbiProcs, DBiTypes;
function GetDataBaseDir(const Alias : string): String;
(* Возвращает каталог расположения базы данных по заданному псевдониму
(без обратного слеша) *)
var
sp: PChar;
Res: pDBDesc;
begin
try
New(Res);
sp:= StrAlloc(length(Alias)+1);
StrPCopy(sp,Alias);
if DbiGetDatabaseDesc(sp,Res) = 0 then Result:= StrPas(Res^.szPhyName)
else Result:= '';
finally
StrDispose(sp);
Dispose(Res);
end;
end;
Получение идентификатора диска
Как получить идентификатор находящегося в CD-ROM'е аудио-компакта?
const
MCI_INFO_PRODUCT = $00000100;
MCI_INFO_FILE = $00000200;
MCI_INFO_MEDIA_UPC = $00000400;
MCI_INFO_MEDIA_IDENTITY = $00000800;
MCI_INFO_NAME = $00001000;
MCI_INFO_COPYRIGHT = $00002000;
{ блок параметров для командного сообщения MCI_INFO }
type
PMCI_Info_ParmsA = ^TMCI_Info_ParmsA;
PMCI_Info_ParmsW = ^TMCI_Info_ParmsW;
PMCI_Info_Parms = PMCI_Info_ParmsA;
TMCI_Info_ParmsA = record
dwCallback: DWORD;
lpstrReturn: PAnsiChar;
dwRetSize: DWORD;
end;
TMCI_Info_ParmsW = record
dwCallback: DWORD;
lpstrReturn: PWideChar;
dwRetSize: DWORD;
end;
TMCI_Info_Parms = TMCI_Info_ParmsA;
Идентификатор возвращается функцией MCI_INFO_MEDIA_IDENTITY в виде строки с десятичным числом. Для получения дополнительной информации обратитесь к электронной справке (Win32 и компонент TMediaPlayer).
Открытие и закрытие привода CD-ROM
Есть ли Win32 API функция, позволяющая не только открыть НО И ЗАКРЫТЬ CD-ROM? Хотелось бы не тянуться ручками к РС, а нажать мышкой на кнопку. Компонентом TMediaPlayer пользоваться не хочу, тем более компакт он может только извлечь…
Для закрытия CD-ROM:
mciSendString('Set cdaudio door open wait', nil, 0, handle);
Для открытия CD-ROM:
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
Не забудьте включить MMSystem в список используемых модулей (uses).
Пример на основе простого модуля-класса, осуществляющего просмотр буфера обмена.
unit ClipboardViewer;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type TForm1 = class(tform)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FNextViewerHandle : THandle;
procedure WMDrawClipboard(var message: TMessage); message WM_DRAWCLIPBOARD;
procedure WMChangeCBCHain(var message: TMessage); message WM_CHANGECBCHAIN;
public
end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
// Проверяем работоспособность функции.
// При невозможности просмотра буфера обмена
// функция возвратит значение Nil.
FNextViewerHandle:= SetClipboardViewer(Handle);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// Восстанавливаем цепочки.
ChangeClipboardChain(Handle, FNextViewerHandle);
end;
procedure TForm1.WMDrawClipboard(var message: TMessage);
begin
// Вызывается при любом изменении содержимого буфера обмена
message.Result := SendMessage(WM_DRAWCLIPBOARD, FNextViewerHandle, 0, 0);
end;
procedure TForm1.WMChangeCBCHain(var message: TMessage);
begin
// Вызывается при любом изменении цепочек буфера обмена.
if message.wParam = FNextViewerHandle then begin
// Удаляем следующую цепочку просмотра. Корректируем внутреннюю переменную.
FNextViewerHandle:= message.lParam;
// Возвращаем 0 чтобы указать, что сообщение было обработано
message.Result:= 0;
end else begin
// Передаем сообщение следующему окну в цепочке.
message.Result:= SendMessage(FNextViewerHandle, WM_CHANGECBCHAIN, message.wParam, message.lParam);
end;
end;
end.
Копирование в буфер обмена
Читать дальше