Справочник советов и примеров по C++Builder

         

Диски и файлы




Получение метки диска

// Для получения метки диска напишите следующий код:
char DiskLabel[MAX_PATH];

char *DiskName = "c:\\"; // имя диска
GetVolumeInformation(DiskName, DiskLabel, MAX_PATH, NULL, NULL, NULL, NULL, 0);

// в DiskLabel находится метка диска

Определение размера диска (VCL вариант)

// Для определения размера диска используйте функцию DiskSize, объявленную в Sysutils.hpp. В параметрах функции диску А соответствует 1, диску В - 2, и т. д., 0 - текущий диск. Следующий код определит размер диска С в байтах.
__int64 Size = DiskSize(3);

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

// Для определения свободного пространства на диске используйте функцию DiskFree, объявленную в Sysutils.hpp. В параметрах функции диску А соответствует 1, диску В - 2, и т. д., 0 - текущий диск. Следующий код определит размер свободного пространства на диске С в байтах.

__int64 FreeSpace = DiskFree(3);

Создание ярлыка

// для использования функции необходимо подключить файл

// shlobj.h

// lpszPathObj - путь к объекту, для которого будет

// создаваться ярлык

// lpszPathLink - где будет создаватья ярлык

// lpszDesc - описание ярлыка
HRESULT CreateLink(LPCSTR lpszPathObj, LPSTR lpszPathLink, LPSTR lpszDesc)

{

HRESULT hres;

IShellLink *psl;

CoInitialize(NULL);

hres = CoCreateInstance(CLSID_ShellLink, NULL,

CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl);

if(SUCCEEDED(hres))

{

IPersistFile *ppf;

psl->SetPath(lpszPathObj);

psl->SetDescription(lpszDesc);

hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);

if(SUCCEEDED(hres))

{

wchar_t wsz[MAX_PATH];

MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz, MAX_PATH);

hres = ppf->Save(wsz, true);

ppf->Release();

}

psl->Release();

CoUninitialize();

}

return hres;

}

Удаление файла в корзину (VCL вариант)

// разместите компонент TOpenDialog (OpenDialog1) и TButton (Button1) на форме (Form1). Для удаления файла в корзину напишите следующий код:
void __fastcall TForm1::Button1Click(TObject *Sender)


{

if(OpenDialog1->Execute())

{

AnsiString DialogTitle = "Удаление в корзину";

SHFILEOPSTRUCT FileOpStruct;

ZeroMemory(&FileOpStruct, sizeof(SHFILEOPSTRUCT));

FileOpStruct.pFrom = (OpenDialog1->FileName + '\0').c_str();

FileOpStruct.wFunc = FO_DELETE;

FileOpStruct.fFlags = FOF_ALLOWUNDO;

FileOpStruct.lpszProgressTitle = DialogTitle.c_str();

SHFileOperation(&FileOpStruct);

}

}



Удаление файла (Вариант 1)

// Для удаления файла надо подключить к проекту Sysutils.hpp и напишите следующий код:
void __fastcall TForm1::Button1Click(TObject *Sender)

{

AnsiString FileName="c:\\readme.txt";

if (DeleteFile(FileName)) Label1->Caption="true";

}



Удаление файла (Вариант 2)

// Для удаления файла напишите следующий код:
#include &ltstdio.h>

String FileName="c:\\1.txt";

remove(FileName.c_str());

Работа с файлами GIF и JPEG

// Для того, чтобы стандартными средствами C++Builder'a работать с файлами GIF и JPEG, добавьте в начало программы следующий код:
TPicture *Picture = new TPicture();

Picture->RegisterFileFormat(__classid(TJPEGImage), "jpg", "jpg",

__classid(TJPEGImage));

delete Picture;

TPicture *Picture = new TPicture();
Picture->RegisterFileFormat(__classid(TGIFImage), "gif", "gif",

__classid(TGIFImage));

delete Picture;



Преобразование *.ico файла в *.bmp

// На форме разместите TImage (Image1), TOpenDialog (OpenDialog1) и TButton (Button1). Напишите следующий обработчик события OnClick кнопки:
void __fastcall TForm1::Button1Click(TObject *Sender)

{

AnsiString as;

TIcon *pi = new TIcon();

OpenDialog1->DefaultExt = ".ICO";

OpenDialog1->Filter = "icons (*.ico)|*.ICO";

OpenDialog1->Options

if (OpenDialog1->Execute())

{

pi->LoadFromFile(OpenDialog1->FileName);

as = ChangeFileExt(OpenDialog1->FileName,".BMP");

Image1->Width = Icon->Width;

Image1->Height = Icon->Height;



Image1->Canvas->Draw(0, 0, Icon);

Image1->Picture->SaveToFile(as);

}

delete pi;

}



Отображение свойств файла

// На форме разместите TOpenDialog (OpenDialog1) и TButton

// (Button1) напишите следующий обработчик события OnClick кнопки:
void __fastcall TForm1::Button1Click(TObject *Sender)

{

if(OpenDialog1->Execute())

{

SHELLEXECUTEINFO SEI;

ZeroMemory(&SEI, sizeof(SHELLEXECUTEINFO));

SEI.cbSize= sizeof(SHELLEXECUTEINFO);

SEI.lpVerb = "properties";

SEI.lpFile= OpenDialog1->FileName.c_str();

SEI.nShow = SW_SHOW;

SEI.fMask= SEE_MASK_INVOKEIDLIST;

ShellExecuteEx(&SEI);

}

}



Копирование файлов

// Для того чтобы скопировать файлы напишите следующий код:

int MoveFiles( AnsiString slSourceDir, AnsiString slTargetDir, bool toCopy = true )

{

SHFILEOPSTRUCT sh;

sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_FILESONLY;

sh.wFunc = toCopy ? FO_COPY : FO_MOVE;

sh.pFrom = slSourceDir.c_str();

sh.pTo = slTargetDir.c_str();

sh.hNameMappings = NULL;

sh.lpszProgressTitle = NULL;

return SHFileOperation ( &sh );

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

//copy all from program files

if(!MoveFiles("c:\\program files\\*.*", "c:\\temp"))

ShowMessage("Ok");

else ShowMessage("No");

}

// В функции MoveFiles первый параметр что копировать,

// второй куда копировать

FAQ с сайта



Удаление директории

// Для удаления директории напишите следующий код:
void __fastcall TForm1::Button1Click(TObject *Sender)

{

SHFILEOPSTRUCT sh;

sh.hwnd=Form1->Handle;

sh.wFunc = FO_DELETE;

sh.pFrom = "c:\\test\0"; //удаляемая директория

sh.pTo = NULL;

sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;

sh.hNameMappings = 0;

sh.lpszProgressTitle = NULL;

SHFileOperation(&sh);

}



Вpемя создания файла

// На форме должны быть Lаbel1 и Button1, затем напишите следующий код:
TDateTime FileTimeToDateTime(FILETIME *lpftime)

