CIS Inc. Ltd.

Sign by Dealighted - Coupons & Discount Shopping

Домашняя Обратная связь Поиск

Секреты
Вверх

 

[В стадии разработки]

Домашняя
Секреты
Ловушка
Перехват CD
Формы
Нонсенс
Hide
Alias

 

 
www.yandex.ru

Не жадничай!
ЯндексЯндекс. ДеньгиХочу такую же кнопку

Праздники славян

бесплатная музыка mp3

Яндекс цитирования

 


Components and tools for developers

PoleSoft Technologies Group

DIGITLAND.RU Портал программирования, цифровых технологий и электроники

Шрифт

Locations of visitors to this page

free counters

Секреты для программистов на Borland C++ Builder 6

4 августа 2004  

Руссификация сообщений об ошибках

    Для определения расширенного кода ошибки используется функция WinAPI GetLastError(), объявленная в файле winbase.h следующим образом: DWORD GetLastError(VOID). Для расшифровки кода ошибки воспользуйтесь следующим фрагментом кода:

LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                        FORMAT_MESSAGE_FROM_SYSTEM,
                        NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL,
                        SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL);
MessageBox(NULL, (LPTSTR)lpMsgBuf, "
Операция вызвавшая ошибку",
                    MB_OK | MB_ICONINFORMATION );
LocalFree(lpMsgBuf);

Закрываем ShowMessage

    Часто для вывода сообщений используется функция ShowMessage(const AnsiString Msg), которая выводит модальное окно с сообщением. Существует способ автоматического (программного) закрытия этого окна. Создайте новый проект и поместите на форму со стандартной палитры компонентов следующие компоненты: Edit, Label и Button, а с системной палитры – компонент Timer. Объявите две глобальные переменные:
HWND ShowMessageDlgHWND = NULL;
HWND ShowMessageDlgButtonHWND = NULL;
и функцию обратного вызова:
BOOL CALLBACK EnumShowMessageDlgProc(HWND hwnd, LPARAM lParam)
{
    ShowMessageDlgButtonHWND = hwnd;
    return true;
}
в общем разделе класса формы объявите переменную:
int sec.
    Очистите свойство Text у компонента Edit и добавьте следующий код в обработчик события OnKeyPress:
Set <char, '0', '9'> Dig;
Dig << '0' << '1' << '2' << '3' << '4' << '5' << '6' << '7' << '8' << '9';
if(!Dig.Contains(Key))
{
    Key = 0;
    MessageBeep(MB_ICONASTERISK);
}.
Данный код позволяет вводить только числа.
    В обработчик события OnTimer компонента Timer добавьте код:
Label1->Caption = IntToStr(sec);
if(sec == 0)
{
    ShowMessageDlgHWND = FindWindow("TMessageForm", "Project1");
    ShowMessageDlgButtonHWND = NULL;
    EnumChildWindows(ShowMessageDlgHWND,
                            (WNDENUMPROC)EnumShowMessageDlgProc, NULL);
    PostMessage(ShowMessageDlgButtonHWND, BM_CLICK, 0, 0);
    Timer1->Enabled = false;
}
else
{
    sec--;
}.
В обработчик события OnClick компонента Button добавьте код:
if(Edit1->Text == "")
    return;
    sec = StrToInt(Edit1->Text);
    Timer1->Enabled = true;
    String tmp = "Переместите это сообщение.\n\tЧерез " +
    IntToStr(sec) + " сек.\nзакроется автоматически!";
    ShowMessage(tmp);
 

