Как создать Edit для ввода IP адреса, как в свойствах протокола TCP/IP ?
INITCOMMONCONTROLSEX CommCtrl; CommCtrl.dwSize=sizeof(CommCtrl); CommCtrl.dwICC=ICC_INTERNET_CLASSES; if(::InitCommonControlsEx(&CommCtrl)){ HWND hWndIP=::CreateWindow("SysIPAddress32","IPAddr", WS_CHILD | WS_TABSTOP | WS_GROUP,10,72,130,24,Handle,0,0,0); if (hWndIP) ::ShowWindow(hWndIP, SW_SHOW); }
Как вызвав, почтового клиента, поместить сразу же туда автоматически текст сообщения и отправителя?
ShellExecute(Handle,"open","mailto:mail@mail.ru?subject=\"У Шуры Шара\"&body=\"Шура шарит Шаурму\"",NULL,NULL,SW_SHOW);
как программно установить BorderIcons. т.е. мне нужно убрать кнопки минимизировать и распахнуть.
TBorderIcons tempBI = BorderIcons; tempBI >> biMaximize; tempBI >> biMinimize; BorderIcons = tempBI; Код: BorderStyle = bsToolWindow;
Загрузка без картинок в CppWebBroser... как? __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
CustomDownLoad = new TCustomDownLoad(CppWebBrowser1);
N4->Checked = CustomDownLoad->DownloadControlOptions.Contains(dcoImages);
CppWebBrowser1->Navigate(WideString("URL"));
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1() { CustomDownLoad->Release(); }
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender)
{
if(CustomDownLoad->DownloadControlOptions.Contains(dcoImages)) CustomDownLoad->DownloadControlOptions = TDownloadControlOptions();
else CustomDownLoad->DownloadControlOptions = TDownloadControlOptions() << dcoImages; N4->Checked = !N4->Checked; CppWebBrowser1->Refresh();
}
Как программно нажать кнопку на HTML странице?
void __fastcall TForm1::ClickButtonByName(String ButtonName)
{ //TODO: Add your source code here
if( WB->Document )
{ TComInterface pDocument; WB->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pDocument);
if( pDocument )
{
TComInterface pCollection; pDocument->get_all(&pCollection);
if( pCollection )
{
TComInterface pDisp;
pCollection->item(TVariant(WideString(ButtonName)), TVariant(0), &pDisp);
if( pDisp )
{ TComInterface pElement; pDisp->QueryInterface(IID_IHTMLElement, (LPVOID*)&pElement);
if( pElement )
{ pElement->click();}
}
}
}
}
}
Как работать со службами(servises)(запустить,остановить,настроить) ?
1. Шаг первый Подключиться к менеджеру севисов(ServiceControlMenager)
SC_HANDLE hSCM = NULL;
DWORD dwAccess=SC_MANAGER_CONNECT;
hSCM = OpenSCManager(NULL /*локальная машина*/,NULL /*текущая база*/,dwAccess);
if(!hSCM){ //Обработка ошибки return; }
флаги доступа могут быть комбинированы между собой.
Существуют следующие:
SERVICE_START - разрешено запускать сервисы
SERVICE_STOP - разрешено останавливать сервисы
DELETE - разрешено удалять сервисы
SERVICE_CHANGE_CONFIG - разрешено конфигурировать сервисы
SERVICE_ALL_ACCESS - включает полные права доступа остальные флаги смотрите в документации.
2. Шаг второй Необходимо получить внутреннее имя сервиса, по внешнему имени (на примере Firebird Server)
char outName[] = "Firebird Server";
DWORD dwBuff = 256;
char *inName = new char[dwBuff];
if(!GetServiceKeyName(hSCM,outName,inName,&dwBuff){ //Обработка ошибки return; }
Внешнее имя можно посмотреть в консоли управлениями сервисами.
Если это ваш сервис, или его внутренне имя вам известно - переходите к следующему шагу.
3. Шаг третий Подключение к сервису.
SC_HANDLE hService = NULL;
hService = OpenService(hSCM,servName,dwAccess);
if(!hService){ //Обработка ошибки return; }
Флаги доступа см. выше.
4. Шаг четвертый
Конфигурирование.
QUERY_SERVICE_CONFIG* lpQSC;
DWORD dwNeeded; lpQSC = ( QUERY_SERVICE_CONFIG)new char[4096];
if(!QueryServiceConfig(hService,lpQSC,4096,&dwNeeded)){ //Обработка ошибки
return; }
//Обрабатываем полученную инфу
Изменяем конфигурацию - устанавливаем автоматический запуск
if(!ChangeServiceConfig(hService,SERVICE_NO_CHANGE,SERVICE_AUTO_START, SERVICE_NO_CHANGE, NULL,NULL,NULL,NULL,NULL,NULL,NULL)){ //Обработка ошибки return; }
5. Шаг пятый Остановка сервиса
SERVICE_STATUS status_service;
if(!ControlService(hService,SERVICE_CONTROL_STOP,&status_service)){ //Обработка ошибки return; }
6. Шаг шестой Закрываем все открытые хендлы и освобождаем ресурсы.
Как реализовать поиск по HTML-странице?
//in hpp
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include "SHDocVw_OCX.h"
#include
//---------------------------------------------------------------------------
class TForm1 : public TForm
{ __published: // IDE-managed Components
TPanel *Panel1;
TButton *Button1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
TCppWebBrowser *CppWebBrowser;
public: // User declarations
__fastcall TForm1(TComponent* Owner); };
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//in cpp ...
#include "mshtmhst.h"
#include "mshtmcid.h"
#include "mshtml.h"
...
#define HTMLID_FIND 1 ... const GUID CGID_IWebBrowser = {0xed016940, 0xbd5b, 0x11cf, {0xba, 0x4e, 0x0, 0xc0, 0x4f, 0xd7, 0x08, 0x16}} ;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
LPDISPATCH lpDispatch = CppWebBrowser->ControlInterface->get_Document();
if(lpDispatch)
{ IOleCommandTarget* pcmd=NULL;
if( SUCCEEDED(lpDispatch->QueryInterface(IID_IOleCommandTarget,(void**)&pcmd) ) )
{ pcmd->Exec(&CGID_IWebBrowser, HTMLID_FIND, 0, NULL, NULL);
pcmd->Release();
}
lpDispatch->Release();
}
}
Как скачать файл из Инета?
1. Вариант 1. Можно возпользоваться компонентом TIdHTTP с вкладки Indy. Данные компоненты входят в поставку BCB начиная с версии 6.0. Для более ранних версий BCB их можно скачать с оффсайта разработчика: INDY
void __fastcall TMainForm::GetBtnClick(TObject *Sender)
{
TFileStream* fs;
int ReadByte=0;
int ReadBlock=0;
int NewReadBlock=ReadBlockEd->Text.ToInt();
bool Done=false;
String File=FileEd->Text;
String URL = URLEd->Text;
IdHTTP1->Request->ProxyPassword = PasswordEd->Text;
IdHTTP1->Request->ProxyServer = "ps.proxy.ru";
IdHTTP1->Request->ProxyPort = 3128;
IdHTTP1->Request->ProxyUsername = UserEd->Text;
//если файл ранее уже закачивался...
if(ini->SectionExists(URL))
{ ReadByte = ini->ReadInteger(URL, "ReadByte", 0);
Done = ini->ReadBool(URL, "Done", true);
if(Done) { ShowMessage(String("Файл закачен полностью. Размер - ") + ReadByte + String(" байт.")); return; }
ReadBlock = ini->ReadInteger(URL, "ReadBlock", 0);
ReadBlock = (ReadBlock == NewReadBlock)? ReadBlock:NewReadBlock;
File = ini->ReadString(URL, "File", 0);
TFileStream* fs = new TFileStream(File, fmOpenWrite);
fs->Position = ReadByte;
IdHTTP1->Request->ContentRangeStart = ReadByte;
IdHTTP1->Request->ContentRangeEnd = ReadByte + ReadBlock;
IdHTTP1->Get(URL, fs);
if(IdHTTP1->Request->ContentRangeEnd > IdHTTP1->Response->ContentRangeEnd)
{
ini->WriteInteger(URL, "ReadByte", IdHTTP1->Response->ContentLength + IdHTTP1->Response->ContentRangeStart);
ini->WriteInteger(URL, "ReadBlock", ReadBlock);
ini->WriteString(URL, "File", File); ini->WriteInteger(URL, "Done", true);
}
else
{ ini->WriteInteger(URL, "ReadByte", ReadByte + ReadBlock);
ini->WriteInteger(URL, "ReadBlock", ReadBlock); //
ini->WriteString(URL, "File", File);
ini->WriteInteger(URL, "Done", false);
}
delete fs;
}
else
{ TFileStream* fs = new TFileStream(File, fmCreate);
fs->Position = ReadByte;
IdHTTP1->Request->ContentRangeStart = ReadByte;
IdHTTP1->Request->ContentRangeEnd = ReadByte + NewReadBlock;
IdHTTP1->Get(URL, fs);
if(IdHTTP1->Request->ContentRangeEnd > IdHTTP1->Response->ContentRangeEnd)
{
ini->WriteInteger(URL, "ReadByte", IdHTTP1->Response->ContentLength + IdHTTP1->Response->ContentRangeStart);
ini->WriteInteger(URL, "ReadBlock", NewReadBlock);
ini->WriteString(URL, "File", File);
ini->WriteInteger(URL, "Done", true);
}
else
{
ini->WriteInteger(URL, "ReadByte", ReadByte + NewReadBlock); ini->WriteInteger(URL, "ReadBlock", NewReadBlock);
ini->WriteString(URL, "File", File);
ini->WriteInteger(URL, "Done", false);
}
delete fs;
}
}
Вариант 2.
Воспользоваться функциями WinInet. Необходимо включить хедер wininet.h и подключить к проекту файл $(BCB)\LIB\PSDK\wininet.lib
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char szUrl[] = "URL"; //
String Page;
HINTERNET hInternet = InternetOpen("MY AGENT", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
HINTERNET hRequest = InternetOpenUrl(hInternet, szUrl, NULL, 0, 0, 0);
if(hRequest)
{
DWORD dwRead; char szTemp[1024];
TFileStream* fs = new TFileStream(ExtractFilePath(Application->ExeName) + "\\Page.html", fmCreate);
while (InternetReadFile(hRequest, (LPVOID)szTemp, 1024, &dwRead))
{
if (!dwRead) break; fs->Write(szTemp, dwRead); //
Page = Page + String(szTemp);
}
delete fs;
}
InternetCloseHandle(hRequest);
InternetCloseHandle(hInternet);
}
Вариант 3.
Непосредственно юзать WinSock API. Например скачиваем страницу и помещаем ее содержимое в Memo.
//Winsock API
char request[]= "GET / HTTP/1.0\r\n\ Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n\ Accept-Language: ru\r\n\ User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)\r\n\ Host: www.codenet.ru\r\n\r\n"; #define MAX_PACKET_SIZE 4096
void __fastcall TForm1::Button3Click(TObject *Sender)
{
WSADATA ws;
SOCKET s;
sockaddr_in adr;
hostent* hn;
char buff [MAX_PACKET_SIZE];
// Init
if (WSAStartup (0x0101, &ws) != 0)
{
// Error
return;
}
// Создаем сокет
if (INVALID_SOCKET == (s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP) ) ) { // Error
return; }
// получаем ИП
if (NULL == ( hn = gethostbyname ("www.codenet.ru") ) ) { // Error
return; }
// Заполгняем структуру
adr.sin_family = AF_INET;
adr.sin_addr.S_un.S_addr = *(DWORD* ) hn->h_addr_list[0];
adr.sin_port = htons (80);
// Устанавливаем соединение
if (SOCKET_ERROR == connect (s, (sockaddr* )&adr, sizeof (adr) ) ) { // Error
return; }
// Посылаем запрос
if (SOCKET_ERROR == send (s, request, strlen(request), 0) ) { // Error
return; }
// Принимаем данные
int len;
do {
if (SOCKET_ERROR == (len = recv (s, (char *) &buff, MAX_PACKET_SIZE, 0) ) ) return;
Memo1->Lines->Add(buff);
}
while (len!=0);
/*int len = recv (s, (char *) &buff, MAX_PACKET_SIZE, 0);
if ( (len == SOCKET_ERROR) || (len == 0) ) { // Error
return ; }
// Выводим полученное
Memo1->Lines->Add(buff);*/
if (SOCKET_ERROR == closesocket (s) ) { // Error
return ; } }
И самый простой вариант. Воспользоваться ф-ией URLDownloadToFile.
Необходимо включить хедер urlmon.h и подключить к проекту файл $(BCB)\LIB\PSDK\urlmon.lib
URLDownloadToFile( 0, "http://www.codenet.ru", "c:\\temp\myfile.html", 0, 0);
Как выравнять текст в ячейках, столбцах, строках StringGrid?
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State)
{
UINT uFormat = DT_LEFT | DT_VCENTER /*| DT_WORDBREAK*/ ;
//по умолчанию влево
switch (ACol)
{ case 1: uFormat = DT_CENTER | DT_VCENTER ;//по центру
break;
case 2:
case 4: uFormat = DT_RIGHT | DT_VCENTER ;//вправо
break;
}
StringGrid1->Canvas->FillRect(Rect);
DrawText(StringGrid1->Canvas->Handle, // handle to device context
StringGrid1->Cells[ACol][ARow].c_str(), // pointer to string to draw
StringGrid1->Cells[ACol][ARow].Length(), // string length, in characters
&Rect, // pointer to structure with formatting dimensions
uFormat // text-drawing flags
);
}
Как при запуске программы узнать путь к exe файлу?
Вариант 1.
String Path = ExtractFilePath(ParamStr(0));
Вариант 2.
AnsiString Path; Path = ExtractFilePath(Application->ExeName);
Как убрать программу из TaskBarа?
#pragma hdrstop
void StatusOnTaskBar(HWND hwnd,int status)
{
HRESULT hrc,hr;
ITaskbarList *pITaskbarList;
CoInitialize(NULL);
hrc = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList, (void**)&pITaskbarList);
if(hrc !=S_OK)
{MessageBox(NULL,"NoCreate","ITaskbarList",MB_OK);return;}
hr=pITaskbarList->HrInit();
if(hr ==NOERROR)
{
switch(status)
{ case 0: pITaskbarList->DeleteTab(hwnd); break;
case 1: pITaskbarList->AddTab(hwnd); break;
case 2: pITaskbarList->ActivateTab(hwnd); break;
case 3: pITaskbarList->SetActiveAlt(hwnd); break;
}
}
pITaskbarList->Release();
CoUninitialize();
}
//main.cpp
//---------------------------------------------------------------------------
#define NO_WIN32_LEAN_AND_MEAN
#include
#pragma hdrstop
#include "TastTestMain.h"
#include "TaskStatus.cpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{ }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ StatusOnTaskBar(Application->Handle,true); }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender) { StatusOnTaskBar(Application->Handle,false); }
//---------------------------------------------------------------------------
Как сделать втопленную кнопку без дополнительных компонентов как через Windows API (свойство WS_BORDER) ? Данный код делает все кнопки класса TButton на текущей форме втопленными. Код: DoubleBuffered = true; for (int i=0; i < ControlCount;i++) { if (AnsiString(Controls[i]->ClassName())=="TButton"){ Controls[i]->ControlStyle << csFramed; } } Repaint();
Как програмно прокрутить окно Memo на последнюю строку?
PHP код: Memo1->Perform(EM_LINESCROLL,0,Memo1->Lines->Count);
Как создать Edit для ввода IP адреса, как в свойствах протокола TCP/IP ?
INITCOMMONCONTROLSEX CommCtrl; CommCtrl.dwSize=sizeof(CommCtrl); CommCtrl.dwICC=ICC_INTERNET_CLASSES; if(::InitCommonControlsEx(&CommCtrl))
{ HWND hWndIP=::CreateWindow("SysIPAddress32","IPAddr", WS_CHILD | WS_TABSTOP | WS_GROUP,10,72,130,24,Handle,0,0,0); if (hWndIP) ::ShowWindow(hWndIP, SW_SHOW); }
Как програмно выровнять колонки у ListView (vsReport) ?
SendMessage(ListView1->Handle,LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE_USEHEADER);
Как добавить горизонтальный ScrollBar в ListBox / CheckListBox ?
int Width, MaxWidth=0; for (int i=0;i < ListBox1->Items->Count;i++){ Width = ListBox1->Canvas->TextWidth(ListBox1->Items->Strings[i]+"x"); if (MaxWidth < Width) MaxWidth = Width; } SendMessage(ListBox1->Handle, LB_SETHORIZONTALEXTENT, MaxWidth, 0);
Рекомендую Вам также почитать:
Загрузить, скачать Программирование, С++Builder всякие полезности бесплатно.
Скачать С++Builder всякие полезности бесплатно
С++Builder всякие полезности бесплатно и без регистрации. При копировании материала указывайте источник
С++Builder всякие полезности download free
|