{

FILETIME localfiletime;

SYSTEMTIME systime;



FileTimeToLocalFileTime(lpftime,&localfiletime);

FileTimeToSystemTime(&localfiletime,&systime);

return(TDateTime(systime.wYear, systime.wMonth, systime.wDay)+

TDateTime(systime.wHour, systime.wMinute,

systime.wSecond, systime.wMilliseconds));

}

//----------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

FILETIME ftCreationTime,ftLastAccessTime,ftLastWriteTime;

HANDLE hFile=(HANDLE)FileOpen("c:\\autoexec.bat",fmOpenRead);

GetFileTime(hFile,&ftCreationTime,&ftLastAccessTime,&ftLastWriteTime);

AnsiString FileInfo="FileName: c:\\autoexec.bat";

FileInfo+="\nCreation Time:"+

FormatDateTime("c",FileTimeToDateTime(&ftCreationTime));

FileInfo+="\nLast Access Time:"+

FormatDateTime("c",FileTimeToDateTime(&ftLastAccessTime));

FileInfo+="\nLast Write Time:"+

FormatDateTime("c",FileTimeToDateTime(&ftLastWriteTime));

Label1->Caption=FileInfo;

FileClose((int) hFile);

}



Поиск файлов в каталоге и его подкаталогах

// Для поиска файлов в каталоге и его подкаталогах напишите следующий код:
void ListFiles(AnsiString path, TStrings* List)

{

// Эта процедура выводит список файлов и вызывает
// саму себя для всех каталогов
TSearchRec sr;

if (FindFirst(path+"*.*", faAnyFile, sr) == 0)

{

 do

 {

 if (sr.Attr & faDirectory)

  {

  if (sr.Name!=".")

  if (sr.Name!="..")

   {

   ListFiles(path+sr.Name+"\\",List);// Рекурсивный вызов
   }

  }

  else

   {

   AnsiString Ext=ExtractFileExt(sr.Name).UpperCase();

   if (Ext==".CPP")

   List->Add(path+sr.Name);

   }

 }

 while (FindNext(sr) == 0);

 FindClose(sr);

}



Application->ProcessMessages();

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

ListFiles("c:\\",Memo1->Lines);

}



Как выбрать папку из диалога (Вариант 1)

// Для того чтобы выбрать папку из диалога напишите следуюший код:

#include <FileCtrl.hpp>

.. .. .. ..

AnsiString way = "c:\\";

if(SelectDirectory("Укажите путь к папке","",way))

  Label1->Caption = way;



Как выбрать папку из диалога (Вариант 2)

// Для того чтобы выбрать папку из диалога напишите следуюший код:

#include <FileCtrl.hpp>

.. .. .. ..

AnsiString way = "c:\\";

if(SelectDirectory(way,

TSelectDirOpts()

  Label1->Caption = way;



Как удалить папку и все файлы в ней

// Для того чтобы удалить папку и все файлы в ней напишите следующую функцию:

bool DeleteDir(AnsiString DirName)

{

TSearchRec sr;

if (DirName.Length())

 {

 if (!FindFirst(DirName+"\\*.*",faAnyFile,sr))

 do

  {

  if (!(sr.Name=="." sr.Name==".."))// это удалять не надо

   if (((sr.Attr & faDirectory) == faDirectory )

   (sr.Attr == faDirectory))// найдена папка

    {

    FileSetAttr(DirName+"\\"+sr.Name, faDirectory );// сброс всяких read-only

    DeleteDir(DirName+"\\"+sr.Name);//рекурсивно удаляем содержимое

    RemoveDir(DirName + "\\"+sr.Name);// удаляем теперь уже пустую папку

    }

    else// иначе найден файл

    {

    FileSetAttr(DirName+"\\"+sr.Name, 0);// сброс всяких read-only

    DeleteFile(DirName+"\\"+sr.Name);// удаляем файл

    }

  }

 while (!FindNext(sr));// ищем опять, пока не найдем все

 FindClose(sr);

 }



RemoveDir(DirName);

return true;

}



Пример регистрации собственного расширения файла

// Напишите следующую функцию:

#include <Registry.hpp>

TRegistry *Reg;

Reg=NULL;

try

{

  Reg=new TRegistry;

  Reg->RootKey=HKEY_CLASSES_ROOT;

  Reg->OpenKey("\\.ant",true);

  Reg->WriteString("","MyProgram");

  Reg->CloseKey();

  Reg->OpenKey("\\MyProgram", true);

  Reg->WriteString("","My document");

  Reg->CloseKey();

  Reg->OpenKey("\\MyProgram\\Shell\\Open\\Command",true);

  Reg->WriteString("",ParamStr(0)+" \"%1\"");

  Reg->CloseKey();

  Reg->OpenKey("\\MyProgram\\DefaultIcon",true);

  Reg->WriteString("",ParamStr(0)+", 1");

  Reg->CloseKey();

}

__finally

{

if (Reg!=NULL)delete Reg;

}

// Весь текст генерирует расширение *.ant

// А этот код загружает файл с расширением *.ant в Image1.

if (ParamCount>0)

{

asFileName=ParamStr(1);

if (FileExists(asFileName)) Image1->Picture->LoadFromFile(asFileName);

  else ShowMessage(asFileName+" ОШИБКА ЗАГРУЗКИ ФАЙЛА!!!");

}

Автор:

Пример регистрации собственного расширения файла

// Напишите следующуй код:

if(GetDriveType("F:\\") == DRIVE_NO_ROOT_DIR)

MessageBox(NULL, "Указанного диска в системе нет!", "Внимание!", MB_OK | MB_ICONEXCLAMATION);

else

MessageBox(NULL, "Указанный диск есть в системе!", "Внимание!", MB_OK | MB_ICONINFORMATION);

Как проверить наличие дискеты в дисководе

// Напишите следующуй код:

bool IsDriveReady(char drive)

{

bool out;

WORD OldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);

char path[4];path[0] = drive;path[1] = ':';path[2] = '\\';path[3] = 0;

out = (SetCurrentDirectory(path) != 0);

SetErrorMode(OldErrorMode);

return out;

}

if (IsDriveReady('a'))

ShowMessage("Дискета в дисководе");

else ShowMessage("Нет дискеты");


Форма


Запрещение кнопки закрытия [X] формы

// Чтобы запретить кнопку закрытия формы, напишите следующий

// код (Form1- ваша форма, Button1 - кнопка на ней):
void __fastcall TForm1::Button1Click(TObject *Sender)

{

HMENU MenuHandle = GetSystemMenu(Handle, false);

if(MenuHandle)

  DeleteMenu(MenuHandle, SC_CLOSE, MF_BYCOMMAND);

}

Запрещение кнопки максимизации [[]] формы

// Чтобы запретить кнопку максимизации формы, напишите

// следующий код (Form1- ваша форма, Button1 - кнопка на ней):

void __fastcall TForm1::Button1Click(TObject *Sender)

{

HMENU MenuHandle = GetSystemMenu(Handle, false);

if(MenuHandle)

  DeleteMenu(MenuHandle, SC_MAXIMIZE, MF_BYCOMMAND);

}

// ПРИМЕЧАНИЕ: максимизация формы двойным щелчком мыши

// по заголовку также будет невозможна

Запрещение кнопки минимизации [_] формы

// Чтобы запретить кнопку минимизации формы, напишите

// следующий код (Form1- ваша форма, Button1 - кнопка на ней):
void __fastcall TForm1::Button1Click(TObject *Sender)

{

HMENU MenuHandle = GetSystemMenu(Handle, false);

if(MenuHandle)

  DeleteMenu(MenuHandle, SC_MINIMIZE, MF_BYCOMMAND);

}

Отмена закрытия формы при нажатии Alt+F4

// Чтобы форма не закрывалась при нажатии комбинации клавиш

// Alt+F4, разместите на форме компонент TActionList(ActionList1),

// создайте новый TAction(Action1), и в свойстве ShortCut у Action1

// пропишите комбинацию клавиш Alt+F4, а обработчик события

// OnExecute должен выглядеть следующим образом

// (Form1- ваша форма):
void __fastcall TForm1::Action1Execute(TObject *Sender)

{

// чтобы при сохранении C++Builder не уничтожил обработчик

}

Отмена закрытия формы при нажатии Alt+F4 (Вариант 2)

//В обpаботчике FormKeyDown пишешь:
if (Shift.Contains(ssAlt)&&Key==VK_F4) Tag=1;

//В обpаботчике FormCloseQuery:

if(Tag)

{

CanClose=false;

Tag=0;

}

Перемещение формы мышью не за заголовок

// Напишите следующий обработчик события OnMouseDown формы
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,


TShiftState Shift, int X, int Y)

