Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

Интерфейс :: Выполнение действий при наведении курсора на компонент

Автор: OlegGG
Исходная ссылка: - - -

Чтобы выполнить какие-либо действия при наведении курсора на визуальный компонент, надо определить обработчик события OnMouseEnter этого компонента.
Следующий код меняет цвет текста элемента Label1 на синий при наведении на него мышиного курсора:
void __fastcall TForm1::OnLabel1MouseEnter(TObject * Sender) {
 
    Label1->Font->Color = clBlue;   
 
 }
А чтобы выполнить некоторые действия когда курсор покидает элемент управления, надо определить обработчик OnMouseLeave
Следующий код меняет цвет текста элемента Label1 на черный в тот момент, когда мышиный курсор покидает его:
void __fastcall TForm1::OnLabel1MouseEnter(TObject * Sender) {
 
    Label1->Font->Color = clBlack;
 
 }


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

Автор: KAV
Исходная ссылка: - - -

При открытии формы (OnCreate):
TRect r1,r2;
 
 r1 = Rect(Left+Width/2,Top+Height/2,Left+Width/2,Top+Height/2);
 
 r2 = BoundsRect;
 
 DrawAnimatedRects(Handle,IDANI_CAPTION,&r1,&r2);
 
 
Форма будет как будто развертываться из середины.
А чтобы она при закрытии свертывалась в свою середину, то пишем в OnClose:
TRect r1,r2;
 
 r1 = Rect(Left+Width/2,Top+Height/2,Left+Width/2,Top+Height/2);
 
 r2 = BoundsRect;
 
 DrawAnimatedRects(Handle,IDANI_CAPTION,&r2,&r1);  // меняется только последовательность последних параметров
 
 


Как сделать невидимой главную форму?

Автор: OlegGG
Исходная ссылка: - - -

В WinMain, сразу после "Application->Initialize();", пишем:
Application->ShowMainForm = false;
 
 


Как сделать, чтобы в TEdit можно было вводить только числа?

Автор: OlegGG
Исходная ссылка: - - -

Просто поместите этот код в OnKeyPress любого TEdit'а:

if ((Key >= '0') && (Key <= '9')) {}  // цифры
 
 else if (Key == 8) {}  // <-
 
 else if ((Key == '.') || (Key == ',')) // запятая
 
         {
 
         if (((TEdit*)Sender)->Text.Pos(DecimalSeparator)!=0) // если запятая уже есть
 
                 Key = 0;
 
         else // если ещё нет
 
                 Key = DecimalSeparator;
 
         }
 
 else Key = 0; // не цифра
 
 
P.S. DecimalSeparator - глобальная переменная - разделитель целой и дробной части.

Как прокручивать TMemo или TRichEdit программно?

Автор: trainer
Исходная ссылка: - - -

На строку вниз:
SendMessage(Memo1->Handle, WM_VSCROLL, MAKEWORD(SB_LINEDOWN, 0), 0);
 
 
На строку вверх:
SendMessage(Memo1->Handle, WM_VSCROLL, MAKEWORD(SB_LINEUP, 0), 0);
 
 


Как "подмигнуть" моей иконкой в Панели задач(TaskBar)?

Автор: OlegGG
Исходная ссылка: - - -

Один раз так:
FlashWindow(Application->Handle,true);
 
 
А если необходимо "мигать" постоянно, то расположить на форме таймер(TTimer), и в его обработчике события OnTimer написать:
FlashWindow(Application->Handle,false);
 
 FlashWindow(Application->Handle,true);
 
 


Как сделать на кнопке многострочную надпись?

Автор: KAV
Исходная ссылка: - - -

SetWindowLong(Button1->Handle,GWL_STYLE,GetWindowLong(Button1->Handle,GWL_STYLE)|BS_MULTILINE);
 
 Button1->Caption="a\nlot\nof\nstrings";
 
 


Как сменить цвет прогрессбара?

Автор: KAV
Исходная ссылка: - - -

Красный:
PostMessage(ProgressBar1->Handle,0x0409,0,clRed);
 
 
Чтобы сделать его другим цветом, надо, соответственно, вместо clRed написать что-нибудь другое ;)

Как сделать, чтобы по нажатию Enter активизировался следующий компонент (как и по таб)?

Автор: OlegGG
Исходная ссылка: - - -

Ставим свойство формы KeyPreview в true.
А в OnKeyUp формы пишем:
if (Key==VK_RETURN)
 
         {
 
         Form1->Perform(WM_NEXTDLGCTL, 0, 0);
 
         }
 
 


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

Автор: OlegGG
Исходная ссылка: - - -

В 9x эта штука не предусмотрена. Там это можно сделать "ручками", но при этом программа будет "жрать" очень много ресурсов. Но в линейке NT, начиная с 2000, это можно сделать.

