C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Интерфейс / Borland C++ FAQ / Borland C++

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

Автор: 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);