Вопрос № 109999: Вопрос по с++ Builder.
Почему так работает:
TImage *Image1=new TImage(Form1);
Image1->Parent=Form1;
Image1->Canvas->Ellipse(5,5,5,5);
а так не работает:
TImage *Im[5];
for(i=0;i<5;i++)
{
Im[i]...Вопрос № 110003: Подскажите, почему меняется содержание массива? Я задаю:
int main(int argc, char* argv[])
{
float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}};
float a[5]={0,0,0,0,0};
float b[5]={6,6,6,6,6};<br...Вопрос № 110039: Здравствуйте :) У меня к вам 2 вопроса и я был бы очень благодарен если бы вы мне ответили !
1:
Это отрывок из программы которая копирует содержание всего диска има котрого (то есть буковка С или D и т.д.) в процесе выполнения прог...Вопрос № 110061: Здравствуйте.
Пишу класс для работы с матрицами перегружаю оператор [], надо чтобы при вызове к примеру a[1] возвращалась строка матрица размером 1 на n (число столбцов) (ну т.е. из матрицы выбирается только 1 строка) а если a[1][2] то нужно...Вопрос № 110072: Уважаемы эксперты, помогите пожалуйста создать массивы для строк, которые храняться в ListBoxe. В строке содержится примерно следующее : мы вводим 2 в Edit1.......
4 10 100 Ленина //4 Edit1 ; 10 Edit2 ; 100 Edit3 ; Ленина Edit4.
... ... .......Вопрос № 110095: Здравствуйте уважаемые эксперты
Я программирую на Borland C++ 6.0:
есть указатель long pBitmap, который возвращает элемент ActivX, этот указатель содержит изображение типа bitmap.
как это изображение можно сохранить в файл, имея...Вопрос № 110104: Здравствуйте!
У меня возникла проблема со средой программирования С++Builder 6.0
Я написал две легкие программы, всё нормально скомпилировалось, запустилось и нормально работало без ошибок. Затем я переёс программы на другой комп, на котором...
Вопрос № 109.999
Вопрос по с++ Builder.
Почему так работает:
TImage *Image1=new TImage(Form1);
Image1->Parent=Form1;
Image1->Canvas->Ellipse(5,5,5,5);
а так не работает:
TImage *Im[5];
for(i=0;i<5;i++)
{
Im[i]=new TImage(Form1);
Im[i]->Parent=Form1;
}
Im[2]->Canvas->Ellipse(5,5,5,5);
В чем дело?
Отправлен: 18.11.2007, 15:55
Вопрос задал: RussianGM
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лясин Александр Владимирович
Здравствуйте, !
Поясните - что значит не работает? Программа запускается? Что вы хотите увидеть и что видите? Если вы хотите увидеть эллипс - то для этого надо для начала спозиционировать объекты Im[i] на форме так - чтобы они не перекрывали друг друга, или удалить с помощью delete все, кроме Im[2].
Подскажите, почему меняется содержание массива? Я задаю:
int main(int argc, char* argv[])
{
float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}};
float a[5]={0,0,0,0,0};
float b[5]={6,6,6,6,6};
int stat[5]={1,1,1,2,2};
int N=6;
int n=3;
int m=2;
float Po=0;
int mxr[3][6]={0};
for (int i=0; i<N; i++)
{
for (int r=0; r<(n+m); r++)
{
if (xr[r][i]>=a[r] && xr[r][i]<=b[r]) {mxr[r][i]=0;}
else {mxr[r][i]=1;}
}
}
for (int r=0; r<(n+m); r++) {
printf("stat[%i] = %d",r, stat[r]);
}
}
Он выводит содержание массива stat[5]={0,0,0,1,1}, вместо заданного stat[5]={1,1,1,2,2}; если закоментить код, то выводит все правильно stat[5]={1,1,1,2,2}
Заранее спасбио!
Отправлен: 18.11.2007, 16:26
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: kool
Здравствуйте, Mart!
Да потому что происходит запись вне границ массива -
mxr[4][0]=0 , например, определитесь с размерами этого массива.
Удачи!
--------- I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 18.11.2007, 17:33 Оценка за ответ: 5
Отвечает: Argus98
Здравствуйте, Mart!
и опять же настойчиво рекомендую вам научиться пользоваться дебагом :)
ошибка в строке int mxr[3][6] = 0; должно быть int mxr[5][6] = 0; вы забыли правильно указать границы массива, в памяти все значения перемешались, поэтому вам программа случайно выдавала правильный результат (могла бы и не выдать, всё зависит от того как расположатся переменные в памяти)
Ответ отправил: Argus98 (статус: 2-ой класс)
Ответ отправлен: 18.11.2007, 18:11
Отвечает: Архипов Александр Леонидович
Здравствуйте, Mart!
А Вы уверены, что у Вас массив mxr[][] должен быть 3х6, а не 5х6?
Во всяком случае, после смены 3 на 5 ответ получается верным
Здравствуйте :) У меня к вам 2 вопроса и я был бы очень благодарен если бы вы мне ответили !
1:
Это отрывок из программы которая копирует содержание всего диска има котрого (то есть буковка С или D и т.д.) в процесе выполнения программы заносится в переменную DRIVE. DRIVE + ":\*" = str3 .
А проблема у меня в том что когда я пишу fo.pFrom = str3 всё компилируется прога врубается но не копирутся говорит что нету там файлов и он нечего не может найти. Как сделать так чтобы fo.pFrom равнялся тому что записанно в str3.
2.
Да и второй вопрос как можно сделать так чтобы во время копирования не выскакивалв окошко прогресса (типо всё должно быть скрытно ) ?
Приложение:
Отправлен: 18.11.2007, 20:02
Вопрос задал: GVA (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лясин Александр Владимирович
Здравствуйте, GVA!
По поводу первого вопроса сложно сказать имея так мало данных. Насколько понял я, бегло прочитав MSDN, используемая вами ф-я копирует (в вашем случае) файлы (а не весь диск!), которые должны быть указаны вами в pFrom.
Вот смотрите:
pFrom
Address of a buffer to specify one or more source file names. These names must be fully qualified paths. Standard Microsoft MS-DOS wild cards, such as "*", are permitted in the file-name position. Although this member is declared as a null-terminated string, it is used as a buffer to hold multiple file names.
В вашем случае - вы пытаетесь скопировать все файлы - которые в корне диска.
Вы уверены - что в корне диска они есть?
Вы косвенно утверждаете - что fo.pFrom не принимает значение str3 или str - вы проверяли содержимое fo.pFrom? В это, честно говоря, слабо верится :)
Несколько замечаний по стилю:
Вот эту строку
if (0 != SHFileOperation(&fo) || TRUE == fo.fAnyOperationsAborted)
можно записать
if (SHFileOperation(&fo) || fo.fAnyOperationsAborted) так компактнее и понятней.
По поводу второго вопроса:
FOF_SILENT
Do not display a progress dialog box.
Устанавливаете в fFlags данное значение FOF_SILENT, и прогрессбар не должен отображаться.
Пишу класс для работы с матрицами перегружаю оператор [], надо чтобы при вызове к примеру a[1] возвращалась строка матрица размером 1 на n (число столбцов) (ну т.е. из матрицы выбирается только 1 строка) а если a[1][2] то нужно возвращать значение из матрицы т.е. число.
Отвечает: Гальцов Андрей
Здравствуйте, Щербинин Павел Алексеевич!
data - двумерный массив
int* operator [](int index)
{
return *(data+index);
}
Например:
data[3]
Вы хотите увидеть 3-ю строку - посылаете туда index=3...Из операторе Вам возвращается одномерный массив.
data[3][1]
После первого шага Вам вернулась третья строка...А затем из этой строки с index=1 получаете 1-й элемент...
На всяки случай:
data[3], это тоже самое, что и *(data+3)
data[3][1] в свою очередь тоже самое, что и *(*(data+3)+1)
В приложении программа с этим перегруженным оператором...Только с шаблоном класса...
Приложение:
--------- "The more you know, the less you need to show"
Ответ отправил: Гальцов Андрей (статус: Студент)
Ответ отправлен: 18.11.2007, 22:14 Оценка за ответ: 5 Комментарий оценки: Ответ верный, но не то что мне нужно, просто у меня класс Array и в нем перегружено много операторов (умножение, сложение и тп) и поэтому при первом вызове [] он должен возвращать именно тип Array (а не указатель) а второй int
Отвечает: Терсков Сергей
Здравствуйте, Щербинин Павел Алексеевич!
Проще всего классы наподобие матриц создавать при помощи шаблонных классов. Для этого нужен шаблонный класс вектора, а класс матрицы - это вектор состоящий из векторов. Таким образом при вызове оператора [] возвращается вектор содержащий нужную строку матрицы. А вызов [][] вернет нужный элемент матрицы. Подобный код см. в приложении...
Приложение:
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 19.11.2007, 04:41 Оценка за ответ: 5 Комментарий оценки: Помоему это то что надо но я не все понял, если не трудно стукни в асю 191868413 поболтаем.
Вопрос № 110.072
Уважаемы эксперты, помогите пожалуйста создать массивы для строк, которые храняться в ListBoxe. В строке содержится примерно следующее : мы вводим 2 в Edit1.......
4 10 100 Ленина //4 Edit1 ; 10 Edit2 ; 100 Edit3 ; Ленина Edit4.
... ... .... .............
.. .... .... ............
5 23 33 Ленина 1
Нужно это для поиска совпадений. Т.е. я ввожу в Edit1 некое другое число например 5, в Edit2-21, в Edit3-44 и в Edit4-Ленина и по нажатию кнопки поиск должен быть осуществлен поиск совпадений, если они есть то они должны будут выводиться во втором ListBoxe.
Оч хотелось получить ответа, а то горит красным пламенем мой зачет по программированию......... Жду с нетерпением примера) Спасибо за вашу сознателность....
Отвечает: Лясин Александр Владимирович
Здравствуйте, Пушкин Евгений Владимирович!
Все ответы на ваш вопрос присутствуют в справке. См. метод TStrings::Add(AnsiString) и подобные для работы со строками типа AnsiString (Insert, Delete). Видимо люди не совсем понимают, чего конкретно вы хотите. Если для вас проблема разобраться с методами стандартных компонентов C++Builder - то для начала посмотрите FAQ.
Какую сознательность вы имели ввиду - гражданскую? :)
Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 19.11.2007, 11:16 Оценка за ответ: 3
Вопрос № 110.095
Здравствуйте уважаемые эксперты
Я программирую на Borland C++ 6.0:
есть указатель long pBitmap, который возвращает элемент ActivX, этот указатель содержит изображение типа bitmap.
как это изображение можно сохранить в файл, имея только указатель?
и есть ли возможность обращаться к пикселям через этот указатель?
Вот код: событие Camera1framercv возникает каждый раз при смене кадра
void __fastcall TForm1::Camera1framercv(TObject *Sender, BSTR tstrFileName, short Frame, short TotalFrames, DATE pDate, long fraction, long pBitmap)
{
TBitmap *map = (TBitmap*) pBitmap;
Image1->Picture->Bitmap = map->Bitmap;
}
// не работает [C++ Error] Unit1.cpp(151): E2015 Ambiguity between 'TBitmap' and 'Windows::TBitmap'
Компилятор не может определиться, какой из типов ты пытаешься использовать: Window::TBitmap или Graphics::TBitmap ...
Два способа решения:
1) Везде уточнять область видимости:
void __fastcall TForm1::Camera1framercv(TObject *Sender, BSTR tstrFileName, short Frame, short TotalFrames, DATE pDate, long fraction, long pBitmap) { Graphics::TBitmap *map = (Graphics::TBitmap*) pBitmap; Image1->Picture->Bitmap = map->Bitmap; }
2)
Или чтобы не заморачиваться, перед использованием TBitmap, переопредели тип: void __fastcall TForm1::Camera1framercv(TObject *Sender, BSTR tstrFileName, short Frame, short TotalFrames, DATE pDate, long fraction, long pBitmap) { typedef Graphics::TBitmap TBitmap; TBitmap *map = (TBitmap*) pBitmap; Image1->Picture->Bitmap = map->Bitmap; }
Удачи!
Ответ отправил: Лучников Ю.В. (статус: 5-ый класс)
Ответ отправлен: 19.11.2007, 09:57 Оценка за ответ: 5
Вопрос № 110.104
Здравствуйте!
У меня возникла проблема со средой программирования С++Builder 6.0
Я написал две легкие программы, всё нормально скомпилировалось, запустилось и нормально работало без ошибок. Затем я переёс программы на другой комп, на котором C++Builder не был установлен и программы отказались работать выдав сообщение (Приложению не удалось запустится, поскольку vcl60.bpl не был найден. Повторная установка приложения может исправить эту проблему). А призапуске второй программы выводится сообщение (Приложению не удалось запустится, поскольку CC3260.DLL не был найден. Повторная установка приложения
может исправить эту проблему). Я переносил только исплняемые файлы *.exe.
Тогда я попробывал удалить у себя C++Builder, врезультате программы перестали работать и у меня выдовая теже сообщения.
Подскажите пожайлуста что я сделал не правильно, как можно устранить эту проблемму?
Зарание благодарю.
Отвечает: Vas177
Здравствуйте, Грибанов Фёдор Александрович!
Параметры проекта Project->Options:
Вкладка Compiler: нажать кнопку Release
Вкладка Packages: снять галочку Build with runtime packages
Вкладка Linker: снять галочку Use dynamic RTL
Ответ отправил: Vas177 (статус: 2-ой класс)
Ответ отправлен: 19.11.2007, 09:55
Отвечает: V1s0r
Здравствуйте, Грибанов Фёдор Александрович!
Вечный вопрос :)
Прямо как "быть или не быть" или как однажды подметил Maxim V.G. "есть ли жизнь на Марсе"
Сколько сотен тысяч раз его задавали?
Итак, открываем google и пишем ручками: site:rusfaq.ru vcl60.bpl
У меня перед глазами сразу же всплыл вопрос 94178 или 96080 и ответы на них. Это ведь не сложно, да?
Ответ отправил: V1s0r (статус: 3-ий класс)
Ответ отправлен: 19.11.2007, 11:02
Отвечает: Lestat de Lionkur
Здравствуйте, Грибанов Фёдор Александрович!
В свойствах проекта убери галки с двух пунктов: компилировать с bpl и компилировать с dll.
Также в свойствах того же проекьа выставь компилировать release версию, а не debug.
Ответ отправил: Lestat de Lionkur (статус: 4-ый класс)
Ответ отправлен: 20.11.2007, 12:41