Пример (окно будет плавно проявляться):
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);
 
 for (int x = 0;x<255;x+=5)
 
         {
 
         SetLayeredWindowAttributes(Handle, 0, x, LWA_ALPHA);
 
         Application->ProcessMessages();
 
         Sleep(1);
 
         }
 
 SetLayeredWindowAttributes(Handle, 0, 255, LWA_ALPHA);
 
 
Начиная с C++Builder 6, в свойствах формы появились AlphaBlend и AlphaBlendValue.
Здесь всё проще: ставим AlphaBlend в true, а потом балуемся со значением AlphaBlendValue.

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

Автор: OlegGG
Исходная ссылка: - - -

ShowWindow(Application->Handle,SW_HIDE);
 
 


Как заставить обновиться все окна?

Автор: OlegGG
Исходная ссылка: - - -

InvalidateRect(0,NULL,true);
 
 


Как сделать Form2 отдельным окном, чтобы оно имело свою кнопку на Панели Задач?

Автор: KAV
Исходная ссылка: - - -

Надо подарить ему стиль WS_EX_APPWINDOW:
SetWindowLong(Form2->Handle,GWL_EXSTYLE,GetWindowLong(Form2->Handle,GWL_EXSTYLE)|WS_EX_APPWINDOW);
 
 


Можно ли отключить кнопку закрытия моего окна?

Автор: OlegGG
Исходная ссылка: - - -

HWND hWnd = Form1->Handle; // здесь Handle нужного окна
 
 HMENU hMenu = GetSystemMenu(hWnd, false);
 
 if (hMenu)
 
         {
 
         EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED);
 
         }
 
 

Если необходимо удалить пункт меню "Закрыть", то вместо "EnableMenuItem(hMenu........" пишем:
DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);
 
 
А если захотелось поиздеваться над пользователем, то пишем:
EnableMenuItem(hMenu, SC_CLOSE, MF_DISABLED);
 
 
Тогда кнопка "X" будет "выключена", зато пункт меню "Закрыть" будет "включен", хотя работать он не будет :)

Как рисовать на рабочем столе и других окнах?

Автор: OlegGG
Исходная ссылка: - - -

Пример:
TCanvas * DeskTop = new TCanvas;
 
 if (DeskTop)
 
         {
 
         DeskTop->Handle = GetDC(HWND_DESKTOP);
 
         DeskTop->Brush->Style = bsClear;
 
         DeskTop->Font->Size = 36;
 
         DeskTop->Font->Style = TFontStyles() << fsBold;
 
         DeskTop->Font->Name = "Lucida Console";
 
 
 
         int count = DeskTop->Font->Size*3;
 
         int Xit_st = -1;
 
         int Yit_st = -1;
 
         int X = 50;
 
         int Y = 50;
 
         for (int y=count;y>0;y--)
 
                 {
 
                 int cv = 255-255/y;
 
                 DeskTop->Font->Color = (TColor)RGB(cv,cv,cv);
 
                 DeskTop->TextOut(X+Xit_st*y,Y+Yit_st*y,"www.sources.ru");
 
                 }
 
         ReleaseDC(0, DeskTop->Handle);
 
         }
 
 delete DeskTop;
 
 


Как сделать, чтобы форму нельзя было перемещать?

Автор: KAV
Исходная ссылка: - - -

Ловим WM_NCHITTEST и внутри функции-обработчика этого сообщения пишем:
if(Message.Result == HTCAPTION) Message.Result = HTNOWHERE;
 
 


Как таскать форму не за заголовок?

Автор: OlegGG
Исходная ссылка: - - -

В событие OnMouseDown формы и компонентов, которыми мы собираемся таскать, помещаем код:
if(Button == mbLeft)
 
         {
 
         long SC_DRAGMOVE = 0xF012;
 
         ReleaseCapture();
 
         SendMessage(Form1->Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
 
         }
 
 


Как во время выполнения программы таскать компонент как в дизайне?

Автор: KAV
Исходная ссылка: - - -

В OnMouseDown того компонента:
ReleaseCapture();  // это метод формы
 
 Panel1->Perform(WM_SYSCOMMAND,0xF012,0);  // к примеру, таскаем Panel1
 
 


Как ограничить перемещение курсора какой-либо областью?

Автор: OlegGG
Исходная ссылка: - - -

Ограничить передвижение курсора можно с помощью функции ClipCursor.
Например, "зажимаем" курсор в прямоугольнике:
RECT r;
 
 r.left = 10;
 
 r.top = 10;
 
 r.right = 20;
 
 r.bottom = 20;
 
 ClipCursor(&r);
 
 
Снять ограничения на передвижение курсора можно, передав функции NULL:
ClipCursor(NULL);
 
 



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS