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);

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