Здравствуйте.у меня возникла вот такая задачка.делаю в билдере С++.
мы нажали на кнопку на одной форме при нажатии она дает переменной У значение 1 ,затем она открывает другую форму , в которой выводит в строке значение которое приобрела переменная У.
Как нужно объявиь переменную чтобы он она и в одной и вдругой форме работала ,и чтобы форма 2 знала какое значение заадано формой 1 переменной У??
[Ответ]
xxx-men 09:47 17.04.2008
Сообщение от lermontov:
Как нужно объявиь переменную чтобы он она и в одной и вдругой форме работала
а) глобально
б) ищи в книжках что такое "указатель" или "ссылка"
[Ответ]
Part!zan 20:37 17.04.2008
The_God, потому что си не позволяет так переменные объявлять. Вот если бы ты ее сразу после { написал, то да, так можно. Но и видно ее будет только внутри этих скобок.
[Ответ]
lermontov 09:20 18.04.2008
Сообщение от xxx-men:
а) глобально
б) ищи в книжках что такое "указатель" или "ссылка"
Я понимаю что надо глобально ,но я уже эти переменные так глобально сделал ,что глобльнее некуда помоему ,сразу после #include и все равно их вторая форма невидит ,с указателями таже ерунда,а вот со ссылками еще незнаю не пробовал (но и неособенно хочетси лесть в эти ссылки"Ибо простота залог успеха!!").Вопрос остается открытым !! так какже обозвать переменные чтобы они во всех формах проекта могли использоватси ??
[Ответ]
вот например объявил переменные r и t дальше идет программа для различных кнопок на форме 1 , и там есть кнопка которая придает значение переменной r=2 и открывает форму 4,а вот в форме 4 там есть своя программа которая должна увидеть что переменной r присвоено значение 2 и выполнить определенные действия.
попробуй так:
если TForm4 класс, то добавь (после public: ) ему параметр int* pr;
это будет указатель на переменную r.
код вызова измени так:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
r=2; Form4->pr = &r;//это надо добавить
Form4->ShowModal();
}
Сообщение от lermontov:
а вот в форме 4 там есть своя программа которая...
в этой програмке нужно использовать *pr (обращение по указателю) , он будет равен 2
[Ответ]
Part!zan 18:31 18.04.2008
lermontov, непонятно, где же все-таки описаны глобальные переменные и где они будут использоваться. Это разные файлы? Если да, то нужно использовать extern. xxx-men, присваивать значения переменным класса таким образом - дурной тон.
[Ответ]
M0l0t 22:08 20.04.2008
Сообщение от Part!zan:
непонятно, где же все-таки описаны глобальные переменные и где они будут использоваться. Это разные файлы? Если да, то нужно использовать extern
вот-вот, видимо надо в *.h файле добавить строку extern r, t;
и неужели нельзя передавать значение переменной как аргумент функции? зачем делать глобальную переменную?
[Ответ]
xxx-men 11:08 21.04.2008
чуть чуть по флудю
Сообщение от Part!zan:
xxx-men, присваивать значения переменным класса таким образом - дурной тон.
согласен, но....
допустим:
class x
{
................
.....
...............
private:
int a;
public:
int getA(){return a;};
void setA(int n){a=n;};
void plusA(int n){a+=n;};
};
или
class x {
........
....
.........
public: int a; };
xxx-men, Но лучше так не делать. Особенно в больших проектах. Когда эта наглядность выйдет за пределы возможных значений искать проблему придется долго.
[Ответ]
Part!zan 18:39 21.04.2008
xxx-men, твой пример совершенно мимо кассы. В этом случае надо было просто использовать перегрузку операторов - получилось бы нагляднее некуда.
[Ответ]
Akad 18:57 21.04.2008
Part!zan, Вообще GetA/SetA нагляднее и во всяких цивилизованных языках типа явы только так и рекомендуется писать.
[Ответ]
The_God 20:02 21.04.2008
Сообщение от xxx-men:
присваивать значения переменным класса таким образом
если хочеш рисковать то пожалуйста, если развить тему хардкорного программинга то нужно узнать расположение таблицы виртуальных методов и порядок следования закрытых полей класса, то тогда можно будет напрямую, прям по указателю и этому вычисленному смещению значения даже приватным полям класса присваивать... но это как прямой массаж сердца на тратуаре
ps
Сообщение от :
Прямой массаж заключается в периодическом сдавливании сердца рукой, введенной в полость грудной клетки.
Akad, у него еще и плюсА в примере. Тут лучше перегрузку сделать...
[Ответ]
Akad 00:19 22.04.2008
Part!zan, в любом случае сведется к SetA(GetA()+n); Перегрузки хороши для математических классов. Скорее даже не классов, а структур. Всякие вектора, комплексные числа и т.д. Но речь шла изначально про "общий случай". Захочешь ты, или что еще хуже, кто-нибудь другой из команды унаследовать его, и что тогда? [Ответ]
xxx-men 15:11 22.04.2008
Part!zan, перегрузка допустим занята под другие цели...
Здравствуйте.Со строками и с работой с файлами я вроде разобрался.Оказалось все гораздо проще чем я думал.Все приходит с опытом.
есть програмка что то вроде меню переключаемое с помощью трелок в консольном преложении,и к ней надо прикрепить заголовочный файл ncurses.h ,дабы в дальнейшем объеденить это меню с программой которая использует заголовочный файла.все бы хорошо и здорово,но при добавлении данно заголовочного файла программа просто зацыкливается и начинает беспорядочно мегать меню.Я предпологаю что просто в библиотеке нкурсес есть свой оператор getch();.А какое у вас мнение???
int main()
{
int active=0;
menurepaint(active);
unsigned char a;
do
{a=getch();
if (a<=224)
{a=getch();
if ((a==72)&&(active<2)) {active++;}
if ((a==80)&&(active>0)) {active--;}
}
menurepaint(active);}
while (a!=27);
return 0;
}
[Ответ]
Part!zan 22:38 23.04.2008
Сообщение от lermontov:
какое у вас мнение???
У нас мнение, что не надо так все усложнять. Столько всего понаворочено - аж жуть. Тут тебе и стдио, и иостримс, и апишные функции...
Меню совершенно необязательно перерисовывать после любого нажатия кнопки, получать хэндл стдаута при каждом перерисовании тоже не самый лучший ход. Ну, про мелочи, типа перепутанных кнопок вверх/вниз - вообще молчу.
Сообщение от lermontov:
в библиотеке нкурсес есть свой оператор getch();.
Это достаточно легко выяснить, заглянув в ncurses.h. Да и режим отладки никто не отменял.
[Ответ]
lermontov 20:05 28.07.2008
Много времент прошло с моего последнего сообщения в этой теме , но мне снова понадо билась помощь знающих свое дело програмистов!!!!
вопросик совсем простой , но я недолго поискав ненашел его в книжках , а знание английского языка у меня хромает.Перехожу к сути.
Вопрос: в борланде , мне надо чтобы из переменной например К данные после нажатия на кнопку появились в Edit ! что то типо такого
Label4->Caption = FloatToStrF(i,ffGeneral,7,2);
но что бы вместо Label4 было Edit !
примите во внимание что мне очень стыдно задавать такой вопрос , после того как я уже пол года програмирую, и уже сделал пару простеньких курсовый работ!!!
Р.S. в свое опровдание скажу , что я освоил XTML за 4 дня, но правдо базовые знания, тоже оч интересно оказалось!! посоветуйте чем можно ешо забить мою светлую голову?
[Ответ]
Akad 20:33 28.07.2008
lermontov, Наверное тебя интересует поле Text?
[Ответ]
Сообщение от lermontov:
Много времент прошло с моего последнего сообщения в этой теме , но мне снова понадо билась помощь знающих свое дело програмистов!!!!
вопросик совсем простой , но я недолго поискав ненашел его в книжках , а знание английского языка у меня хромает.Перехожу к сути.
Вопрос: в борланде , мне надо чтобы из переменной например К данные после нажатия на кнопку появились в Edit ! что то типо такого
Label4->Caption = FloatToStrF(i,ffGeneral,7,2);
но что бы вместо Label4 было Edit !
примите во внимание что мне очень стыдно задавать такой вопрос , после того как я уже пол года програмирую, и уже сделал пару простеньких курсовый работ!!!
Р.S. в свое опровдание скажу , что я освоил XTML за 4 дня, но правдо базовые знания, тоже оч интересно оказалось!! посоветуйте чем можно ешо забить мою светлую голову?
извиняюсь за этот глупый вопрос , вот это я ступил, ну вот так всегда ненадо искать тяжелых путей, все лежит на поверхности!!!!! Извините все те у кого я отнял время !
ВОПРОС ЗАКРЫТ!
[Ответ]
lermontov 17:29 17.10.2008
Доброго времени суток,уважаемые Програмисты , я тут столкнулся вот с такой проблемкой ,имеется программа сделанная предположительно в билдере , но остался только exe файл , прокта неосталось (утерян) , а вот теперь понадобилось подредактировать эту програмку, можно ли каким нибуть образом вытянуть из этой откомпилированной готовой программы ее код?
Я попробовал просто открыть ее в билдере но кроме кракозябликов и слегка отличимых выражений ничего небыло. кто что может посоветовать по этому поводу??
[Ответ]
Kerish 17:43 17.10.2008
Сообщение от lermontov:
Доброго времени суток,уважаемые Програмисты , я тут столкнулся вот с такой проблемкой ,имеется программа сделанная предположительно в билдере , но остался только exe файл , прокта неосталось (утерян) , а вот теперь понадобилось подредактировать эту програмку, можно ли каким нибуть образом вытянуть из этой откомпилированной готовой программы ее код?
Я попробовал просто открыть ее в билдере но кроме кракозябликов и слегка отличимых выражений ничего небыло. кто что может посоветовать по этому поводу??
Единственный вариант - это вскрыть экзэшник дизассемблером. И если ты там хоть что-то понимаешь, то может даже поправленная прога заработает.
[Ответ]
lermontov 18:25 17.10.2008
просто я раньше некогда об этом не задумывался, и вот теперь сталкнулся с такой проблемой. я исходил из того что если есть компиляторы то должны быть и декомпиляторы, ну это я так тольео предположил. вообщем получается если сделал готовую программу и потом по нечайности потерял ее исходник (в виде проекта билдера) то потом эту программу некакими путями нельзя будет отредактировать?
[Ответ]
Part!zan 18:53 17.10.2008
lermontov, компиляция - процесс необратимый. Можно только дизассемблировать программу, но дело это достаточно сложное и кропотливое. Хотя, в некоторых случаях, вполне можно подправить программу. Например, взлом многих программ происходит именно так. ) А что изменить-то надо?
[Ответ]