{

 long SC_DRAGMOVE = 0xF012;

 if(Button == mbLeft)

  {

  ReleaseCapture();

  SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);

 }

}



Изменение размеров формы (развернуть и т.д.)

// Напишите следующий код:
Form1->WindowState = wsMaximized; // развернуть
Form1->WindowState = wsMinimized; // минимизировать
Form1->WindowState = wsNormal; // первоначальный размер



Как сделать кусок окна прозрачным

// Для того чтобы сделать кусок формы прозрачным,

// напишите следующий код:

//Прямоугольный кусок

HRGN R1=CreateRectRgn(0, 0, Width, Height);

HRGN R2=CreateRectRgn(4, 24, Width-4, Height-4);

CombineRgn(R1, R1,R2, RGN_DIFF);

SetWindowRgn(Handle, R1, TRUE);

//Кусок в виде элипса
HRGN hRgn1 = CreateRectRgn(0, 0, Width, Height);

HRGN hRgn2 = CreateEllipticRgn(0, 0, Width, Height);

HRGN hRgn3 = CreateRectRgn(0, 0, Width, Height);

CombineRgn(hRgn3, hRgn1, hRgn2, RGN_DIFF);

SetWindowRgn(Handle, hRgn3, TRUE);

//можно заменить hRgn3 на hRgn2

//Кусок в виде пятиугольника

HRGN Reg1, Reg2;

HRGN Region;

POINT p[5];

p[0] = Point(100, 0);

p[1] = Point(Width-100, 0);

p[2] = Point(Width, Height/2);

p[3] = Point(Width/2, Height);

p[4] = Point(0, Height/2);

Region = CreatePolygonRgn(p, 5, ALTERNATE);

SetWindowRgn(Handle, Region, true);



Создание новой формы во время работы программы

// Для того чтобы создать новую форму напишите:

// следующих код:

TForm * Formik= new TForm(this);

TButton* button=new TButton(Application);

button->Parent=Formik;

button->Caption="New Button";

button->Left=10;

button->Top=15;

button->Show();

Formik->Caption=123;

Formik->ShowModal();

delete Formik;



Как сделать прозрачную форму в W2K/XP

// Для того чтобы сделать прозрачную форму напишите:

int Transparency = 75;//насколько прозрачным будет окно (0-100%)

long ExtStyle = GetWindowLong(Handle, GWL_EXSTYLE);

SetWindowLong(Handle, GWL_EXSTYLE, ExtStyle | WS_EX_LAYERED);



SetLayeredWindowAttributes(Handle, 0 , (255 * Transparency) / 100,

LWA_ALPHA);



Прозрачное окно с реакцией на нажатия кнопок, панелей

// Для того чтобы создать форму напишите:

void __fastcall TForm1::Photo()

{

int X0,Y0;

bool Flag;

TRect ScreenRect;

TCanvas* ScreenCanvas=new TCanvas;

try

{

  Top=0;

  Left=Screen->Width;

  Width=Screen->Width;

  Height=Screen->Height;

  ScreenRect=Rect(0,0,Width,Height);

  ScreenCanvas->Handle=GetDC(0);

  Image1->Canvas->CopyRect(ScreenRect, ScreenCanvas,ScreenRect);

  ReleaseDC(Handle,ScreenCanvas->Handle);

  Left=Top;

} __finally

{

  delete ScreenCanvas;

}

}



Новая форма как отдельное окно

// Для того чтобы создать новую форму напишите:

void __fastcall TForm1::CreateParams(TCreateParams& Params)

{

TForm::CreateParams(Params);

Params.WndParent = 0;

}



Приложение без формы

Создайте новый проект. Дальше: Project->Remove from project



Определения класса окна определённого приложения

Для того чтобы определить класс определённого приложения напишите следующий код:

HWND hWnd=FindWindow(NULL,"Калькулятор");//для русскоязычной Windows

if (hWnd)

{

char buff[100];

GetClassName(hWnd,buff,100);

ShowMessage(buff);

}

Автор: Srpj Сайт:



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

// Напишите следующий код:

PaintDesktop(Form1->Canvas->Handle);


Графика и мультимедиа


Преобразование битового изображения из цветного в 256 градаций серого

// Преобразование осуществляется следующей функцией:
void SetBitmapPaletteToGreyScale(Graphics::TBitmap *pBitmap)

{

LOGPALETTE *pal;

HPALETTE hpal;

int i;

int PaletteSize; //Size of the palette buffer

pBitmap->PixelFormat = pf8bit;

pal = NULL;

PaletteSize = sizeof(TLogPalette) + (sizeof(TPaletteEntry) * 255);

pal = (LOGPALETTE *) malloc(PaletteSize);

pal->palVersion = 0x300;

pal->palNumEntries = 256;

for (i = 0 ; i

{

  pal->palPalEntry[i].peRed = i;

  pal->palPalEntry[i].peGreen = i;

  pal->palPalEntry[i].peBlue = i;

  pal->palPalEntry[i].peFlags = PC_NOCOLLAPSE;

}

hpal = CreatePalette(pal);

if(hpal != 0) pBitmap->Palette = hpal;

free(pal);

}

Как пpоигpать MIDI без MediaPlayer-а

// Для того чтобы проиграть MIDI:
#include <mmsystem.h>

mciSendString("open anny.mid type sequencer alias MUSIC", NULL, 0, 0);

mciSendString("play MUSIC from 0", NULL, 0, 0);

Как воспроизвести звуковой файл без MediaPlayer-а

// Для того чтобы воспроизвести звуковой файл:

// напишите следующий код

#include "mmsystem.h"
DWORD fdwSound = SND_ASYNC | SND_FILENAME;

PlaySound("C:\\click.wav",NULL, fdwSound);

Как рисунок TBitmap сделать монохромным?

// напишите следующий код

BMP.Monochrome = true ; //где BMP - TBitmap



Экран и рабочий стол


Изменение картинки на рабочем столе

// Для изменения картинки на рабочем столе

// используйте следующий код:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "pic.bmp",

SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);

