Вопросы и ответы по программированию.

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#316 Сообщение 27.10.2012, 22:31

Deus_Ex_Machina
Философ итт.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Аватара пользователя
Rama
Модератор
Модератор
Сообщения: 1143
Зарегистрирован: 28.03.2008
Благодарил (а): 389 раз
Поблагодарили: 240 раз
Контактная информация:

#317 Сообщение 29.10.2012, 19:33

В C++ builder создана форма. При её запуске первый добавленный на форму элемент становится активным (например, если это кнопка — она подсвечивается, и по нажатию клавиши ввода происходит заданное действие, а если какой-нибудь блок типа MEMO, то там сразу присутствует курсор и можно осуществлять манипуляции с текстом).
Вопрос в том, как убрать фокус с этих элементов? (Есть вариант перевести фокус на скрытый элемент, но почти уверен что есть выход без костылей)

Deus_Ex_Machina
Капитан
Капитан
Сообщения: 492
Зарегистрирован: 23.05.2010
Благодарил (а): 14 раз
Поблагодарили: 43 раза
Контактная информация:

#318 Сообщение 30.10.2012, 14:46

Saloed писал(а):C++ builder
Use Qt, Luke.

Аватара пользователя
Rama
Модератор
Модератор
Сообщения: 1143
Зарегистрирован: 28.03.2008
Благодарил (а): 389 раз
Поблагодарили: 240 раз
Контактная информация:

#319 Сообщение 30.10.2012, 16:56

Deus_Ex_Machina
Выбор среды не обсуждается.
Вопрос по прежнему открыт.

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#320 Сообщение 30.10.2012, 18:08

По логике вещей, раз уж в этом билдеры есть такие вот объекты, то у них должно быть свойство focused или похожее.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Аватара пользователя
Rama
Модератор
Модератор
Сообщения: 1143
Зарегистрирован: 28.03.2008
Благодарил (а): 389 раз
Поблагодарили: 240 раз
Контактная информация:

#321 Сообщение 30.10.2012, 18:56

NiGHt-LEshiY
Не нахожу подобного, однако есть функция SetFocus().
Изображение
В эктив контроле можно выбирать на чем сделать фокус при старте программы, но задать None или что-то подобное не удается. Кстати, если выбрать невидимую кнопку, фокус сбрасывается на первый добавленный на форму элемент, так что даже этот костыль не катит (разве что вынести кнопку за пределы видимости и запретить изменять размеры окна, но опять же, костыль)

Аватара пользователя
nameless noob
Полковник
Полковник
Сообщения: 1682
Зарегистрирован: 01.09.2010
Откуда: Россия
Благодарил (а): 21 раз
Поблагодарили: 56 раз
Контактная информация:

#322 Сообщение 31.10.2012, 22:21

Код: Выделить всё

#include <stdio.h>
#include <iostream>

using namespace std;


int main()
{
    int i,status;
    char n;
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    char a[100],b[100];
    for(i=0; i<5 && status!=EOF; ++i){
        if (n&1) cin.read(a,n);
        else cin.read(b,n);
    }
    for(i=0; i<5 && status!=EOF; ++i){
       cout<<a[n];
    }
    return 0;
}
на выходе почему-то пробелы

Добавлено спустя 4 минуты 10 секунд:
что я делаю не так?
Изображение

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#323 Сообщение 31.10.2012, 22:32

nameless noob
А что ты вообще делаеш?

Saloed
В Delphi было событие onActive у формы, которое срабатывало после отображения окна, может быть в нем можно задать фокус. Или может быть onFocus?

А вообще, если уж так надо что-бы не было фокуса, можно использовать картинки - они вообще фокуса не получают.

Аватара пользователя
nameless noob
Полковник
Полковник
Сообщения: 1682
Зарегистрирован: 01.09.2010
Откуда: Россия
Благодарил (а): 21 раз
Поблагодарили: 56 раз
Контактная информация:

#324 Сообщение 31.10.2012, 22:37

MOZGIII
прогу, которая должна считывать из файла числа, расположенные через пробел, и если они нечетные, то писать их в файл другой, в том же порядке. может даже и четные числа писать, но в другую строчку
я даже не знаю, почему это, просто хочу так
Последний раз редактировалось nameless noob 31.10.2012, 22:46, всего редактировалось 1 раз.
Изображение

Аватара пользователя
Rama
Модератор
Модератор
Сообщения: 1143
Зарегистрирован: 28.03.2008
Благодарил (а): 389 раз
Поблагодарили: 240 раз
Контактная информация:

