Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 05.07.2009, 11:25   #11
SalasAndriy
Форумчанин Подтвердите свой е-майл
 
Аватар для SalasAndriy
 
Регистрация: 01.11.2007
Сообщений: 157
По умолчанию

1) В данном случае оператор return не возвращает ничего, а просто завершает работу функции и выходит с нее... Это автор зделал для того, если условие выполнилось, то нужно немедленно завершить работу функции и вернуть пустоту, чтобы последующий код функции не выполнялся.

2)
Код:
if (Key==DecimalSeparator) Проверка... Если нажана клавиша = DecimalSeparator, то
{
        // Здесь проверяем есть ли разделитель в поле Edit1->Text
        if ((Edit1->Text).Pos(DecimalSeparator)!=0)
        Key=0;//Если да, то нужно обнулить ввод. Разделитель уже введён
        return; // Выходим из функции
}
3) Когда Key=0, то в текстовое поле Edit1 небудет введено ничего... Так как передаётся код 0, но если бы написали Key='0' то конечно в тексовом поле появился бы символ '0'...
Key - это ссылка на переменную
SalasAndriy вне форума
Старый 05.07.2009, 18:18   #12
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

прикиньте, я ща написал void __fastcall TForm1::la(TObject *Sender, char &Key)
{
if ((Key='.')||(Key=','))
Key=DecimalSeparator;
return;
} и теперь у меня кроме точек ничего не вводится
почему??????????
эта фуункция должна была обработать десятичный разделитель. то есть, если я ввожу "." вместо ",", то у меня точка автоматически меняется на ",". ничего более. теперь же у меня всё что я ввожу меняется на запятые
Dimarik вне форума
Старый 05.07.2009, 18:43   #13
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

