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

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

Автор: suslovp
Дата сообщения: 11.12.2013 18:23
Заводишь массив с нужными значениями. В обработчике OnChange ComboBox'а по значению ItemIndex выбираешь нужный элемент из массива и отправляешь это значение в Edit. Профит %)
Автор: AlekseySerg
Дата сообщения: 11.12.2013 19:00
suslovp
Т. е. я должен ввести переменную которой задам нужные три значения, а по индексу строки присвоит одно из этих, а в Edit тоже сослаться на сослаться на индекс строки. Если вам не сложно как будет выглядеть исходный код. Я еще не совсем знаю все операторы и их свойства. Все делаю по примерам методом проб и ошибок.
Автор: Aktaf
Дата сообщения: 11.12.2013 19:58
Решил еще обратиться, вдруг кто на этот раз ответит?
Снова со своей версией ехе ки Вертуал Даба. Мне нужно вывести два значения - цифрики, начальную длину видео и длину получаемую после обработки. Хочу, использовать на мой взгляд "пустую" площадку программы с пользой. Дело осложняется тем, что главный вид в исходнике и даже в редакторах ресурсов не пощупать. Так бы полегче было бы даже мне сообразить как то. Есть два места куда бы я хотел попытаться пристроить. Прошу помощь (на рисунках нарисовано будущее расположение):
1) [В правом краю, на уровне кнопок.] С левой стороны уже есть "полоска", куда выводиться подобная инфо - место нахождения ползунка в кадрах от начало, во времени и тип кадра. Можно попытаться скопировать в правый край. Не знаю как указать чтобы ее прижать в правый край? И подобная полоска как обозначается в описании (при программировании)?
2) Можно попытаться расположить в нижнею полоску - Status bar. [Во всю ширину программы.] Там появляется разная инфо, в зависимости, куда направляется курсор мышки. Пока не знаю как эту полосу можно "поделить" чтобы тем конформациям не помешать. Не знаю так же как прижать к правому краю свою инфу. Второй вариант возможно даже лучше. Эту полосу можно убрать из виду когда надо, закрыть. При сужении программы новая инфо долго не будет зажиматься.
А в первом варианте - кнопки, инфо с права и будущая - все это, будут находиться на одном уровне и при сужении будут "защемляться" (хотя не такая уж беда).
Подскажите пожалуйста как сделать.
Автор: ne_viens
Дата сообщения: 11.12.2013 21:20
>AlekseySerg
[more=Рабочий пример комбобокса, где едитбох меняется в зависимости от индекса выбранной строки:]

Код: //------------------------------------------------------------------------------------------
// test.c code, compile it with:
// cl /Ox /GF /GS- test.c kernel32.lib user32.lib rsrc.res /link /FIXED
#pragma comment(linker, "/NODEFAULTLIB /ENTRY:main /SUBSYSTEM:WINDOWS /MERGE:.rdata=.text")
#include <windows.h>

////////////////////////////////////////////////////////////////////////////////////////
int __stdcall DialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
    int i;
    char buf[0x20];

    switch(msg)
    {
    case WM_DESTROY:
    case WM_CLOSE:
        EndDialog(hDlg, 0);
        return 1;
    case WM_COMMAND:
        if(1001 == LOWORD(wParam) && CBN_SELCHANGE == HIWORD(wParam))
        {
            i = SendDlgItemMessage(hDlg, 1001, CB_GETCURSEL, 0, 0);
            wsprintf(buf, "String with index %d selected", i);
            SetDlgItemText(hDlg, 1002, buf);
            return 1;
        }
        break;
    case WM_INITDIALOG:
        for(i = 0; i < 3; ++i)
        {
            wsprintf(buf, "String with index %d", i);
            SendDlgItemMessage(hDlg, 1001, CB_INSERTSTRING, i, (LPARAM)buf);
        }
        return 1;
    }
    return 0;
}

////////////////////////////////////////////////////////////////////////////////////////
main()
{
    ExitProcess(DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(101), NULL, (DLGPROC)DialogProc));
}

//------------------------------------------------------------------------------------------
// rsrc.rc code, compile it with:
// rc.exe rsrc.rc

#include "\masm32\include\resource.h"

101 DIALOG 0, 0, 218, 61
STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "ComboBox test program"
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
FONT 10, "MS Sans Serif"
{
CONTROL "", 1001, COMBOBOX, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 16, 6, 78, 48
CONTROL "", 1002, EDIT, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 112, 6, 90, 12
}
Автор: suslovp
Дата сообщения: 12.12.2013 01:38
ne_viens
Ой, я бы испугался такого примера, непонятно же ничего %)
Хотя да, человек не сказал в чём прогает.

AlekseySerg
Напишу для билдера:
Заводишь глобальный массив:
int data[3] = {1,13,666};
В комбобоксе в обработчике события OnChange пишешь сточку:
Edit1->Text = IntToStr(data[ComboBox1->ItemIndex]);
Автор: AlekseySerg
Дата сообщения: 12.12.2013 08:16
ne_viens
за пример спасибо!
suslovp
За замечание тоже спасибо и за пример.
Я так и думал, что должно быть похоже на вот на это.
Сейчас для себя, может показаться что вопрос глупый, получается что массиву data присваивается ряд чисел,а как обработчик ComboBox понимает какое число какой строчке присвоить?
з.ы.
Это я для понимания. Не люблю делать того, что не понимаю.
И работаю я в Borland C++ Builder 6.0
Автор: suslovp
Дата сообщения: 12.12.2013 15:50
Чего-то не совсем пойму что тебе непонятно
В ComboBox при выборе какой-то строки меняется параметр ItemIndex, и он соответствует номеру выбранной строки: 0, 1, 2, ..., n. Если использовать этот параметр как индекс элемента в массиве data[ComboBox1->ItemIndex], то из массива data можно выбрать число, которое ты заранее задал, которое как-бы будет соответствовать номеру строки ComboBox.
Автор: AlekseySerg
Дата сообщения: 12.12.2013 17:22
suslovp
Значит что что в квадратных скобках говорит сколько значений в массиве и нужное число автоматически присваивается нужно строке? Правильно я понимаю?

Добавлено:
Всем кто откликнулся спасибо. Все получилось. Есть еще пара вопросов, но это уже если сам не разберусь
Автор: Aktaf
Дата сообщения: 12.12.2013 18:52
Успешно все разрешили, может теперь глянете на мою просьбу:
http://forum.ru-board.com/topic.cgi?forum=33&topic=3174&start=5160#17

А кому не досуг, можно хотя бы подсказать:
В различных окнах меню при программировании написано отталкиваясь с левой стороны края окон. Может это заложено так по умолчанию, я не знаю. Как мне указать, чтобы определенный элемент - кнопку, полоску или появляющиеся данные прижимались в правую сторону?
Автор: suslovp
Дата сообщения: 13.12.2013 01:33
Aktaf
По подсказке насколько я понял речь идёт по свойства Anchors и Aligment.
Anchors отвечает за привязку границ компонента к границам формы.
Aligment - за выравнивание текста внутри компонента.
Но это опять же на vcl и ему подобным. На API я незнаю как там что делается

По вопросу по Дабу - пардоньте.
Автор: Aktaf
Дата сообщения: 13.12.2013 02:38
suslovp
Спасибо большое. Лиха беда...

Цитата:
По вопросу по Дабу - пардоньте.

Я мало что понял, особенно про vcl и ему подобным. На API
Не страшно, все равно перемелется. Второе не встречается, а вот первое, вот все что есть:
    const int xAnchors[4]={ 0, width >> 1, width, width };
    const int yAnchors[4]={ 0, height >> 1, height, height };

        int x1 = ent.mX1 + xAnchors[(alignment >> 0) & 3];
        int x2 = ent.mX2 + xAnchors[(alignment >> 2) & 3];
        int y1 = ent.mY1 + yAnchors[(alignment >> 4) & 3];
        int y2 = ent.mY2 + yAnchors[(alignment >> 6) & 3];
---------------------------------------------------------------
1) Мне бы понять что тут написано? Расшифровать бы и на примере что-то понять.
2) Я уже думал вот на width. Довольно часто встречается, не знаю что означает, видимо типа от него отталкивается остальное (а height наверно для вертикали). А его координаты (варианты или варианты применения) указаны в этих 6 ти строчках. Узнать бы что к чему и как бы мне осуществить свое желание - указать в небольшом участке (участках) место ему (width) на правом краю и как то указать некоторым элементам от него не направо, а зеркально - налево отступать?
Мы бы совместными усилиями могли решить мою хотелку.

