Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: bomzzz
Дата сообщения: 03.08.2011 21:08
blin1
Red Planet
а это
Цитата:
EditChange
обслуживает меню правого клика мыши?
Автор: Red Planet
Дата сообщения: 03.08.2011 21:32

Цитата:
void __fastcall TForm1::EditChange(TObject *Sender)

Edit - это имя (Name) TEdit'а.

Вопрос по отладке в Embarcadero RAD Studio 2010. Любая обработка исключений перехватывается самой средой. Здесь была такая проблема, но опций "Stop on C++ Exceptions" и "Stop on Delphi Exceptions" я не нашел. Как исправить ситуацию?
Автор: akaGM
Дата сообщения: 03.08.2011 22:22
//что-то типа упс...
Автор: bomzzz
Дата сообщения: 03.08.2011 22:25
это в каком номере журнала "мурзилка" написано?
Автор: akaGM
Дата сообщения: 03.08.2011 22:26
в предпоследнем...
и то не в "мурзилке", а в "весёлых картинках", первую мне родители ещё не разрешают читать...
Автор: Red Planet
Дата сообщения: 06.08.2011 12:08
Добрый день! Как сделать, чтобы при создании формы фокус становился на определенный TEdit?

Цитата:
my_tedit->SetFocus();

Если прописать это в OnCreate формы, то выскочит ошибка.

Цитата:
Cannot focus a disabled or invisible window

Думаю, что пока не завершилась функция OnCreate формы, форма не считается созданной, и, следовательно, на компонент, находящийся на ней, фокус поставить нельзя. Как выйти из положения?
Автор: ValidolX
Дата сообщения: 06.08.2011 12:35
Red Planet

как всегда вариантов решения задачи много
а) в форме - ActiveControl пропертя
б) в форме -OnShow событие
в) кинуть таймер, в таймерном обработчике сделать свое дело (жестко )
и т д
Автор: akaGM
Дата сообщения: 06.08.2011 12:44
Red Planet

Цитата:
как всегда вариантов решения задачи много

когда на форму накидываешь контролы, кинь нужный TEdit первым -- должно помочь...
по-моему, за этот порядок создания/"прыжков по контролам" TabOrder отвечает

ValidolX

Цитата:
в)

:)
Автор: Red Planet
Дата сообщения: 06.08.2011 15:55
ValidolX, спасибо, использовал свойство ActiveControl формы. Теперь есть вопрос по поводу ProgressBar. Не нашел, как сделать, чтобы он заполнялся во время выполнения функции. Где-то что-то про Position, где-то про таймер, где-то на Delphi, а на C++ рабочего примера не нашел.

И еще. Когда-то сам задавал вопрос по поводу передачи параметров, но сейчас подзабыл. Если это встроенный тип, то его не принято передавать по ссылке? А если нужно изменить его в функции?
Автор: bomzzz
Дата сообщения: 06.08.2011 15:57
Red Planet
че за прогу делаешь?
Автор: langobardi
Дата сообщения: 06.08.2011 16:29

Цитата:
И еще. Когда-то сам задавал вопрос по поводу передачи параметров, но сейчас подзабыл. Если это встроенный тип, то его не принято передавать по ссылке? А если нужно изменить его в функции?

Red Planet, почему не принято? Никто не запрещает тебе этого. Можно его и через указатель передавать.
Автор: ValidolX
Дата сообщения: 06.08.2011 16:35

Цитата:
по поводу ProgressBar

нормальная компонента, цель - отображение прогресса какого-то процесса

главные свойства
Min, Max - от и до
Step - шаг инкрементации текущей позиции
Position - текущая позиция (от Min до Max)

еще со Smooth (гладенький) можно поиграца

прммер