скажите, почему когда у меня так написано, всё нормально работает
void __fastcall TForm1::la(TObject *Sender, char &Key)
{
if ((Key>='0')||(Key<=9))
return;
if ((Key='.')||(Key=','))
{
Key=DecimalSeparator;
return;
};
if (Key=VK_BACK)
return;
а когда так, то вообще ничего не вводится
void __fastcall TForm1::la(TObject *Sender, char &Key)
{
if ((Key>='0')||(Key<=9))
return;
if ((Key='.')||(Key=','))
{
Key=DecimalSeparator;
return;
};
if (Key=VK_BACK)
return;
всего лишь навсего эти коды отличаются песторасположением команды if (Key=VK_BACK)
return;
Dimarik вне форума
Старый 05.07.2009, 19:53   #14
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Код:
void __fastcall TForm1::la(TObject *Sender, char &Key)
{
if ((Key>='0')&&(Key<='9'))
return;
if ((Key='.')||(Key=','))
{
Key=DecimalSeparator;
if((((TEdit*)Sender)->Text).Pos(DecimalSeparator)!=0)
        Key=0; // разделитель уже введён
return;
}
if (Key=VK_BACK)
return;
if (Key=VK_RETURN)
Button1->SetFocus();
Key=0;
}
вот код части программы. кое-как, методом проб и ошибок, так и непоняв, почему у меня неправильно работал код, приведённый выше (кстати, подскажите, пожалуйста), я кое-как заставил более-менее нормально работать. но! возникли 2 глюка!
1.когда я писал if (Key=VK_RETURN)
Button1->SetFocus();
я хотел, чтобы после нажатия ENTER`a стала активной кнопка Button1, этого не произошло
2. я хотел сделать так, чтобы в поле вводились только цифры и 1 разделитель, для этого в самом конце написал (Key=0), хоть я окончательно и не понял как работает код. как я понял, вводу подлежат ТОЛЬКО те символы, которые прописаны. так работает фукция KeyPress. так?
а вот ссылка на файл с программой
http://slil.ru/27813384
Dimarik вне форума
Старый 06.07.2009, 13:37   #15
SalasAndriy
Форумчанин Подтвердите свой е-майл
 
Аватар для SalasAndriy
 
Регистрация: 01.11.2007
Сообщений: 157
По умолчанию

Знак "=" ставится там где нужно присвоить переменной значение, а знак "==" ставится там где нужно проверить на равенство! Смотри не путай "=" и "==" это разные вещи...

Код:
void __fastcall TForm1::la(TObject *Sender, char &Key)
{
if ((Key=='.')||(Key==','))
Key=DecimalSeparator;
return; /* это необьязательно... функция всеравно завершит свою работу... и всеравно никакого значения не возвращает... обычно return используют тогда когда надо выйти из функции прервав её далнейшее выполнение и возможно вернуть какое-то значение!*/
}
Попробуй повыправляй в структурах где проводиш сравнение знак "=" на "=="!
Используй теги CODE, а то неудобно читать...
SalasAndriy вне форума
Старый 06.07.2009, 15:36   #16
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

хорошо. вот ещё вопрос. у меня возникла ошибка
[Linker Error] Unresolved external '__fastcall TForm1::Edit1Change(System::TObject *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\C+ + BUILDER\САМОУЧИТЕЛЬ\EDIT (СТР.75)\UNIT1.OBJ
[Linker Error] Unresolved external '__fastcall TForm1::Edit2Change(System::TObject *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\C+ + BUILDER\САМОУЧИТЕЛЬ\EDIT (СТР.75)\UNIT1.OBJ
погуглил, нашёл, что такая ошибка возникает в том случает, если есть прототипы функций, а самих реализаций этих функций нет. вот текст:
Код:
//---------------------------------------------------------------------------

#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::Edit1KeyPress(TObject *Sender, char &Key)
{
        if (Key==VK_RETURN)//клавиша <Enter>
        {
                Edit2->SetFocus();// переместить
        }

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
        if (isdigit(Key))//цифра
        {
                return;
        }
        switch (Key)
        {
        case '-':
                //минус только перед первым символом
                if (Edit2->SelStart!=0)
                        Key=0;
                break;
        case VK_RETURN:
                Edit3->SetFocus();
                break;
        case VK_BACK:
                break;
                default:
                        Key=0;
        }


}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit3KeyPress(TObject *Sender, char &Key)
{
        if (isdigit(Key))//цифра
        {
                return;
        }
        if ((Key=='.')||(Key==','))
        {
        Key=DecimalSeparator;
                if (Edit3->Text.Pos(DecimalSeparator)!=0)
                {
                Key=0;
                };
        return;
        }
                switch (Key)
                {
                        case '-':
                                if (Edit3->SelStart!=0)
                                        Key=0;
                                break;

                        case VK_BACK:
                                break;
                        default: Key=0;
                }



}
//---------------------------------------------------------------------------
а вот ссылка на всю программу
http://slil.ru/27815572
Dimarik вне форума
Старый 06.07.2009, 16:01   #17
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

сам отвечу. надо было просто дописать
void __fastcall TForm1::Edit1Change(TObject *Sender)
{

}
//---------------------------------------------------------------------------
и так ещё для Edit 2.
Dimarik вне форума
Старый 07.07.2009, 19:50   #18
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Добрый вечер! сейчас пишу программу, которая должна показывать изображения (точнее разбираю по книжке).
там написано,что в поле ListBox1 должны быть имена файлов, адля этого в заголовочном файле необходимо прописать
__fastcall int FillListBox() // Заполняет список компонента ListBox()
а теперь у меня вопрос.
FillListBox() - прописанная в библиотеке функция?
Dimarik вне форума
Старый 07.07.2009, 20:01   #19
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

.. я в первый раз сталкиваюсь с созданием классов в Билдере. в консольке было, а вот в билдере - в первый раз. и в первый раз лезу в заголовочный файл. раньше щёлкал на нужную кнопку или поле и прописывал те действия, которые она должна выполнять...
можете немножко разъяснить, в целом, когда надо лезть в классы
Dimarik вне форума
Старый 09.07.2009, 18:20   #20
motya770
 
Регистрация: 08.01.2009
Сообщений: 5
По умолчанию

1) функция
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key) объявленна как void, она не должна возвращать значение, return используется чтобы её закончить
2) проверяет есть ли уже в Edit знак разделителя (. или ,)
3)да, кеу, по -моему адрес и когда =0 -это означает, что эта переменная ничего не содержит, поэтому ничего и не отбразит (int *p = 0 ), а ='0' - уже выведет 0
motya770 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
из С++ в С++Builder 6.0 densan Помощь студентам 3 30.05.2009 00:18
C++ Builder!!! kykysya C++ Builder 4 08.02.2009 03:33
Builder 6.0 prankish_cat Общие вопросы C/C++ 0 01.02.2009 16:45
БД C++ Builder 6 ZiKx C++ Builder 1 07.08.2008 20:43
С ++ Builder PsyTech C++ Builder 4 19.10.2007 08:25