// где pic.bmp - имя вашего файла с картинкой

Изменение картинки на рабочем столе(вариант 2)

//Первый вариант в C++Builder 5 вызывает ругань

// BoundsChecker'a, хотя и работает.

// Нижеприведенный вариант никакой ругани не вызывает, но

// почему-то работает не на всех машинах. Для изменения картинки

// на рабочем столе используйте следующий код:

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "pic.bmp",

SPIF_UPDATEINIFILE);

// где pic.bmp - имя вашего файла с картинкой

Изменение параметров экрана

// Для изменения параметров экрана используйте следующий

// код:

DEVMODE DM;

DM.dmSize = sizeof(DEVMODE);

DM.dmBitsPerPel = 16; // глубина цвета, бит на пиксель

DM.dmPelsWidth = 1024; // разрешение по горизонтали

DM.dmPelsHeight = 768; // разрешение по вертикали

DM.dmFields = DM_BITSPERPEL +

DM_PELSWIDTH +

DM_PELSHEIGHT +

DM_DISPLAYFREQUENCY;

DM.dmDisplayFrequency = 75; // частота обновления экрана

ChangeDisplaySettings(&DM, 0);

// ЗАМЕЧАНИЕ: при изменении параметров смотрите чтобы

монитор поддерживал это режим

Как узнать частоту обновления экрана

// Для получения частоты обновления экрана напишите следующий код:

HDC hDCScreen = GetDC(NULL);

int Refresh = GetDeviceCaps(hDCScreen, VREFRESH);

ReleaseDC(NULL, hDCScreen);

// в Refresh содержится частота обновления экрана по горизонтали

Как узнать разрешение экрана (VCL вариант)

// Разрешение экрана можно узнать, прочитав значения

// свойств Screen->Width и Screen->Height:

int HorzRes = Screen->Width;

int VertRes = Screen->Height;

Как узнать разрешение экрана (WinAPI вариант)

// Для получения разрешения экрана напишите следующий код:

HDC hDCScreen = GetDC(NULL);

int Horres = GetDeviceCaps(hDCScreen, HORZRES);

int Vertres = GetDeviceCaps(hDCScreen, VERTRES);


ReleaseDC(NULL, hDCScreen);

// в Horres содержится разрешение экрана по горизонтали,

// в Vertres содержится разрешение экрана по вертикали.



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

// Для получения разрешения экрана напишите следующий код:

int screenW=GetSystemMetrics(SM_CXSCREEN);//Получить ширину экрана

int screenH=GetSystemMetrics(SM_CYSCREEN);//Получить высоту экрана

// в screenW содержится разрешение экрана по горизонтали,

// в screenH содержится разрешение экрана по вертикали.



Отображение свойств дисплея

// Следующий код отобразит на экране диалоговое

// окно свойств дисплея:

ShellExecute(NULL, "", "Desk.cpl", "", "", SW_SHOWNORMAL);



Как поместить вид рабочего стола в буфер

Напишите следующий код:

#include <Clipbrd.hpp>

void __fastcall TForm1::Button1Click(TObject *Sender)

{

unsigned DataHandle;

HPALETTE APalette;

Word Format;

Graphics::TBitmap *Bitmap=new Graphics::TBitmap;

HDC DC=GetDC(0);

try{

Bitmap->Height=Screen->Height;

Bitmap->Width=Screen->Width;

BitBlt(Bitmap->Canvas->Handle , 0, 0, Screen->Width,

Screen->Height,DC, 0, 0, SRCCOPY);

//Изображение экрана теперь в Bitmap, запишем его в бyфеp обмена

Bitmap->SaveToClipboardFormat(Format,DataHandle,APalette);

Clipboard()->SetAsHandle(Format,DataHandle);

}

__finally

{

delete Bitmap;

ReleaseDC(0,DC);

}

}



Как рисовать на Десктопе

Напишите следующий код:

HDC hdc = CreateDC ( TEXT("DISPLAY"), NULL, NULL, NULL );

Rectangle( hdc, 100,100, 200, 200);

DeleteDC ( hdc );

Как закрасить рабочий стол по пикселю

Напишите следующий код:

void __fastcall TForm1::Button1Click(TObject *Sender)

{ TCanvas *dt = new TCanvas ;

randomize();

dt->Handle = GetDC(0);

while (dt)

{

dt->Pixels[random(1024)][random(768)]= 0 ;

}

}


Клавиши


Как программно сымитировать нажатие клавиш CTRL+V

// Напишите следующий код:

BYTE keys[256];

GetKeyboardState(keys);

keys[17] = 128;

SetKeyboardState(keys);

keybd_event(86, 0, 0, 0);

// ПРИМЕЧАНИЕ: с помощью это примера можно сымитировать

// и нажатие других комбинации, надо знать только код клавиш

FAQ с сайта

Нажатие клавиши "а"

// Напишите следующий код:
keybd_event('A', 0,0,0);
keybd_event('A', 0,KEYEVENTF_KEYUP,0);

Минимизация всех окон (Win+M)

// Напишите следующий код:
keybd_event(VK_LWIN, 0, 0 ,0);

keybd_event('M', 0, 0 ,0);

keybd_event('M', 0, KEYEVENTF_KEYUP,0);

keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);

Имитация нажатия Alt+Tab

// Напишите следующий код:
keybd_event(VK_MENU, 0, 0 ,0);

keybd_event(VK_TAB, 0, 0 ,0);

keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP,0);

keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP,0);

Имитация нажатия CapsLock

// Напишите следующий код:
keybd_event(VK_CAPITAL, 0, 0 ,0);

keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP,0);

Имитация нажатия PrintScreen

// Напишите следующий код:
keybd_event(VK_SNAPSHOT, 0, 0 ,0);

keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP,0);

Имитация нажатия PrintScreen только для формы

// Напишите следующий код:
keybd_event(VK_SNAPSHOT, 1, 0 ,0);

keybd_event(VK_SNAPSHOT, 1, KEYEVENTF_KEYUP,0);



Курсор мыши


Как переместить курсор мыши на X,Y

// Для перемещения курсора используйте функцию:
SetCursorPos(X,Y);

Позиция курсора

// Для того чтобы узнать позицию курсора напишите следующий код:
TPoint cPt;
GetCursorPos(&cPt);

ShowMessage(int(cPt.y));//Возвращает y-позицию курсора мыши

TPoint cPt;

GetCursorPos(&cPt);

ShowMessage(int(cPt.x));//Возвращает x-позицию курсора мыши

Как ограничить перемещение курсора мыши