ProgressBar1->Min = 0;
ProgressBar1->Max = 1000;
ProgressBar1->Step = 10;
for (int i=0; i<100; ++i)
{
//тут ваш рабочий код - что то делаем, или сами отдыхаем а шелезяка арбайтает
.....
//

ProgressBar1->StepIt(); //Position будет += Step , или напрямую можно вот так
ProgressBar1->Position = i * 10;
//тут еще можно заставить перерисоваться прогрес бар (Application->ProcessMessages() или ProgressBar1->Update();

}


Цитата:
Если это встроенный тип, то его не принято передавать по ссылке? А если нужно изменить его в функции?


если надо менять внутри - по ссылке, неважно какой тип (еще можно возвращать как ретурн код - если смена 1 параметра)
а вообще все рекомендации - всего лишь рекомендации
недавно рылся в драйверах сетевых контроллеров - там на С код - goto используется сплошь и рядом (потому что удобно для обработки ошибок)
Автор: Red Planet
Дата сообщения: 06.08.2011 21:30
ValidolX, не понял логики ProgressBar'а.


Цитата:
ProgressBar1->Min = 0;
ProgressBar1->Max = 1000;
ProgressBar1->Step = 10;
for (int i=0; i<100; ++i)
{
//тут ваш рабочий код - что то делаем, или сами отдыхаем а шелезяка арбайтает
.....
//

ProgressBar1->StepIt(); //Position будет += Step , или напрямую можно вот так
ProgressBar1->Position = i * 10;
//тут еще можно заставить перерисоваться прогрес бар (Application->ProcessMessages() или ProgressBar1->Update();

}


Это код просто сто раз выполняет действия, заключенные в цикл. А мне нужно, чтобы ProgressBar отображал в реальном времени выполнение некоторой функции.

Автор: ValidolX
Дата сообщения: 06.08.2011 21:36

Цитата:
А мне нужно, чтобы ProgressBar отображал в реальном времени выполнение некоторой функции.


не вижу никаких проблем...

где-то перед вызовом - настроить прогрес бар (мин, макс, шаг)

потом -

void Red_Planet_super_function()
{
// считаем число пи напрммер......
ProgressBar1->StepIt();
//продолжаем делать что-то полезное
}
Автор: Garrett
Дата сообщения: 06.08.2011 23:02
ValidolX
надо еще вызывать обработчик сообщений, чтобы он выполнил обновление интерфейса.
В MFC так:

Код: while (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);
::DispatchMessage(&message);
}
Автор: ValidolX
Дата сообщения: 06.08.2011 23:15

Цитата:
надо еще вызывать обработчик сообщений, чтобы он выполнил обновление интерфейса.


уже указано, см. пред. пост как ето сделать в VCL
Автор: c0ep
Дата сообщения: 07.08.2011 14:53
Ищу статьи, заметки, книги, листинги кодов, исходники и все подобное про внедрение в другие процессы в windows желательно на C++.
Вот хороший пример подобной статьи:
http://habrahabr.ru/blogs/cpp/95305/
Бросаем ссылки, советуем книги, заранее спасибо.

Добавлено:
Ищу статьи, заметки, книги, листинги кодов, исходники и все подобное про внедрение в другие процессы в windows желательно на C++.
Вот хороший пример подобной статьи:
http://habrahabr.ru/blogs/cpp/95305/
Бросаем ссылки, советуем книги, заранее спасибо.
Автор: akaGM
Дата сообщения: 07.08.2011 16:36
c0ep
ты б лучше в API запостил...
Автор: V0lt
Дата сообщения: 08.08.2011 23:16
загоняю биты из перемнной float в переменную int

Код: float f = ...;
int i;
i = *(int*)&f;
Автор: akaGM
Дата сообщения: 08.08.2011 23:24
V0lt

Цитата:
загоняю биты из перемнной float в переменную int

что ты здесь имеешь в виду?

i = (int)f;
а этого не достаточно?
Автор: V0lt
Дата сообщения: 08.08.2011 23:34

Цитата:
i = (int)f;
а этого не достаточно?

Тут получим целую часть от f. А мне нужно все 32 бита из float положить в int.
Автор: KF121
Дата сообщения: 08.08.2011 23:35
V0lt
достаточно, можно еще и union заюзать.