#325 Сообщение 31.10.2012, 22:46

MOZGIII
Есть onActivate, в нем можно задать что будет запущено сразу же после старта формы. Других или похожих на те что ты написал нету.
Картинки тоже костыль, тем более что если убрать все кнопки то он кинет курсор в мемо, чего мне тоже не надо.

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#326 Сообщение 31.10.2012, 23:57

nameless noob
Возьми язык попроще, например PHP. Тебе нужно разобраться с основными принципами программирования вообще, а в плюсах много нюансов которые будут отвлекать.
По поводу кода - проблемы явно выражены, однако просто таки их исправлять бесполезно. Если хочешь разобраться, для начала попробуй убрать циклы и сделать то, что ты хочешь, для одного числа.

Добавлено спустя 2 минуты 56 секунд:
Saloed
А переопределять фокус в onActive на пустой - не вариант?
Можно ещё отнаследоваться от TForm (или что там в билдере), найти в нём где выставляется фокус и поправить так как надо - это, на самом деле, способ самый правильный (если более прямого нету).

Аватара пользователя
nameless noob
Полковник
Полковник
Сообщения: 1682
Зарегистрирован: 01.09.2010
Откуда: Россия
Благодарил (а): 21 раз
Поблагодарили: 56 раз
Контактная информация:

#327 Сообщение 01.11.2012, 08:42

MOZGIII
для одного числа тоже пробел выводится

Добавлено спустя 53 минуты 16 секунд:

Код: Выделить всё

#include <stdio.h>
#include <iostream>

using namespace std;


int main()
{
    int i,status;
    char n;
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    char a[100],b[100];
    scanf("%d %d", &n);
    //for(i=0; i<5 && status!=EOF; ++i){
        if (!(n%2)) cin.read(a,n);
        else cin.read(b,n);
   // }
   // for(i=0; i<5 && status!=EOF; ++i){
       cout <<a[n];
    //}
    return 0;
}
теперь выводит точку Изображение
если раскомментить, то целых 5 точек
Изображение

Аватара пользователя
kinders666
Модератор
Модератор
Сообщения: 4163
Зарегистрирован: 25.10.2006
Откуда: Москва
Благодарил (а): 537 раз
Поблагодарили: 191 раз

#328 Сообщение 18.11.2012, 14:03

C++
Есть массив A = 24053, его нужно преобразовать в А = 24533
Код:

Код: Выделить всё

for (j = 0; j < n+1; j++)
    {
        if (A[j] == 0 && A[j+1] != 0)
        {
            for (q = 0; q < s+1; q++)
            {
                A[j] = A[j+1];
            }
        }
Где n - общее число элементов массива, s - нулевых элементов массива
Вместо нужного получается 24553
Изображение
Изображение

Аватара пользователя
Monk
VIP
VIP
Сообщения: 4713
Зарегистрирован: 21.11.2009
Благодарил (а): 418 раз
Поблагодарили: 1053 раза
Контактная информация:

#329 Сообщение 18.11.2012, 14:35

kinders666
поясни логику, что ли. А то у тебя сейчас нулевые элементы заменяются на следующие и всё. Как у тебя 053 в 533 должно преобразовываться?
«По ночам компьютеры собираются вместе и смеются над людьми, если те делают работу, которую могли бы делать компьютеры» (с) habrahabr
 
[hide_num=64]Изображение
Изображение

Не стоит становиться на одно колено ради девушки, которая ради тебя не готова встать на два. (С)
640K ought to be enough for anybody (с) BG[/hide_num]

Аватара пользователя
kinders666
Модератор
Модератор
Сообщения: 4163
Зарегистрирован: 25.10.2006
Откуда: Москва
Благодарил (а): 537 раз
Поблагодарили: 191 раз

#330 Сообщение 18.11.2012, 14:44

Monk
Да, там ошибка, я решал для частного случая в виде 24053..
В общем задание: есть некий массив с n-числами, рандомный, нужно все нулевые элементы передвинуть в конец

Добавлено спустя 36 секунд:
Для частного случая вот решение, если кому нужно

Код: Выделить всё

    for (j = 0; j < n+1; j++)
    {
        u = 0;
        if (A[j] == 0 && A[j+1] != 0)
        {
            for (q = 0; q < s+1; q++)
            {
                if (u == 0)
                {
                    u = j;
                }
                A[u] = A[u+1];
                u++;
            }
        }
    }
Добавлено спустя 2 минуты 2 секунды:
Когда несколько нулей подряд, алгоритм сбой даёт
Изображение
Изображение

Ответить Вложения 1