// Для того чтобы ограничить перемещение курсора мыши какой-либо областью экран, напишите следующий код:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

RECT LR;

LR.left=100;

LR.top=100;

LR.right=500;

LR.bottom=500;

ClipCursor(&LR);// Ограничиваем в заданой области

}

// Освободить курсор можно, передав функции NULL:

ClipCursor(NULL);

Как загрузить свой курсор

// Напишите следующий код:

HWND i;

i=LoadImage(0,"cursor1.cur",IMAGE_CURSOR,0,0,LR_LOADFROMFILE);

if (i==0) ShowMessage("Ошибка загрузки курсора!");

  else

  {

  Screen->Cursors[1]=i;

  Form1->Cursor=1;

  }

Автор:



Программа


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

// Для чтобы программа не запускалась второй раз надо модифицировать проектный файл (в данном примере это Project1.cpp):

#include &ltvcl.h&gt

#pragma hdrstop

USERES("Project1.res");

USEFORM("Unit1.cpp", Form1);

const char *NamedMutex= "OneOnly";

HANDLE CheckInstance(const char *Name)

{

HANDLE Mutex = CreateMutex(NULL, true,Name);

int er = GetLastError();

if (er) return 0;

return Mutex;

}

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

HANDLE Mutex = CheckInstance(NamedMutex);

if (!Mutex)

{

ShowMessage("Уже работает");

ReleaseMutex(Mutex);

return 1;

}

try

{

Application->Initialize();

Application->CreateForm(__classid(TForm1), &Form1);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

Как сделать, чтобы программа не запускалась второй раз (Вариант 2)

// Для чтобы программа не запускалась второй раз напишите следующий код:

BOOL WeAreAlone(LPSTR szName)

{

HANDLE hMutex=CreateMutex(NULL,TRUE,szName);

if (GetLastError()==ERROR_ALREADY_EXISTS)

  {

  CloseHandle(hMutex);

  return false;

  }

return true;

}

//В CreatForm пишишь проверку:

if (WeAreAlone("Some_Unique_Name_Or_Other"));

  else

  {

  ShowMessage("Такая программа уже работает!");

  exit(0);

  }

Автор:

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

// Чтобы узнать каталог напишите следющий код:

void __fastcall TForm1::Button4Click(TObject *Sender)

{

Label1->Caption = Application->ExeName;

Label2->Caption = ParamStr(0);

Label3->Caption = GetCurrentDir();// текущая папка (может измениться!)

char ExeName[MAX_PATH];

GetModuleFileName(HInstance, ExeName, sizeof(ExeName));

Label4->Caption=ExeName;

}

Как убрать иконку приложения с TaskBar-a


// Напишите следющий код:

ShowWindow(Application->Handle, SW_HIDE);//Скрыть

ShowWindow(Application->Handle, SW_SHOW);//Показать



Как сделать, чтобы программа на C++Builder не требовала .bpl, .dll

Для начала надо зайти Project->Options затем: На вкладке Compiler нажать "Release", на вкладке Packages снять галку с "Build with runtime packages" и на вкладке Linker снять галку с "Use dynamic RTL"

Как поменять ICON у моей программы

Project->Options->Load Icon

Как назначить программе другой приоритет

// Напишите следющий код:

HANDLE ProcessHandle, ThreadHandle;

DWORD ProcessID = GetCurrentProcessId();

ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);

SetPriorityClass(ProcessHandle,HIGH_PRIORITY_CLASS);

ThreadHandle = GetCurrentThread();

SetThreadPriority(ThreadHandle,THREAD_PRIORITY_TIME_CRITICAL);


Разное


Регистрация редактора свойства типа AnsiString

// Регистрация редактора свойства типа AnsiString производится следующим образом. Напишите вспомогательную функцию:

TTypeInfo *AnsiStringTypeInfo(void)

{

TTypeInfo *typeinfo = new TTypeInfo;

typeinfo->Kind = tkLString;

typeinfo->Name = "AnsiString";

return typeinfo;

}

// ... и используйте ее в вызове RegisterPropertyEditor

// (где TMyComponent - имя класса компонента,

// MyStringProperty - имя свойства типа AnsiString,

// TMyStringPropertyEditor - имя класса редактора свойства

// типа AnsiString).

RegisterPropertyEditor(AnsiStringTypeInfo(),

__classid(TMyComponent), "MyStringProperty",

__classid(TMyStringPropertyEditor));

Мигание иконкой в панели задач

// Чтобы помигать иконкой приложения в панели задач, разместите на форме компонент TTimer (Timer1) и напишите следующий обработчик события OnTimer (предварительно выставив интервал таймера и сделав его активным):

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

FlashWindow(Application->Handle, false);

FlashWindow(Application->Handle, true);

}

Запуск скринсейвера из программы

// Следующий код запустит скринсейвер Handle - дескриптор окна вашей программы (программисты на C++Builder могут использовать Application->Handle):

SendMessage(Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);

Скрытие таскбара

// Напишите следующий код:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

HWND H;

H=FindWindow("Shell_TrayWnd",NULL); //находим хандл окна таскбара

ShowWindow(H, SW_HIDE);//делаем его невидимым

Sleep(2000);

ShowWindow(H, SW_SHOW);//делаем его видимым

}

Переключение раскладки клавиатуры (конкретный язык)

// Напишите следующий код:

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

LoadKeyboardLayout("00000419", KLF_ACTIVATE);// Русская

Переключение раскладки клавиатуры

// Напишите следующий код:

ActivateKeyboardLayout(0, 0);


Программная очистка корзины (для Windows 98)

// Напишите следующий код:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

/* Очистка корзины

Есть флаги - NULL - как обычно, т.е. по умолчанию

SHERB_NOCONFIRMATION 0x00000001 - без запроса на удаление

SHERB_NOPROGRESSUI 0x00000002 - без показа удаления

SHERB_NOSOUND 0x00000004 - без звука

при желании флаги можно сочетать через | */

char sh[500];

SHEmptyRecycleBin(Handle, sh, SHERB_NOSOUND|SHERB_NOCONFIRMATION);

}



Запуск браузера

// Напишите следующий код:

void __fastcall TForm1::Label1Click(TObject *Sender)

{

ShellExecute(Handle, "open", "http://google.com/",

0, 0, SW_SHOWNORMAL);

}



Запуск почтового клиента

// Напишите следующий код:

void __fastcall TForm1::Label1Click(TObject *Sender)

{

ShellExecute(Handle,NULL,"mailto:newcb@narod.ru?subject=Tema",

NULL,NULL,SW_SHOWNORMAL);

}



Как добавить код на ассемблере

// Ассемблеровские вставки делаются так:

asm {

// код ассемблера

}



Как сделать Shutdown (закрыть все запущенные приложения)

// напишите следующий код:

HANDLE hToken; TOKEN_PRIVILEGES tkp; // Get a token for this process.

if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) ShowMessage("OpenProcessToken"); // Get the LUID for the shutdown privilege.

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // one privilege to set

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get the shutdown privilege for this process.

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); // Cannot test the return value of AdjustTokenPrivileges.

