Вопрос № 59441: Здравствуйте господа эксперты! Какими способами можно зделать так, чтобы окно при перетаскивании не вылезало за границы экрана?
P/S: Работаю в C++Builder.
Заранее благодарен....Вопрос № 59461: Существуют ли *бесплатные* С++ компиляторы, с поддержкой ODBC или аналогичных средств абстрагирования от БД в Windows?
Заранее спасибо!...Вопрос № 59513: const int name_func(...) const
Что это означает?Обьясните , пожалуйста ,этого прототипа.Обьясните , пожалуйста в примерах.Заранее Вам благодарю. ...Вопрос № 59527: zdrastvuite,kak mne podkliucit DLL'ku ciuzoj programy k sebe v programu stob ispolzovat ejo funkcyji.Spasibo.....Вопрос № 59559: Зравствуете уважаемы эксперты.
1)Скажите в чем разница между ссылкой и указателем?
Мне нужно сложить в функции 2 массива, и вернуть результирующий массив в основную программу. Если использовать указатели у меня возникает проблема его вернуть ...
Вопрос № 59.441
Здравствуйте господа эксперты! Какими способами можно зделать так, чтобы окно при перетаскивании не вылезало за границы экрана?
P/S: Работаю в C++Builder.
Заранее благодарен.
Отвечает: Tek
Здравствуйте, Goretsky Anton!
Не знаю как это событие называется в Builder'е, возможно OnMoving но Необходимо перехватывать событие WM_MOVING, одним из его параметров передется RECT структура, в которой содержатся границы окна в экранных координатах. Определить, если границы выходят за экран - перемещать окно к границе экрана за которую оно вышло.
Определить размеры экрана - GetSystemMetrics(int) с параметрами SM_CXSCREEN и
SM_CYSCREEN
Что касаемо параметров события - в билде могут быть отличия - уже не помню - см. Help
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано
Ответ отправил: Tek (статус: 1-ый класс)
Ответ отправлен: 19.10.2006, 09:53 Оценка за ответ: 5 Комментарий оценки: Спасибо! Буду пробовать.
Отвечает: Sergey A. Wedensky
Здравствуйте, Goretsky Anton!
Добавлю: размер рабочей области экрана (с учетом разных панелей, taskbar'а и пр.) можно получить функцией SystemParametersInfo с параметром SPI_GETWORKAREA.
Удачи!
Ответ отправил: Sergey A. Wedensky (статус: 6-ой класс)
Ответ отправлен: 19.10.2006, 10:10 Оценка за ответ: 5 Комментарий оценки: Спасибо! Буду пробовать.
Вопрос № 59.461
Существуют ли *бесплатные* С++ компиляторы, с поддержкой ODBC или аналогичных средств абстрагирования от БД в Windows?
Заранее спасибо!
Отправлен: 19.10.2006, 12:30
Вопрос задал: Стас М. (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Sergey A. Wedensky
Здравствуйте, Стас М.!
*Бесплатные* С компиляторы существуют. Собственно, сами компиляторы
почти все бесплатные, в т.ч. и от Microsoft.
ODBC - это API, набор функций (начинающихся с SQL...), предоствляемый
ОС (в Odbc32.dll, Odbccr32.dll).
С помощью ODBC API Вы можете общаться с любой БД (имеющей
ODBC-драйвер) на уровне стандартных вызовов. Функции ODBC API Вы
можете вызвать, пользуясь любым компилятором.
Если Вы имели ввиду библиотеки (DAO в MFC и др.) и средства разработки
(IDE), то это другое дело.
Ответ отправил: Sergey A. Wedensky (статус: 6-ой класс)
Ответ отправлен: 19.10.2006, 12:49
Вопрос № 59.513
const int name_func(...) const
Что это означает?Обьясните , пожалуйста ,этого прототипа.Обьясните , пожалуйста в примерах.Заранее Вам благодарю.
Отправлен: 19.10.2006, 19:38
Вопрос задал: Tebriz (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Melamed
Здравствуйте, Tebriz!
Обычно это объявление бывает у методов классов.
Данное объявление означает что данный метод класса возврашает целое число, которое менять
нельзя, и данный метод не изменяет значения ни одного поля класса.
Ответ отправил: Melamed (статус: 7-ой класс)
Ответ отправлен: 19.10.2006, 22:03 Оценка за ответ: 4
Отвечает: Mystic
Здравствуйте, Tebriz!
Такая функция используется в классах. Чтобы случайно не изменить какие-нибудь его поля, исподьзуют 2-й const. Чаще всего используются в методах типа Get...():
class A{
int i; //Какое-нить поле
public:
const int Get_i() const { return i; }
void Set_i(int n) { i = n; }
};
Если в Get_i написать что-то типа i = 5; компилятор выдаст ошибку.
ЗЫ: Что означает первый const, думаю, понятно.
Ответ отправил: Mystic (статус: 1-ый класс)
Ответ отправлен: 20.10.2006, 19:11
Вопрос № 59.527
zdrastvuite,kak mne podkliucit DLL'ku ciuzoj programy k sebe v programu stob ispolzovat ejo funkcyji.Spasibo..
Отправлен: 19.10.2006, 20:39
Вопрос задал: Nu Ja (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Кроме вышеуказанного метод носит название явного подключения. Кроме того можно подключить DLL неявно и методом отложенной загрузки.
--------- Ошибка становится ошибкой, когда рождается как истина. Станислав Ежи Лец
Ответ отправил: Vaga (статус: 4-ый класс)
Ответ отправлен: 19.10.2006, 21:23 Оценка за ответ: 5
Отвечает: Melamed
Здравствуйте, Nu Ja!
Либо испльзуй функции API LoadLibrary для загрузки баблиотеки. GetProcAddress - для получения адреса функции. После
того, когда надобность в библиотеки FreeLibrary, выгружает библиотеку (см приложение)
либо подключаешь библиотеку импорта твоей библиотеки. Для MSV C++
#pragma comment (lib, "MyDll.lib")
Приложение:
Ответ отправил: Melamed (статус: 7-ой класс)
Ответ отправлен: 19.10.2006, 21:32
Вопрос № 59.559
Зравствуете уважаемы эксперты.
1)Скажите в чем разница между ссылкой и указателем?
Мне нужно сложить в функции 2 массива, и вернуть результирующий массив в основную программу. Если использовать указатели у меня возникает проблема его вернуть назад. Я уже запуталась где нужно ставить знак &(взятие адреса) а где * :-( Я слышала, что мою задачу можно решить и с помощью ссылок, и что так она будет решаться проще.
2)При написании модуля, обязательно ли использовать знак #(припроцессорная операция) и вообще зачем он нужен?
3)Знает ли кто-нибудь как на С++ писать библиотеки DLL? Если это реально, самому написать библиотеку, то подкиньте пожалуйста пару ссылочек.
Отправлен: 20.10.2006, 06:53
Вопрос задала: KInika (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Vaga
Здравствуйте, KInika!
int number = 501;
int& alias_name = number; // Создать ссылку
cout << "Переменная number содержит " << number << endl;
cout << "Псевдоним для number содержит " << alias_name << endl;
alias_name = alias_name + 500;
cout << "Переменная number содержит " << number << endl;
cout << "Псевдоним для number содержит " << alias_name << endl;
пример взят здесь http://www.allk.ru/book/10/71.html
Указатель представляет собой адрес памяти, который указывает (или ссылается) на определенный участок.
можно посмотреть здесь http://www.allk.ru/book/10/77.html
Написать библиотеку самостоятельно вполне реально. Здесь хорошо все описано http://www.rsdn.ru/article/baseserv/dlluse.xml
--------- Ошибка становится ошибкой, когда рождается как истина. Станислав Ежи Лец
Ответ отправил: Vaga (статус: 4-ый класс)
Ответ отправлен: 20.10.2006, 08:22
Отвечает: Sergijj
Здравствуйте, KInika!
1) Функционально между указателем и ссылкой разницы никакой, ибо обе операции ссылаются (указывают) на ячейку памяти. Разница в интерфейсе "программист-программа" (что удобнее в данном случае: передать указатель на значение или на саму переменную; и ещё - над ссылками нельзя производить множество операций, которые возможны с указателями, поэтому иногда удобно вместо 'const *' писать '&').
Чтобы не путаться:
&myVar - получить адрес переменной myVar (ссылка);
*myVar - получить значение, которое лежит в памяти по указателю myVar (т.е. в myVar должен лежать указатель - 32-битный адрес) (указатель);
В случае с массивом всё ещё проще - в языке С/С++ имя массива и _является_указателем_, т.е. указывает на первый элемент массива:
const char string[] = {"Это массив из символов (строка)"};
char *str = (char *) string;// Это указатель на первый элемент массива символов, и, как видно из присваивания, является эквивалентом предыдущего объявления.
char *str1 = (char *) &string;// Указатель, указывающий на ячейку памяти, где лежит указатель на первый элемент массива
printf("
%s", string);// Печатаем строку
printf("
%s", str);// Печатаем ту же самую строку
printf("
%s", str1);// То же самое
char *edit1st(char *str) {// Функция, принимающая указатель на строку и возвращающая указатель на строку; меняет третий символ на прописную букву 'O'
str[2] = 'O';// Меняем третий символ (массивы нумеруются с нуля!)
*(str + 2) = 'O';// То же самое
return str;// Возвращает указатель на массив, а не сам массив (ибо последнее - жрёт много ресурсов)
};
2, 3) На остальное Вам ответил предыдущий эксперт
Успехов!
--------- Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 6-ой класс)
Ответ отправлен: 20.10.2006, 10:35
Отвечает: Morgion
Здравствуйте, KInika!
1) Помимо сказанного есть ещё несколько отличий. На вскидку - указатель может указывать
на людой адрес, даже на несуществующий, ссылка же является псевдонимом перемен
1085;ой, работая с ссылкой на переменную вы работаете с самой переменной. То есть ссылка - это
второе имя.
2) Вы можете и не пользоваться директивами препроцессора, но какой в этом смысл? Дело в том,
что препроцессор во время препроцессирования файла содержищего директиву in
clude или define соответственно подгружает файл или делает макроподстановку, создаётся промежуточный
файл (он содержит только текст для компилятора, никаких include и define там быть не
может), который уже компилируется. Да - это то, как может работать любой компилятор. В частном
случае немного сложнее- предкомпиляция и т.п.
Ответ отправил: Morgion (статус: Студент)
Ответ отправлен: 21.10.2006, 16:00