Автор: kkuuhhaa
Дата сообщения: 16.12.2013 11:13
Есть один и тот же код. Если транслирует, как си (код.с), то п/п получает привычное имя с _ в начале, а, если, как с++ (код.срр), то подчёркивание пропадает (и в параметрах не то). Что прописать в объявлении функции для с++, дабы стало одинаково?
Автор: ne_viens
Дата сообщения: 16.12.2013 11:40
#ifdef __cplusplus
extern "C" {
#endif

int* testFunc(int);

#ifdef __cplusplus
}
#endif
Автор: AlekseySerg
Дата сообщения: 17.12.2013 07:34
[more] Доброго времени суток. Вопрос от лузера. Имеем самое простое математическое выражение х=a/b. в свою очередь эти значения могут принимать любое значение. Но мне надо исключить отрицательные значения и как известно делить на 0 нельзя.
А теперь вопрос - как в логической цепочке сделать так что бы при отрицательных значениях b и при значении b= 0, переменная "Х" принимала тоже значение 0, а в остальных случаях в нужной мне ячейки появлялся результат деления.
И посоветуйте для С++ книжечку для начинающих, где написаны такие вот примеры?
P.S. программирую Borland_C++_Builder_6

Добавлено:
Все, спасибо уже сам, без книжек допер. Сейчас выкину часть кода на все общий суд!

void __fastcall TVeter::OkClick(TObject *Sender)

{
float AK1;
float AKi1;
float F1;
AK1=StrToFloat(Ak1->Text);
AKi1=StrToFloat(Aki1->Text);
if (AKi1<=0);
{
F1=0;
}
if (AKi1>0)
{
F1=AK1/AKi1;
}
f1->Caption = FloatToStrF(F1, ffFixed, 10, 2);
} [/more]
Автор: V1s1ter
Дата сообщения: 17.12.2013 15:56
AlekseySerg
Я на С не пишу, но все же
Caption = FloatToStrF((b > 0) ? (a/b) : 0);
Это по сишному
Автор: AlekseySerg
Дата сообщения: 17.12.2013 16:36
V1s1ter
Я немного не понимаю вашу запись. У меня есть edit с именем f1, а переменная F1. Что бы внести в поле Edit значения полученное в выражении F1=AK1/AKi1, в обработчике я указал
"f1->Caption = FloatToStrF(F1, ffFixed, 10, 2); " с округлением до второго знака, а AK1 и AKi1 переменные которые вносятся непосредственно пользователем!

Добавлено:
У меня теперь другая проблема мне теперь надо сделать двухлинейную интерполяцию. И не знаю как это лучше сделать. Пока пользуюсь примитивами. Но как лучше задать маси по оси Х есть числа и Y которым соответствуют значения, а промежуточные необхадимо находить методом интерполяции. Или задать массив уже по интерполированы данным! Подскажите как лучше?
Автор: bormpe
Дата сообщения: 19.12.2013 08:53
Дорогое коммьюнити,

Дочке задали написать программу на cи
Я пишу на фортране и си совсем не знаю, (
Начал писать, но сразу полезли ошибки.

Кто нибудь может написать как организовать такую программу
(или часть из нее). Заранее огромное спасибо за советы.


Задача

Программа должна в цикле выводить меню, в котором предлагать следующие действия:

Заполнить все элементы массива новыми значениями, которые введёт пользователь.

Задать новое значение элемента массива. Индекс и новое значение вводит пользователь.

Найти число в массиве. Пользователь вводит число, программа выводит индекс, по которому такое число хранится. Если такого числа в массиве нет, нужно вывести "Такого числа нет". Если искомых чисел в массиве несколько, вывести меньший из их индексов.

Найти минимум в массиве. Вывести индекс и значение минимума. Если элементов с минимальным значением несколько, вывести самый меньший из их индексов.

Вставить элемент в массив. Пользователь вводит индекс и значение для вставки.

Удалить элемент из массива. Пользователь вводит индекс удаляемого элемента.
При удалении элемента элементы, идущие после него следует сдвинуть влево, а в последний элемент записать 0.



Автор: akaGM
Дата сообщения: 19.12.2013 12:16
bormpe

а ты напиши на фортране, а потом через f2c прогони, заодно и сам разберёшься :)
и вообще лучше бы в задачах спросить...
Автор: V1s1ter
Дата сообщения: 19.12.2013 13:19
AlekseySerg
Я имел в виду что
x = (b > 0) ? (a/b) : 0
тоже самое, что
if (b > 0)
{
x = a/b
}
else
{
x = 0
}
Автор: alexVS
Дата сообщения: 19.12.2013 14:49
Пробую освоить MS Visual C++ 2010 Express
Простые программки: элементы форм, расчеты, чтение и запись файлов.