if (GetLastError() != ERROR_SUCCESS) ShowMessage("AdjustTokenPrivileges"); // Shut down the system and force all applications to close.

if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE , 0)) ShowMessage("ExitWindowsEx");



Какая на программа активна

// Для того что бы узнать какая программа активна кинте на форму таймер Timer1 и метку Label1 напишите следующий код:



void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

HANDLE hWnd;

hWnd = GetForegroundWindow();

char szTitle[41] = {0};

GetWindowText(hWnd,szTitle,40);

Label1->Caption = AnsiString(szTitle);

}



Блокировка клавиатуры и мыши

// Для блокировки клавиатуры и мыши напишите следующий код:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

HINSTANCE hDll;

//ниже прототип будущей функции

DWORD __stdcall (*BlockInput)(bool Status);

DWORD Result;

Memo1->Lines->Add("");

Memo1->Lines->Add("Загрузка функции BlockInput()...");

hDll = LoadLibrary("User32.dll");

Memo1->Lines->Add("hDll = " + IntToHex(int(hDll), 8));

BlockInput = (DWORD __stdcall (*)(bool Status))GetProcAddress(hDll,

"BlockInput");

Memo1->Lines->Add("BlockInput = " + IntToHex(int(BlockInput), 8));

if(!BlockInput)

{

Memo1->Lines->Add("Ошибка!!!");

FreeLibrary(hDll);

return;

}

Memo1->Lines->Add("Выполняем BlockInput(true)...");

Result = BlockInput(true);

Memo1->Lines->Add("Result = " + IntToStr(Result));

if(Result)

{

Memo1->Lines->Add("Теперь клиатура и мышь доступны только, если нажать CTRL+ALT+DEL");

Memo1->Lines->Add("Ждем 15 сек...");

Sleep(15000);

}

else Memo1->Lines->Add("Ошибка!!!");

Memo1->Lines->Add("Восстанавливаем все как было...");

BlockInput(false);

FreeLibrary(hDll);

Memo1->Lines->Add("Готово.");

}



Как из тела программы запустить обработчик события (как функцию)

// напишите следующий код в нужном месте:

{

...

Form1->Button1Click(Form1);

...

}



Определение количества элементов в массиве

Чтобы в Run Time определить количество элементов в массиве, можно воспользоваться макросом ARRAYSIZE, определённым в файле sysopen.h следующим образом:

#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))

Автор: Srpj Сайт:



Имитации нажатия левой кнопки мыши

// Напищите слеующий код в нужном месте:

INPUT inp[2];

memset(inp,0,sizeof(inp));

inp[0].type=INPUT_MOUSE;

inp[0].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;

inp[1].type=INPUT_MOUSE;

inp[1].mi.dwFlags=MOUSEEVENTF_LEFTUP;

SendInput(2,inp,sizeof(INPUT));

Автор:


Редактор


Запуск C++Builder без заставки

// Для того, чтобы при запуске C++Builder не отображалась заставка, запустите C++Builder из командной строки с ключом -np:

bcb.exe -ns

Запуск C++Builder без создания нового проекта

// Для того, чтобы при запуске C++Builder не создавался новый проект, запустите C++Builder из командной строки с ключом -np:

bcb.exe -np

Автоматическое открытие последнего проекта

Надо зайти Tools->Enviroment Options и на вкладке Preferences поставить галочку Project desktop.

Как сделать, чтобы Builder не создавал резервные файлы

Надо зайти Project->Options

Во первых можно в Compiler отключить Debug Information

Во вторых в Linker можно отключить Create Debug Information

Ну и конечно же надо поставить галочку Don't generate state files.

Как изменить размер сетки на форме

Надо зайти Tools->Enviroment Options и на вкладке Designer для изменения размера надо у Grid size поменять значения X и Y.

Как отключить генерацию файлов отладки (*.tds)

Надо зайти Tools->Debugger Options и на вкладке General снять галочку у Integrated Debugger.

Как поместить компонент на форму, зная его имя

Чтобы поместить какой-либо компонент на форму, не обязательно искать его на палитре компонентов: достаточно просто знать его имя. В меню выбираем: View -> Component List. Появляется окно со списком всех установленных компонентов. Чтобы выбрать нужный компонент, введите его имя и нажмите кнопку Add to form (или клавишу Enter) столько раз, сколько вам нужно этих компонентов.

Автор: Srpj Сайт:

Поиск текста в файлах с исходным кодом

Помимо стандартного средства поиска текста в файлах с исходным кодом, C++Builder предоставляет такую возможность, как "Incremental Search". Чтобы воспользоваться ею, нажмите Ctrl+E (или выберите соответствующий пункт из меню), перейдите к началу файла и вводите с клавиатуры текст, который вам нужно найти. Это приведёт к тому, что в редакторе кода вы будете постепенно продвигаться к нужному фрагменту.


Автор: Srpj Сайт:



Несколько компонентов одного типа

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

Автор: Srpj Сайт:



Библиотека из DLL

Если у вас нет определённой библиотеки (к примеру, ddraw.lib), её можно создать из самой DLL, используя утилиту implib.exe, поставляемую вместе с компиляторами Borland.

Пример в консоли:

cd %windir%\system

implib c:\ddraw.lib ddraw.dll

Автор: Srpj Сайт:



Как перейти к объявлению какой-то функции или переменной

Если вам нужно перейти к объявлению какой-то функции или переменной, кликните на её имени с клавишей Ctrl.

Автор: Srpj Сайт:



Восстановление всплывающей подсказки

Восстановить всплывающую подсказку с параметрами функции поможет комбинация Ctrl+Shift+Пробел. Курсор должен располагаться после открывающей скобки.

Автор: Srpj Сайт:



Восстановление списка полей/параметров/методов объекта

Восстановить список полей/параметров/методов какого-то объекта (возникающий после написания имени объекта и, в зависимости от ситуации, знака '.' или '->'), можно с помощью Ctrl+Пробел. Курсор должен при этом быть установлен после '.' или '->'.

Автор: Srpj Сайт:




Сети и Интернет


Как послать сообщение компьютеру в локальной сети

// Для того чтобы послать сообщение компьютеру в локальной сети

// напишите следующие функции:

bool SendNetMessage(AnsiString Komp, AnsiString Mes)