Полностью исходный код модуля Unit1.cpp приведен в листинге 1.
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HWND ShowMessageDlgHWND = NULL;
HWND ShowMessageDlgButtonHWND = NULL;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
BOOL CALLBACK EnumShowMessageDlgProc(HWND hwnd, LPARAM lParam)
{
    ShowMessageDlgButtonHWND = hwnd;
    return true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
    Set <char, '0', '9'> Dig;
    Dig << '0' << '1' << '2' << '3' << '4' << '5' << '6' << '7' << '8' << '9';
    if(!Dig.Contains(Key))
    {
        Key = 0;
        MessageBeep(MB_ICONASTERISK);
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Label1->Caption = IntToStr(sec);
    if(sec == 0)
    {
        ShowMessageDlgHWND = FindWindow("TMessageForm", "Project1");
        ShowMessageDlgButtonHWND = NULL;
        EnumChildWindows(ShowMessageDlgHWND,
                        (WNDENUMPROC)EnumShowMessageDlgProc, NULL);
        PostMessage(ShowMessageDlgButtonHWND, BM_CLICK, 0, 0);
        Timer1->Enabled = false;
    }
    else
    {
        sec--;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if(Edit1->Text == "")
        return;
    sec = StrToInt(Edit1->Text);
    Timer1->Enabled = true;
    String tmp = "Переместите это сообщение.\n\tЧерез " +
            IntToStr(sec) + " сек.\nзакроется автоматически!";
    ShowMessage(tmp);
}
 

Листинг 1.

Скачать

MD5    0D0D23F29EE415C235729AEA72B4234F

Цветной ListBox

    Создайте новый проект и разместите на форме следующие компоненты: ListBox, две кнопки Button и два RadioButton (рисунок 1).

Форма в процессе проектирования

Работающее приложение

Рисунок 1.

    Создайте небольшой текстовый файл. Он понадобится нам для тестирования приложения, и будет загружаться в ListBox в обработчике события OnCreate формы приложения следующей строкой кода: ListBox1->Items->LoadFromFile("test.txt");.
    В общем разделе класса формы объявите функцию перерисовки ListBox:
    void __fastcall RepaintListBox();
    Функция перерисовки содержит одну строку кода, ListBox1->Repaint(), которая вызывает стандартный метод компонента ListBox.
    Добавьте следующий код в обработчик события OnDrawItem компонента ListBox:
TCanvas *pCanvas = (dynamic_cast<TListBox*>(Control))->Canvas;
if(RadioButton1->Checked)
{
    if(Index % 2 == 0)
        pCanvas->Brush->Color = clAqua;
    else
        pCanvas->Brush->Color = clFuchsia;
}
if(RadioButton2->Checked)
{
    div_t x = div(Index, 3);
    switch(x.rem)
    {
        case 0: pCanvas->Brush->Color = clWhite;
        pCanvas->Font->Color = clRed;
        break;

        case 1: pCanvas->Brush->Color = clBlue;
        pCanvas->Font->Color = clWhite;
        break;

        case 2: pCanvas->Brush->Color = clRed;
        pCanvas->Font->Color = clBlue;
        break;
    }
}
pCanvas->TextOut(Rect.Left, Rect.Top, (dynamic_cast<TListBox*>(Control))->Items->Strings[Index]);.

В обработчик OnClick компонента Button1 добавьте код:
    ListBox1->Color = TColor(0x008DC75A);
    ListBox1->Style = lbOwnerDrawFixed;,
а компонента Button2:
    ListBox1->Color = clWindow;
    ListBox1->Style = lbStandard;.
В обработчик OnClick компонентов RadioButton вставьте строку кода:
RepaintListBox();.
    Запустите проект на выполнение. Поэкспериментируйте со свойством Style компонента ListBox, в первоначальном виде оно установлено в lbStandard. Полностью исходный код модуля Unit1.cpp приведен в листинге 2.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ListBox1->Items->LoadFromFile("test.txt");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
{
    TCanvas *pCanvas = (dynamic_cast<TListBox*>(Control))->Canvas;
    if(RadioButton1->Checked)
    {
    if(Index % 2 == 0)
        pCanvas->Brush->Color = clAqua;
    else
    pCanvas->Brush->Color = clFuchsia;
    }
    if(RadioButton2->Checked)
    {
        div_t x = div(Index, 3);
        switch(x.rem)
        {
            case 0: pCanvas->Brush->Color = clWhite;
                        pCanvas->Font->Color = clRed;
                break;

            case 1: pCanvas->Brush->Color = clBlue;
                        pCanvas->Font->Color = clWhite;
                break;

            case 2: pCanvas->Brush->Color = clRed;
                        pCanvas->Font->Color = clBlue;
            break;
        }
    }
    pCanvas->TextOut(Rect.Left, Rect.Top,
    (dynamic_cast<TListBox*>(Control))->Items->Strings[Index]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RepaintListBox()
{
    ListBox1->Repaint();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ListBox1->Color = TColor(0x008DC75A);
    ListBox1->Style = lbOwnerDrawFixed;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    ListBox1->Color = clWindow;
    ListBox1->Style = lbStandard;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
    RepaintListBox();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
    RepaintListBox();
}
 

Листинг 2

Скачать

MD5    B00DA3AB83CEC5F7BD2AE3F6421B0A05

This site is a member of WebRing.
To browse visit Here.


 

Отправить сообщение для: Web-мастера с вопросами и замечаниями об этом веб-узле.
© 2010 Serg Kappa CIS Inc. Ltd. ©1990 - 2010
Дата изменения: 21.10.2010

Одноклассники.ru - Поиск одноклассников, однокурсников, бывших выпускников и старых друзей

 

Сайт управляется системой uCoz