KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн "Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001". Жанр: Программирование издательство неизвестно, год неизвестен.
Перейти на страницу:

Проверено – работает. Поскольку метод открылся буквально только что, я ещё не успел сделать модуль-обёртку для всех математических функций. Видимо, сделаю и отдам во всеобщее пользование.

Да, в crtdll.dll много фукнций, не связанных с математикой, в частности, если вы в программе используете PChar, то можно воспользоваться набором сишных strcmp, strcpy…, так же доступны isalpha, isdigit…, и, наконец, bsearch и qsort. :)

С уважением,

Марк Шевченко. 

Как сказать VCL, чтобы клавиши shortcut пунктов главного меню главной формы действовали только в этой форме (но не в модальных окнах, к примеру)?

Nomadic советует:

Знакомая проблема. Лечится так:

function WindowHook(var Message: TMessage): Boolean;


procedure .FormCreate(Sender: TObject);

begin

 // MainForm

 Application.HookMainWindow(WindowHook);


function .WindowHook;

begin

 Result := False;

 with Message do

  case Msg of

  CM_APPKEYDOWN, CM_APPSYSCOMMAND: Msg := WM_NULL; 

При использовании MS SQL Server 6.5 в NT Performance Monitor исчезли все датчики, кроме SQL

Nomadic советует:

Кто виноват:

Дело в следующем – при инсталляции NT страна была поставлена US, затем сменена на Russia. В реестре для Perfomance Monitor существует (может существовать) сколь угодно подуровней с названием счетчиков и описанием к ним. При инсталляции все естестественно ставилось в ветвь 409 (US), а ветви 419 (Russia) просто не было. Потом default location была сделана Russia. Perfomance Monitor не мог найти 419 и брал все счетчики из 409. Hо тут пришел SQL и как умная программа при инсталляции создал ветвь 419 и запихал туда свои счетчики. Теперь Perfomance Monitor видит что текущая locale 419, в реестре она есть и берет оттуда счетчики, а они там только для SQL естественно.

Что делать:

Запускаешь regedit (regedt32), находишь где лежат описания счетчиков. Точно я не помню, под рукой NT нет, но примерно так – HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/PerfLib/409 (419). В каждом разделе по два ключа – список названий счетчиков и список их описаний. Заходишь в 409, открываешь ключ для изменений и при помощи Ctrl-Ins копируешь его содержимое в буфер обмена и жмешь Cancel. Теперь идешь в 419 открываешь тот же ключ, идешь в начало списка и при помощи Shift-Ins вставляешь, жмешь Ok. Так надо сделать и для названий счетчиков и для их описания. Для полного счастья можно и SQL счетчики из 419 в 409 (в конец) скопировать.

xWindows — FAQ

Артем Федюк прислал свой сборник любимых функций:

(*

Функции собрал Артем Федюк (Киев, 27.11.2000)E-Mail: [email protected]сообщите, пожалуйста о найденных ошибках*)

{H+}//use huge strings

unit XWindows;


INTERFACE

uses classes, windows, shellApi, shlobj, sysUtils, forms, mmsystem, controls, Messages, Registry, IniFiles;


{***************************ПРОЦЕССЫ И УПРАВЛЕНИЕ ИМИ**************************}

procedure execWait(const comLine:string);

procedure shellExec(const fileName:string);

//также можно использовать Sleep(ms:DWORD);

procedure Delay(msecs : DWORD);

//фактически определяется запущена ли сейчас среда Delphi

function isDelphiRunning:boolean;

function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';

procedure applicationInCtrlAltDelList(visi:boolean);

procedure applicationInTaskBar(visi:boolean);

//Запретить/разрешить Ctrl-Alt-Del

procedure CtrlAltDel(state:boolean);

//Окно без закладки в TaskBar

procedure noAppInTaskbar;

//Определение какие приложения уже запущены

procedure ApplicationList(formHandle:THandle; var stringList:TStringList);


{***************************ВРЕМЯ**********************************************}

function SetTime(DateTime:TDateTime):Boolean;

//обновить часы - SendMessage(HWND_TOPMOST,WM_TIMECHANGE,0,0);


{***************************ИНТЕРФЕЙС WINDOWS**********************************}