{

AnsiString From;

char CompName[10];

DWORD size=10;

//Откуда

if(!GetComputerName(CompName,&size)) return false;

From=CompName;

if(Mes.Length()==0) return false;

HANDLE hSlot = CreateFile(("\\\\"+Komp+"\\mailslot\\messngr").c_str(),

GENERIC_WRITE, FILE_SHARE_READ, NULL,

OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (hSlot == INVALID_HANDLE_VALUE) return false;

DWORD cb=0;

BOOL ret;

char *buf=new char[From.Length()+1+Komp.Length()+1+Mes.Length()+1];

//1. From

memcpy(&buf[cb],From.c_str(),From.Length()+1);

cb +=From.Length()+1; //+1 на конце должен быть 0

//2. To

memcpy(&buf[cb],Komp.c_str(),Komp.Length()+1);

cb +=Komp.Length()+1;

//3. Само сообщение

memcpy(&buf[cb],Mes.c_str(),Mes.Length()+1);

cb +=Mes.Length()+1;

//ConvertToDos

CharToOemBuff(buf,buf,cb);

ret=WriteFile(hSlot, buf,cb, &cb, NULL);

CloseHandle(hSlot);

delete[] buf;

if(!ret) return false;

return true;

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

AnsiString Komp,Mes;

//Кому

Komp=Edit1->Text; //Имя компьютера

//Сообщение

Mes=Edit2->Text; //Message

bool ret;

int Kol=UpDown1->Position;

for(int i=1;i

{

ret=SendNetMessage(Komp,Mes);

}

}

Как скачать файл из Интернета с конкретного сайта

// напишите следующуй код:

NMHTTP1->InputFileMode=true;

NMHTTP1->Get(" http://www.xxx.ru/pic.gif");

NMHTTP1->Body="pic.gif"; //на винт скинуть

Получение IP-адреса локальной машины

// напишите следующуй код:

#include &ltwinsock.h>

#include &ltstdio.h>

void __fastcall TForm1::Button1Click(TObject *Sender)

{

WORD wVersionRequested;

WSADATA wsaData;

wVersionRequested = MAKEWORD(1, 0);

int err = WSAStartup(wVersionRequested, &wsaData);

if(err == 0)


{

char hn[1024];

struct hostent *adr;

if(gethostname((char *)&hn, 1024))

{

int err = WSAGetLastError();

Beep();

};

adr = gethostbyname(hn);

if(adr)

{

  char *LocalIp = new char[15];

  sprintf(LocalIp,"%d.%d.%d.%d",

  (unsigned char)adr->h_addr_list[0][0],

  (unsigned char)adr->h_addr_list[0][1],

  (unsigned char)adr->h_addr_list[0][2],

  (unsigned char)adr->h_addr_list[0][3]);

  Label1->Caption=LocalIp; //Выводим IP адрес

}

}

}

Получение имени локального компьютера

// напишите следующуй код:

#include &ltwinsock.h>

WORD wVersionRequested;

WSADATA wsaData;

wVersionRequested = MAKEWORD(1, 0);

int err = WSAStartup(wVersionRequested, &wsaData);

if(err == 0)

{

char name[1024];

if(gethostname((char *)&name, 1024))

{

int err = WSAGetLastError();

Beep();

};

Label1->Caption=name; //выводим имя

}


Система


Как узнать папку Windows

// Для получения папки Windows напишите следующий код:
char WindowsDirectory[MAX_PATH];

GetWindowsDirectory(WindowsDirectory, MAX_PATH);

// В WindowsDirectory содержится папка Windows

Как узнать системную папку Windows

// Для получения системной папки Windows напишите

// следующий код:
char SystemDirectory[MAX_PATH];

GetSystemDirectory(SystemDirectory, MAX_PATH);

// В SystemDirectory содержится системная папка Windows

Как спрятать кнопку "Пуск"

// для того, чтобы спрятать кнопку "Пуск", воспользуйтесь

// следующим кодом:

// Поиск кнопки
HWND hWnd;

hWnd = FindWindow("Shell_TrayWnd", NULL);

hWnd = FindWindowEx(hWnd, NULL, "BUTTON", NULL);

// Сокрытие кнопки

ShowWindow(hWnd, SW_HIDE);
// для того, чтобы вновь отобразить кнопку после сокрытия, напишите:
ShowWindow(hWnd, SW_SHOW);

Как сдвинуть кнопку "Пуск"

// Для того что бы сдвинуть кнопку "Пуск" напишите

// следующий код:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

HWND hWnd = FindWindow("Shell_TrayWnd", NULL);

HWND hWndBt = FindWindowEx(hWnd, NULL, "Button", NULL);

MoveWindow(hWndBt, 30, 2, 98, 32, TRUE);

}

Получение имени компьютера

// Для получения имени компьютера напишите следующий код:

unsigned long Size = MAX_COMPUTERNAME_LENGTH + 1;

char *Buffer = new char[Size];

GetComputerName(Buffer, &Size);

// после выполнения данного кода имя компьютера будет

// содержаться в Buffer. После того, как Buffer перестанет быть

// вам нужным, не забудьте вызвать delete [] Buffer.

Изменение имени компьютера

// для изменения имени компьютера воспользуйтесь функцией

// SetComputerName
SetComputerName("НОВОЕ_ИМЯ_КОМПЬЮТЕРА");

// не забудьте перезагрузить машину

Список всех шрифтов, установленных в системе (VCL вариант)

// Список всех шрифтов, установленных в системе, содержится в

// свойстве Fonts глобальной переменной Screen.

// Нижеприведенный пример показывает заполнение именами


// шрифтов выпадающего списка:
void __fastcall TForm1::FormCreate(TObject *Sender)

{

for (int i = 0; i < Screen->Fonts->Count; i++)

ComboBox1->Items->Add(Screen->Fonts->Strings[i]);

}



Как получить доступ к буферу обмена (VCL вариант)

// Для получения доступа к буферу обмена вызовите функцию

// Clipboard() из модуля Clipbrd. Функция возвращает указатель
// на экземпляр класса TClipboard

#include &ltClipbrd.hpp&gt

Clipboard()->Clear(); // очищает буфер обмена



Как пpи стаpте пpогpаммы включить киpиллицу

// Напишите этот в начале программы:

ActivateKeyboardLayout(LoadKeyboardLayout(IntToHex(MAKELANGID

(LANG_RUSSIAN, SUBLANG_DEFAULT) ,8).c_str(), 0), 0);



Как отобразить Диспетчер задач

// Напишите следующий код:

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_TASKLIST, -1)



Как добавить данные в реестр

// Напишите следующий код:

#include &ltRegistry.hpp&gt

TRegistry *Registry=new TRegistry;

try

{

Registry->RootKey=HKEY_CURRENT_USER; // Ветвь реестра

Registry->OpenKey("ant47\\Test",true); // Создать новую ветвь в реестре

Registry->WriteString("DATA","15 мая"); // Создание строкового раздела

}

__finally

{

delete Registry;

}

Автор:

Как изменить скорость перемещения мыши

// Напишите следующий код:

SystemParametersInfo(SPI_SETMOUSESPEED,0,(PVOID)5,SPIF_SENDCHANGE);

// где 5 - скорость. (по умолчанию - 10)

Как инвертировать кнопки мыши

// Напишите следующий код:

SwapMouseButton(true) ; // инвертировать

SwapMouseButton(false) ; // восстановить значение


Строки


Как переменную AnsiString конвертировать в char

// Напишите следующий код:

AnsiString a = "Hello World";

char *b = a.c_str();

Как переменную AnsiString конвертировать в int

// Напишите следующий код:

AnsiString a = "123456";

int i = a.ToInt();

или

int i = StrToInt(a);

Как переменную AnsiString конвертировать в float

// Напишите следующий код:

AnsiString a = "12.5";
float d;