Такой вопрос:
Будет ли скомпилированный экзешник работать на чистой Windows XP (SP1) (или SP2)

Или для работы экзешника на машине должно быть установлено
vcredist_x86_2005 SP1
vcredist_x86_2008 SP1
vcredist_x86_2010
.NET 1.1, - 4.0 ?
Нет возможности проверить...



И как я понимаю, консольные программы, написанные в DEV C++ пойдут везде?
Автор: Garrett
Дата сообщения: 19.12.2013 15:43
alexVS
Работает. Я делаю статическую линковку, чтобы внешние длл-ки не были нужны.
Автор: akaGM
Дата сообщения: 19.12.2013 15:47
alexVS

работать будет всегда Win32 консоль и Win32 app если поставишь x86 2010 redistributable
или же придётся ставить все статические библиотеки и линковаться с ними, статически соответственно...
Автор: ne_viens
Дата сообщения: 19.12.2013 16:12
Ещё можно линковать с msvcrt.lib из WinDDK, тогда прога будет загружать msvcrt.dll, которая в любом win есть.
Кстати MinGW тоже с msvcrt.dll линкует.
Автор: akaGM
Дата сообщения: 19.12.2013 16:36
msvcrt и так дефолтом в студиях встаёт пpям в /lib, без ДДК...
Автор: ne_viens
Дата сообщения: 19.12.2013 16:51
Это какой-то неправильный msvcrt- если с ним линковать, то runtime будет msvcr90.dll (или msvcr100.dll, или msvcr110.dll, или итд.).
Автор: akaGM
Дата сообщения: 19.12.2013 23:27
ну да, это версионная...
только ему ещё ДДК придётся ставить, уж лучше ни на что не закладываться и "всё своё носить с собой"...
Автор: alexVS
Дата сообщения: 20.12.2013 17:46
Что-то я туплю
MS Visual C++ 2010 Express, Создать, Проект, Приложение Windows Forms.
Компилируется пустой проект, все ОК.

Конфигурация->Создание кода->Библиотека времени выполнения->"Многопоточная отладка DLL" меняю на "Многопоточная /MT".
Не компилируется, пишет: cl : командная строка error D8016: несовместимые параметры командной строки "/clr:pure" и "/MT"

Ставлю Конфигурация->"Без поддержки CLR среды", вылезает море ошибок на пустом проекте.


Цитата:
Работает. Я делаю статическую линковку, чтобы внешние длл-ки не были нужны.

Как это сделать?


PS Писал программки в дельфях (Borland Delphi 7) для Windows, там вроде ничего такого не было. Хотя тогда еще ни vcredist_x86_2005 SP1, ни .NET 1.1 в природе не было.
Автор: ne_viens
Дата сообщения: 20.12.2013 19:45
Похоже, что ты создал .NET приложение а не C(++).
Автор: akaGM
Дата сообщения: 20.12.2013 21:57
alexVS

автономно переносимыми приложениямми в твоём случае будут только

Win32 Project
Win32 Console Application

а для Forms надо будет таскать за собой всю эту НЕТ-тряхомудь...
Автор: delover
Дата сообщения: 23.12.2013 18:23

В Си это автономно переносимые приложения, в вот в Delphi это тряхомудь-BPL. Новая реклама - установи .NET приложение без установки Фреймворк.

akaGM
Простите гуру, сорвалось.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

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


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