//Cache,Cookies,Desktop,Favorites,Fonts,Personal,Programs,SendTo,Start Menu,Startup

function ShellFolder(const folderType:string):string;

procedure refreshWindowsDesktop;

procedure Startbutton(visi:boolean);

//убрать/показать TaskBar

procedure TaskBar(visi:boolean);

//оч2истить меню "Документы"

procedure clearDocuments;

//добавить документ в меню 'Документы'

// Для данного файла должно быть зарегистрировано средство просмотра

procedure addFileToDocuments(const fileName:string);

//Значение функции TRUE если мелкий шрифт

function SmallFonts:Boolean;

{! проверить}procedure setWallPaper(const fileName:string; tile:boolean);


{***************************МОНИТОР********************************************}

procedure RunCurrentScreenSaver;

//use application:TApplication object

procedure monitorState(state:boolean);


{***************************КЛАВИАТУРА*****************************************}

procedure RussianKbdLayout;

procedure EnglishKbdLayout;

procedure UkrainianKbdLayout;


{***************************МЫШЬ***********************************************}

//относительные координаты в абсолютные - function ClientToScreen(Pt:TPoint):TPoint;

procedure mouseEmul(absPoint:TPoint; up,down:boolean);

procedure mouseCursor(visi:boolean);

//просимулировать нажатие клавиши мыши

{! Не проверено}procedure SendMouseClick(x,y:integer;wHandle:THandle);


{**8*************************ДИСКОВЫЕ ФУНКЦИИ**********************************}

//8FAT,FAT32,CDFS,NWCOMPA

//0-"A",1-"B",2-"C"

function GetFileSysName(Drive : Byte) : String;

function GetVolumeName(Drive : Byte) : String;

function DriveExists(Drive : Byte) : Boolean;

//'?';'Path2 does not exists';'Removable';'Fixed';'Remote';'CD-ROM';'RAMDISK'

function CheckDriveType(Drive : Byte) : String;

//Определение готовности дисковода к работе

function DiskInDrive(const Drive: char): Boolean;

function HDDSerialNum(const drivePath:string{'C:'}):integer;


{***************************CD-ROM*********************************************}

function getCdromPath:string;

procedure CDROMOpen;

procedure CDROMClose;


{***************************REGISTRY*******************************************}

procedure StartFromRegistry(appName,appPath:string);

//запускается до WindowsLogon

procedure StartServiceFromRegistry(appName,appPath:string);

procedure StartFromWinIni(appPath:string);

function IsInstalled (FileExe: String): Boolean;


IMPLEMENTATION

(*

Вопрос:

Можно ли как-то уменьшить мерцание при перерисовке компонента?


Ответ:

Если добавить флаг csOpaque (непрозрачный) к свойству ControlStyle компонента - то фон компонента перерисовываться не будет.


Пример:

constructor TMyControl.Create;

begin

 inherited;

 //проверка "if not inIDE" должна быть вставлена в том случае, когда TMyControl - компонент

 //чтобы среда IDE Delphi не глючила на этапе разработки

 if not inIDE then ControlStyle := ControlStyle + [csOpaque];

end;

...

procedure Register;

begin

 RegisterComponents('MyGraphics', [TMyControl]);

 inIDE:=True;

end;

*)


procedure mouseCursor(visi:boolean);

Var CState:Integer;

Begin

 CState:= ShowCursor(True);

 if visi then begin

  //Включение курсора

  while CState<0 do CState:=ShowCursor(True);

 end else begin

  //Выключение курсора

  while Cstate >= 0 do Cstate := ShowCursor(False);

 end;

End;


//Cache,Cookies,Desktop,Favorites,Fonts,Personal,Programs,SendTo,Start Menu,Startup

function ShellFolder(const folderType:string):string;

var registry:TRegistry;

begin

 result:='';

 Registry := TRegistry.Create;

 try

  Registry.RootKey := HKey_Current_User;

  Registry.OpenKey('SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders', False);

  result:= Registry.ReadString(folderType);

 finally

  Registry.Free;

 end;

end;


procedure SetWallpaper(const fileName:string;tile:boolean);

var Reg: TRegIniFile;

begin

 Reg:=TRegIniFile.Create('Control Panel');

 Reg.WriteString('desktop', 'Wallpaper', fileName);

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*