Код:
union xx
{
flot f;
int i;
}
xx.f = 1.0
cout << xx.i;
Автор: V0lt
Дата сообщения: 09.08.2011 00:02
KF121

Цитата:
достаточно

не понял ответа


Цитата:
можно еще и union заюзать.

неа, слишком громоздко.
Автор: akaGM
Дата сообщения: 09.08.2011 01:35
V0lt
ну если тебе нужны просто биты (представление) float, а не само значение, тогда ты можешь воспользоваться след. куском:
Код: float f;
unsigned long i;

f = 3.14;
i = (int)f;
printf("%lu\n", i);
_asm {
mov eax, dword ptr f
mov dword ptr i, eax
}

printf("%lu\n", i);
Автор: KF121
Дата сообщения: 09.08.2011 07:45
V0lt

Цитата:
не понял ответа

время позднее было, тупанул
Автор: V0lt
Дата сообщения: 09.08.2011 08:02
akaGM
Спасибо, работает. Мой пример тоже самое делает.

Цитата:
int i = *(int*)&f;



Цитата:
кстати, зачем это тебе?

Ну например, для того, чтобы получить достоверное значение, которое можно сравнивать обычным "==". А то студия мало знаков после запятой показывает и мне еще семь цифр пришлось дописать чтобы угадать, что там на самом деле. Хорошо, что додумался в double перевести и узнал чуть больше

До этого я с массивами так поступал, чтобы байты переставлять (big to little endian).

Код: unsigned int* i = (unsigned int*)f;
Автор: KF121
Дата сообщения: 09.08.2011 08:07
V0lt
Флоаты нельзя сравнивать на равенство ни при каких обстоятельствах, это ошибка, даже с вида совсем одинаковых числа будут разными
к примеру

а = 5 + 5
if (a == 10)
good
else
bad

то в этом случае получите всегда bad. сравнивать можно только с погрешностью, ну а погрешность выбирать вам самим.
Автор: Molniev
Дата сообщения: 09.08.2011 08:57
V0lt
float это аккурат 4 байта. Причем если процессор эти 4 байта с умом - не все биты (в зависимости от мантисы нижние могут содержать мусор), то вы пытаетесь сравнить все, что еу совсем не правильно.
Если хотите сравнивать с погрешностью пишите:
if (a - delta >= b && a + delta <= b) где a, b - сравниваемые числа, delta - нужная вам погрешность.
Или сделайте себе отдельную функцию или макрос.
Автор: V0lt
Дата сообщения: 09.08.2011 09:03
KF121

Цитата:
Флоаты нельзя сравнивать на равенство ни при каких обстоятельствах, это ошибка

Реальная ситуация. То ли драйвер, то ли DirectX выдает нижний предел одного параметра равный ~0.10. Но после доскональной проверки оказалось, что в реале там ~0,11. На других системах говорят такого бага нет (amd/ati). Поэтому я написал такую хрень.

Код: //fix nvidia bug
if(m_VMR9ColorControl[1].MinValue == 0.0999908447265625) m_VMR9ColorControl[1].MinValue = 0.11;
Автор: KF121
Дата сообщения: 09.08.2011 09:09
то что это используют, это еще не означает что правильно.
вот вам наглядный привер того что не любой флоат/дабл может быть представлен в виде целого числа однозначно.


Код: float to int
0.0999908447265625 -> 1036830720 -> 0 123 5031936 -> 0.0999908447265625
0.0999908447265624 -> 1036830720 -> 0 123 5031936 -> 0.0999908447265625
0.0999908447265626 -> 1036830720 -> 0 123 5031936 -> 0.0999908447265625

int to float
1036830720 -> 0.0999908447265625 -> 0 123 5031936
1036830721 -> 0.0999908521771431 -> 0 123 5031937
1036830719 -> 0.0999908372759819 -> 0 123 5031935

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.