d=a.ToDouble();

Как переменную char или int конвертировать в AnsiString

// Напишите следующий код:

char Arr[240]= "Hello World";

AnsiString Str;

Str=(AnsiString)Arr;

Как узнать длину слова в пикселях

// Напишите следующий код:

AnsiString a="Hello";

int WidthOfString = Canvas->TextWidth(a);

int HeightOfString = Canvas->TextHeight(a);

TSize SizeOfString = Canvas->TextExtent(a);

//У структуры TSize два поля cx и cy размеры

//по горизонтали и вертикали

Как конвертировать строку из кодировки WIN в KOI

// Напишите следующий код:

AnsiString S,N,C,SKoi,SWin;

SKoi="__ёАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя";

SWin="ёЁTюабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ";
int k;

S="Строка"; //Строка WIN

for(int j=1; j

{

 C=S[j];

 k=AnsiPos(C,SWin);

 if(k==0)

 N+=S[j];

   else

   N+=SKoi[k];

}

//N строка Koi8

FAQ с сайта

Как скопировать текст из строки в Clipboard

// Напишите следующий код:

#include <clipbrd.hpp>

void __fastcall TForm1::Button1Click(TObject *Sender)

{

AnsiString s = "Hello, World !";

Clipboard()->AsText = s;

if (Clipboard()->HasFormat(CF_TEXT))

   Edit1->Text = Clipboard()->AsText;

   else

   Application->MessageBox("The clipboard does not contain text.", NULL, MB_OK);

}



Устройства


Открытие привода CD-ROM

// Чтобы программно открыть привод CD-ROM, подключите

// после vcl.h заголовочный файл mmsystem.h

// и вызовите функцию mciSendString:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

mciSendString("Set cdaudio door open wait", NULL, 0, Handle);

}

Закрытие привода CD-ROM

// Чтобы программно закрыть привод CD-ROM, подключите

// после vcl.h заголовочный файл mmsystem.h

// и вызовите функцию mciSendString:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

mciSendString("Set cdaudio door closed wait", NULL, 0, Handle);

}

Программное выключение монитора

// Следующий код выключит монитор

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);

Программное включение монитора

// Следующий код включит монитор

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1);

Как выключить/перезагрузить компьютер

// Для включения/перезагрузки компьютера вызовите

// функцию ExitWindowsEx

// выключить компьютер

ExitWindowsEx(EWX_SHUTDOWN, 0);

// перезагрузить компьютер

ExitWindowsEx(EWX_REBOOT, 0);

// завершить сеанс пользователя

ExitWindowsEx(EWX_LOGOFF, 0);

Сколько оперативной памяти

// Для того чтобы узнать сколько оперативной

// памяти на компьютере введите следующий код:

MEMORYSTATUS mem;

memset((void*)&mem,0,sizeof(mem));

mem.dwLength=sizeof(mem);

GlobalMemoryStatus(&mem);

MessageDlg("Total memory:"+IntToStr(mem.dwTotalPhys),

mtInformation, TMsgDlgButtons()

Как определить, подключена ли мышь

// Введите следующий код:

if(GetSystemMetrics(SM_MOUSEPRESENT))

MessageDlg("Мышь подключена!", mtInformation, TMsgDlgButtons()

else

MessageDlg("Мышь не найдена!", mtError, TMsgDlgButtons()

Название процессора

// Введите следующий код:

AnsiString ProcessorName="Unknown";

TRegistry *reg = new TRegistry;

try {

reg->RootKey = HKEY_LOCAL_MACHINE;

reg->OpenKey("Hardware\\Description"

"\\System\\CentralProcessor\\0", false);


ProcessorName=reg->ReadString("ProcessorNameString");

}

__finally

{

delete reg;

}

MessageDlg(ProcessorName, mtInformation, TMsgDlgButtons()


Определение набора расширенных инструкций поддерживающий процессором

// Введите следующий код:

Memo1->Lines->Add("Поддерживаемые инструкции:"); DWORD brt; bool AMD,MMX; __asm { mov eax,1 cpuid mov brt,edx } if(brt&(1Lines->Add("MMX"); } if(brt&(1Lines->Add("SSE"); } __except(EXCEPTION_EXECUTE_HANDLER){} if(brt&(1Lines->Add("SSE2"); } __except(EXCEPTION_EXECUTE_HANDLER){} } } } __asm { mov eax,0x80000000 cpuid cmp eax,0x80000000 jc notamd mov eax,0x80000001 cpuid mov brt,edx mov AMD,1 notamd: } if(AMD) if((MMX)&&(brt&(1Lines->Add("3DNOW!");

Автор:

Определение тактовой частоты CPU

// При помощи этой функции можно определить тактовую частоту CPU:

double CPUSpeed(void) { DWORD dwTimerHi, dwTimerLo; double dRes; asm

{ DW 0x310F mov dwTimerLo, EAX mov dwTimerHi, EDX }

Sleep (500); asm

{ DW 0x310F sub EAX, dwTimerLo sub EAX, dwTimerHi mov dwTimerLo, EAX mov dwTimerHi, EDX } dRes = dwTimerLo/(1000.0*500); return dRes; }


Время и даты


Получение текущей даты и времени (VCL вариант)

// для получения текущей даты и времени воспользуйтесь функцией

// Now() из модуля Sysutils.hpp . Отобразить полученные дату и

// время можно следующим образом (Button1 - кнопка на форме):
void __fastcall TForm1::Button1Click(TObject *Sender)

{

Form1->Caption = DateTimeToStr(Now());

}

Получение текущего времени (VCL вариант)

// для получения текущего времени воспользуйтесь функцией Time()

// из модуля Sysutils.hpp . Отобразить полученную дату можно

// следующим образом (Button1 - кнопка на форме):
void __fastcall TForm1::Button1Click(TObject *Sender)

{

Form1->Caption = DateTimeToStr(Time());

}

Получение дня недели (VCL вариант)

// для получения дня недели воспользуйтесь функцией DayOfWeek()

// из модуля Sysutils.hpp, передав ей текущую дату. DayOfWeek

// возвращает значение от 1 до 7, где 1 - воскресенье,

// 2 - понедельник, и т. д.
int Day = DayOfWeek(Date());

Часы на форме с точностью до минут

Напишите следующий код:

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

Label1->Caption = FormatDateTime("hh:nn",Time());

Timer1->Interval=10000;// меньше число, больше точность

}

Часы на форме с точностью до долей секунд

Напишите следующий код:

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

Label1->Caption=Time().FormatString("hh:mm:ss:zz");

Timer1->Interval=1;

}

Автор:

Как подсчитать время выполнения функции

Напишите следующий код:

DWORD start=GetTickCount();

// тут ваша функция или как-либо действия

Edit1->Text=FloatToStr((GetTickCount()-start)/1000.);

Время в процессорных тактах

// Для того чтобы узнать время в процессорных тактах

// напишите следующую функцию:

#pragma warn -8070

__int64 Ticks()

{

asm .586

asm RDTSC

}

#pragma warn +8070

// вызов функции

__int64 i = Ticks();