Страница 8 из 13
Закрашивание отдельной ячейки в StringGrid Для закрашивания отдельной ячейки в StringGrid напишите следующий обработчик события OnDrawCell StringGrid (Form1 - форма, на которой размещен StringGrid1, StringGrid1 - экземпляр TStringGrid, ячейка которого закрашивается):
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { if(ACol == 2 && ARow == 2) // определяем конкретную ячейку { StringGrid1->Canvas->Brush->Color = clRed; StringGrid1->Canvas->FillRect(Rect); } }
Сколько мониторов установлено в системе? Для того, чтобы узнать, сколько мониторов установлено в системе, используйте следующий код:
int MonitorCount = Screen->MonitorCount;
Прокрутка ListBox на одну строку вверх Чтобы программно прокрутить содержимое списка (TListBox) на одну строку вверх, напишите следующий код:
SendMessage(ListBox1->Handle, WM_VSCROLL, SB_LINEUP, 0);
где ListBox1 - имя вашего списка.
Перемещение формы мышью не за заголовок Чтобы перемещать форму мышью не за заголовок, напишите следующий обработчик события 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); } }
Получение списка компьютеров в сети BOOL EnumHandler( HWND hWnd, DWORD dwLevel, LPNETRESOURCE lpNet ) { BOOL ret=TRUE; DWORD dwStatus, dwSize, dwEntries, i, j; LPSTR lpStr=NULL; LPNETRESOURCE lpNewNet=NULL; HANDLE hEnum=NULL;
dwStatus = WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpNet, &hEnum ); if( dwStatus != NO_ERROR ){ ret=FALSE; goto mend; } dwEntries = 1000; dwSize = sizeof(NETRESOURCE) * dwEntries; lpNewNet=(LPNETRESOURCE)new char[dwSize]; if(!lpNewNet){ ret=FALSE; goto mend; } dwStatus = WNetEnumResource( hEnum, &dwEntries, (LPVOID)lpNewNet, &dwSize );
if( dwStatus != NO_ERROR ) { ret=FALSE; goto mend; } WNetCloseEnum( hEnum ); hEnum=NULL;
lpStr=new char[512]; if(!lpStr){ ret=FALSE; goto mend; } for( i = 0; i < dwEntries; i++ ) { if( lpNewNet[ i ].dwDisplayType==RESOURCEDISPLAYTYPE_NETWORK) { strcpy( lpStr, lpNewNet[ i ].lpProvider ); }
if( lpNewNet[ i ].lpRemoteName ) { if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_DOMAIN ) strcpy( lpStr, "Domain..." );
if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_GENERIC ) strcpy( lpStr, "Generic.." );
if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_SERVER ) strcpy( lpStr, "Server..." );
if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_SHARE ) strcpy( lpStr, "Share...." );
for( j = 0; j < dwLevel; j++ ) strcat( lpStr, "......" ); strcat( lpStr, lpNewNet[ i ].lpRemoteName ); //Добавим IP адрес к концу строки // if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_SERVER ) // if(!GetIP(&lpNewNet[ i ].lpRemoteName[2],lpStr))continue; } SendMessage( hWnd, LB_ADDSTRING, 0,(LPARAM)lpStr ); UpdateWindow(hWnd); // Уровень детализации вы сможете установить здесь if(dwLevel < 2) //0=Сеть,1=Domain,2=Host,3=Resource EnumHandler( hWnd, dwLevel + 1, lpNewNet + i ); } mend: if(hEnum)WNetCloseEnum( hEnum ); if(lpStr)delete lpStr; if(lpNewNet)delete lpNewNet; return ret; } //------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { HCURSOR hOldCursor; // ListBox1->Clear(); SendMessage(Form1->ListBox1->Handle , LB_RESETCONTENT, 0, 0 ); UpdateWindow(Form1->ListBox1->Handle); hOldCursor = ::SetCursor( LoadCursor( NULL, IDC_WAIT ) ); EnumHandler( Form1->ListBox1->Handle, 0, NULL ); ::SetCursor( hOldCursor ); }
|