Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

(Часть 1) (*Закрыта*)Я начинающий, подскажите пожалуйста, как...

1
11 ноября 2005 года
kot_
7.3K / / 20.01.2000
Уважаемый ALL!
Если вы только начинаете осваивать среду разработки ВСВ - предлагаю возникающие вопросы размещать в данной теме. Не создавайте пожалуста отдельные темы - типа "Как мне запустить свое приложение на другом компьютере", "Как перевести String в char*" и тому подобное. Такие темы будут закрываться с отсылку в эту. Не обижайтесь.
Кроме того, не брезгуйте плиз, пользоваться поиском хотя бы, по нескольким критериям. Иногда бывает так, вопрос который возник у вас не столь оригинален - вполне возможно, кто то уже спрашивал его до вас :) Поверьте, отвечать на одни и теже вопросы тоже не всегда интересно.
Если вы задаете свой вопрос на форуме - что бы получить наиболее эффективный ответ - следуйте пожалуйста несложным правилам. Они просты:
0. Опишите чего вы хотели добиться.
1. Опишите ошибку которая у вас возникла, по возможности с текстом самой ошибки.
2. Если вы считаете это необходимым - приведите фрагмент(пожалуста не помещайте в свой вопрос весь листинг) кода, на который жалуется компилятор, коротко описав переменные которые используются, и как они инициализируются. Исходники высылайте или выкладывайте только в том случае, если вас об этом просят.
3. Если проблема связана с функцией какой либо библиотеки - не стесняйтесь залезть в хелп и найти там ее описание. То чтовы не рубите в английском, зато читаете Рабле в оригинале - отнюдь не оправдание. Людей для которых английский - родной, здесь немного. Пользуйтесь словарем, это дает результаты :)
4. Не забывайте - может быть ВСВ и имеет раширения по сравнению со стандартом - но тем не менее это С++. Не забывайте проверить, что в ваш проект подключены все необходимые заголовочные файлы, а так же файлы библиотек.
5. Если вы задали вопрос один раз - не нужно его повторять или дублировать, или размещать посты типа "Ну что никто не знает" и т.д. Вы рискуете узнать много разных путей, но так и не получить нужный вам ответ.
6. Форум - дело сугубо добровольное. Здесь ни кто НЕ ОБЯЗАН искать ответы на ваши вопросы. Если вам отвечают - то это только исключительно из любви к вам. :)
7. Исходя из выше сказанного, если вам не отвечают - ну возможно вас не любят :)
8. Для тех, кому нужно написать курсовую, программу, решить контрольную или тому подобное - существует раздел форума Студентам
Размещайте, плиз, свои посты там. Сообщения размещенные в данной теме - не будут перемещаться - они будут удаляться.
9. Если вы хотите пообщаться, обсудить тему, не связанную с ВСВ - милости просим: В "Отдохнем". Флуд в данном разделе не приветствуется.
Ну вроде все. Если что забыл - или не так - поправьте.
Удачи.
Страницы:
1.9K
07 января 2006 года
aciDroN
25 / / 07.04.2003
Я хочу отлавливать эксепшены в одном месте, наивно предполагал, что для этого предназначена конструкция try catch в функции WinMain
Однако когда я пишу такое
 
Код:
try {
         Application->Initialize();
          //....
         Application->Run();
    }
    catch (AnsiString &exception){
          // мои действия
    }

то мне выдается окошко External exception.
(Если же писать подобный try catch в каждой функции, то всё ок)
Как такое победить?
12K
08 января 2006 года
chrono
34 / / 03.01.2006
Этот вопрос наверное самый дебильный, который я когда-либо писал, но он не даёт мне доделать программу.
------------
У меня одно число постоянно меняется,
нужно сделать так, чтобы, когда это число совпадёт с числом, которое написано в Edit'е появился Message.
1
08 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by chrono
Этот вопрос наверное самый дебильный, который я когда-либо писал, но он не даёт мне доделать программу.
------------
У меня одно число постоянно меняется,
нужно сделать так, чтобы, когда это число совпадёт с числом, которое написано в Edit'е появился Message.


Ну так в тот момент, когда оно меняется сравнивай с числом в Edit'е - если числа равны - выводи сообщение. Неужели быстрее написать, чем подумать?

1
08 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by aciDroN
Я хочу отлавливать эксепшены в одном месте, наивно предполагал, что для этого предназначена конструкция try catch в функции WinMain
Однако когда я пишу такое
 
Код:
try {
         Application->Initialize();
          //....
         Application->Run();
    }
    catch (AnsiString &exception){
          // мои действия
    }

то мне выдается окошко External exception.
(Если же писать подобный try catch в каждой функции, то всё ок)
Как такое победить?


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

12K
08 января 2006 года
chrono
34 / / 03.01.2006
Цитата:
Originally posted by kot_
Ну так в тот момент, когда оно меняется сравнивай с числом в Edit'е - если числа равны - выводи сообщение. Неужели быстрее написать, чем подумать?


Возможно, я не совсем правильно выразился я хотел сказать следующее:
Я не могу сравнить Caption Label'а с Text'ом в Edit'е.
В Edit'е написано число, а в Label'е оно постоянно меняется. Мне нужно при совпадении этих цифр, что бы появлялся Message(я знаю как прицепить Message). Я незнаю как их сравнить, нужен приблезительный код.(Я делаю напоминатель)
Вот вродебы объяснил всё нормально...

1
08 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by chrono
Возможно, я не совсем правильно выразился я хотел сказать следующее:
Я не могу сравнить Caption Label'а с Text'ом в Edit'е.


Что мешает? Религиозные убеждения? Так вроде ни в одной из религиий мира не запрещается сравнивать две строки? :)

Цитата:
Originally posted by chrono

В Edit'е написано число, а в Label'е оно постоянно меняется. Мне нужно при совпадении этих цифр, что бы появлялся Message(я знаю как прицепить Message). Я незнаю как их сравнить, нужен приблезительный код.(Я делаю напоминатель)


Представляю себе - о чем будет напоминать это чудо. Надо было начинать сразу с ОС. Чего мелочится с напоминателями.

Код:
int Var = 100;
Label1-Caption = IntToStr(Var);
 try{
 if(StrToInt(Edit1->Text)==Var){
 ShowMessage("Ogo-go-go!");
 }
 else
  ....
}
catch(...){
 ShowMessage("Введено не число. Фтопку!");
 Edit1->Text = 0;
}

или второй вариант:
 
Код:
if(Edit1->Text == Label1-Caption){
ShowMessage("Ogo-go-go!");
}
else ShowMessage("Nifiga!");
1.9K
08 января 2006 года
aciDroN
25 / / 07.04.2003
Цитата:
Originally posted by kot_
Прочесть о обработке исключений, прежде чем садится "программировать". Тогда наивных предположений будет меньше.


Эта тема специально создана для реализации ваших нераскрытых амбиций, господин "модератор"?
Переформулирую вопрос - почему порожденное исключение не ловится в winmain, если вопрос слишком сложный, чтобы ответить на него без ёрничания, то прошу вас воздержаться от флуда

И ещё более конкретнее - есть ли возможность централизованно ловить исключения от обработчиков контролов формы (не импользуя TApplicationEvents).

1
08 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by aciDroN

Переформулирую вопрос - почему порожденное исключение не ловится в winmain, если вопрос слишком сложный, чтобы ответить на него без ёрничания, то прошу вас воздержаться от флуда


Да ловится оно в winmain. Ловится. Просто не нужно учится программировать по форуму. И хоть немного думать (желательно головой), перед тем как задать вопрос. Если вы не обработаете исключение в месте его возникновения, то за вас это попытается сделать ОС, попытается завершить процесс и передаст(вероятно, если не обработает сама) управление ветке обработки исключений в момент завершения программы. Что бы этого не произошло - необходимо обрабатывать исключения там где они возникают. Если нужно делать это централизовано - нет проблем - пишется свой класс обработки исключений или функция в глобальной области видимости. Эти вопросы хорошо рассматриваются Рихтером, да и любая мало мальски серьезная литература по системному программированию как минимум одну главу посвящает SEH. Но ламерам читать некогда, у них масса проектов и дел, им нужно внимание и ответы на вопросы, возникающие у них в том месте на котором нормальные люди сидят.. ...
Звени без ерничанья не получилось. :) ;):D

1.9K
08 января 2006 года
aciDroN
25 / / 07.04.2003
Цитата:
Originally posted by kot_
Но ламерам читать некогда, у них масса проектов и дел, им нужно внимание и ответы на вопросы, возникающие у них в том месте на котором нормальные люди сидят.. ...
Звени без ерничанья не получилось. :) ;):D


За внимание оно конечно спасибо, но хочу заметить, раз назвался модератором ветки "Вопросы из того места, где сидят" (кстати, почему бы не переименовать :), то не стоит ждать здесь вопросов о клинчах и семафорах, имхо.

1
08 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by aciDroN
За внимание оно конечно спасибо, но хочу заметить, раз назвался модератором ветки "Вопросы из того места, где сидят" (кстати, почему бы не переименовать :), то не стоит ждать здесь вопросов о клинчах и семафорах, имхо.


Ладно, не бери в голову. :) Если погорячился - извини. Но мой первый совет - прежде чем создать пост, хотябы попытаться разобраться самому - остается в силе.

1.9K
08 января 2006 года
aciDroN
25 / / 07.04.2003
Цитата:
Originally posted by kot_
прежде чем создать пост, хотябы попытаться разобраться самому


Признаю, уже стыдно, ларчик то просто открывается.. Время создания моего поста шибко позднее, надо popup на форуме добавить "подумайте и заходите утром". Спасибо и можно мой флуд удалить
8) 8)

12K
13 января 2006 года
chrono
34 / / 03.01.2006
Извените, что я опять со своим сверх глупыми вопросами, но мож кто поможет:
Как создать программу на Borland C++, которая может изменять байты в PE-файлах?
Желательно исходник, статью, сайт, где это описано-короче говоря всё что может хоть как-то помочь.
1
14 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by chrono
Извените, что я опять со своим сверх глупыми вопросами, но мож кто поможет:
Как создать программу на Borland C++, которая может изменять байты в PE-файлах?
Желательно исходник, статью, сайт, где это описано-короче говоря всё что может хоть как-то помочь.


 
Код:
#include <fstream.h>
...
ofstream file("my.exe",ios::binary|ios::app);
file.seekp(0);
file.seekp(pos);
char *buff[3] ={0x22,0x23,0x24};
file.write(buff,sizeof(buff));
file.close();
16K
16 января 2006 года
ruskondor
1 / / 16.01.2006
Мне необходимо в TGroupBox добавить некоторые свойства (например, смена цвета названия при двойном клике мышкой). Для этого создал класс-наследник:
 
Код:
class THGroupBox: public TGroupBox
{
        __published:
                __fastcall void OnClick(TObject *Sender){ Application->MessageBox("!!!", "!!!", MB_OK); };
};

В данном коде должно появляться MessageBox() при двойном клике. Заменил в TForm1 TGroupBox на THGroupBox. При попытке сохранить исходный файл, или скомпилировать программу, выдается ошибка, что у меня неправильно объявлены типы. После отказа от замены на "правильные" программа запускается, но "не отрабатывает" событие?

Где здесь ошибка? И как надо правильно? Спасибо.
1
17 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by ruskondor
Мне необходимо в TGroupBox добавить некоторые свойства (например, смена цвета названия при двойном клике мышкой). Для этого создал класс-наследник:
 
Код:
class THGroupBox: public TGroupBox
{
        __published:
                __fastcall void OnClick(TObject *Sender){ Application->MessageBox("!!!", "!!!", MB_OK); };
};

В данном коде должно появляться MessageBox() при двойном клике. Заменил в TForm1 TGroupBox на THGroupBox. При попытке сохранить исходный файл, или скомпилировать программу, выдается ошибка, что у меня неправильно объявлены типы. После отказа от замены на "правильные" программа запускается, но "не отрабатывает" событие?

Где здесь ошибка? И как надо правильно? Спасибо.


Приведи пожалуйста сообщение об ошибке в оригинале. Объявление переопеределенных методов выглядит так:

 
Код:
class THGroupBox: public TGroupBox
{
protected:
TNotifyEvent FOnClick;
void __fastcall Click(void){  Application->MessageBox("!!!", "!!!", MB_OK);
 if(FOnClick)
  FOnClick(this);
 }
        __published:
             __property TNotifyEvent  OnClick{read=Click,write=Click};

Приблизительно так. Только функцию Сlick лучше вынести в .cpp файл естествено.
11K
18 января 2006 года
TheFeaR
24 / / 06.01.2006
есть
char recvbuf[500] = "";
после коннекта к серверу она забивается инфой о сервисе
как еще очистить(без цикла)???
если просто сделать
recvbuf[500] = "";
то компилер ругается
[C++ Error] Unit1.cpp(95): E2034 Cannot convert 'char *' to 'char'
1
18 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by TheFeaR
есть
char recvbuf[500] = "";
после коннекта к серверу она забивается инфой о сервисе
как еще очистить(без цикла)???
если просто сделать
recvbuf[500] = "";
то компилер ругается
[C++ Error] Unit1.cpp(95): E2034 Cannot convert 'char *' to 'char'


 
Код:
memset(recvbuf,0,sizeof(recvbuf));
11K
18 января 2006 года
TheFeaR
24 / / 06.01.2006
СПАСИБО!!:P :P :P :P



есть еще вопрос

есть
char sendbuf[100]="CWD soft\r\n";
как вместо soft вставить строку из RichEdit
( RichEdi1->Lines->Strings[0]; ) ???


если использовать
int b=123;
AnsiString a="Asdasd"+b+"qwer"
и вывести все это дело на экран то получится
Asdasd123qwer

но использовать Ansistring c сокетами то билдер ругается а проделать такую же фигню с
char sendbuf[100]="CWD soft\r\n"; не знаю как..

Сделал так!Если можно какнибудь упростить то все еще жду ответа!
 
Код:
AnsiString P="CWD "+RichEdit1->Lines->Strings[0]+"\r\n";
char *b = P.c_str();
12K
19 января 2006 года
IPz
30 / / 14.01.2006
Есть небольшая программа. 1 форма. на ней около 40 гаджетов типо edit, radiobutton, listbox, groupbox
. Плюс формочка с combobox. Плюс форма с 12 speedbutton и pagecontrol.
Все это взаимосвязано, попросту для заполнения обычной структуры и отгрузки ее в файл.

Это весит 1.4 мегабайт. Поставил Full Release, убрал Build With Runtime Packages, убралось там Debug Info.

Код примерно 200 строк, если убрать комментарии. Никаких встроенных картинок и вообще встроенной лажи нет. Вопрос - что я мог натупить, что приложуха такая тяжелая? Спасибо, извините за дурацкий вопрос
1
19 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by IPz
Есть небольшая программа. 1 форма. на ней около 40 гаджетов типо edit, radiobutton, listbox, groupbox
...
Код примерно 200 строк, если убрать комментарии. Никаких встроенных картинок и вообще встроенной лажи нет. Вопрос - что я мог натупить, что приложуха такая тяжелая? Спасибо, извините за дурацкий вопрос


Не понятен вопрос - что тебя удивляет? Это твоего кода 200 строк - а объем кода компонентов тебе в голову не пришло посчитать? :) тем более что большинство функциий вызываются как __fastcall т.е. если есть такая возможность компилятор преобразует ее в inline - функциию. Дополнитпельно ко всему этому компилятор линкует с ехе библиотеки менеджера памяти и все остальные.

12K
20 января 2006 года
IPz
30 / / 14.01.2006
Цитата:
Originally posted by kot_
Не понятен вопрос - что тебя удивляет? Это твоего кода 200 строк - а объем кода компонентов тебе в голову не пришло посчитать? :) тем более что большинство функциий вызываются как __fastcall т.е. если есть такая возможность компилятор преобразует ее в inline - функциию. Дополнитпельно ко всему этому компилятор линкует с ехе библиотеки менеджера памяти и все остальные.


Понятно. Но как уменьшить? Быть может убрать как то из списка линковки лишние модули, ну, это к примеру. я не даже знаю, привык принтф, сканф

12K
20 января 2006 года
IPz
30 / / 14.01.2006
Вообщем, за компактность надо заплатить прямым программированием API... Жаль, а так, задумка Борланда с RAD отличнейшая (На мой взгляд)
1
20 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by IPz
Вообщем, за компактность надо заплатить прямым программированием API... Жаль, а так, задумка Борланда с RAD отличнейшая (На мой взгляд)


Если стадия разработки твоего проекта - именно оптимизация - первое - установи в свойствах компилятора оптимизация по размеру, соответственно в некоторых случаях программа будет работать неного медленнее (зависит от задач), но размер файла уменьшится (от 2% до 30% - опять же в зависимости от проекта). Затем в опциях компилятора установи - "Объединять идентичные строки". Для уменьшения размера так же можно отказаться от использования класса String & AnsiString - использовать символьные массивы. Использовать модульное программирование - т.е. вынести большинство функций в длл. Использовать упаковщик.
включить Build With Runtime Packages
В зависимости от твоего кода (sic!) и правильного использования вышеуказанного в различных сочетаниях можно добиться вполне приличных размеров.
Вобще если размер на столько уж критичен - лучше включить Build With Runtime Packages а необходимые библиотеки добавить на компьютер конечного пользователя при инсталляции.

15K
22 января 2006 года
Zillion
3 / / 21.01.2006
Подскажите пожалуйста, как организовать ввод и вывод двумерного символьного массива. Вот, что получилось у меня:

char** text_enter( int *n )
{
char **user_text;
int i, j, text_entered;

i = 0,
j = 0,
text_entered = 0; // Tekst eshe ne vveden

clrscr();
puts ( "\n Vvedite ishodniy tekst:" );
puts ( "\n (konec stroki - Enter, konec teksta - Ctrl+N)\n" );
user_text = (char**) malloc( sizeof (char*) ); // Pam'at' pod 1 simvol
for ( i = 0; *(*(user_text + i) + (j + 1)) != 0xe; i++ )
{
user_text = (char**) realloc( user_text, i*sizeof (char*)); // Pam'at' pod stroki
for ( j = 0; *(*(user_text + i) + (j + 1)) != '\r'; j++ )
{
*(user_text + i) = (char*) realloc ( *(user_text + i),(j + 2)*sizeof (char*) );
*(*(user_text + i) + j) = getche(); // Pam'at' pod // simvoli
}
printf( "\n" );
}
*(*(user_text+i)+(j+1)) = eot;// Dobavlenie //priznaka konca stroki
*n = i - 1; // Sohranenie kolichestva strok v // tekste
text_entered = 1; // Tekst vveden
return ( user_text );

Если делать одномерным массивом, то все работает прекрасно, а так не хочет. Буду благодарен, если укажете мне на мою ошибку. :-?
1
26 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Zillion
Подскажите пожалуйста, как организовать ввод и вывод двумерного символьного массива. Вот, что получилось у меня:

char** text_enter( int *n )
{
char **user_text;
int i, j, text_entered;

i = 0,
j = 0,
text_entered = 0; // Tekst eshe ne vveden

clrscr();
puts ( "\n Vvedite ishodniy tekst:" );
puts ( "\n (konec stroki - Enter, konec teksta - Ctrl+N)\n" );
user_text = (char**) malloc( sizeof (char*) ); // Pam'at' pod 1 simvol
for ( i = 0; *(*(user_text + i) + (j + 1)) != 0xe; i++ )
{
user_text = (char**) realloc( user_text, i*sizeof (char*)); // Pam'at' pod stroki
for ( j = 0; *(*(user_text + i) + (j + 1)) != '\r'; j++ )
{
*(user_text + i) = (char*) realloc ( *(user_text + i),(j + 2)*sizeof (char*) );
*(*(user_text + i) + j) = getche(); // Pam'at' pod // simvoli
}
printf( "\n" );
}
*(*(user_text+i)+(j+1)) = eot;// Dobavlenie //priznaka konca stroki
*n = i - 1; // Sohranenie kolichestva strok v // tekste
text_entered = 1; // Tekst vveden
return ( user_text );

Если делать одномерным массивом, то все работает прекрасно, а так не хочет. Буду благодарен, если укажете мне на мою ошибку. :-?


Пока можно указать на одну ошибку - наивно думать что у большинства достаточно времени что бы разбираться с плохоотформатированным и непрокоментированным чужим кодом, при том строя предположения о том - что имел виду автор говоря - неполучается. Для меня к примеру вовсе не очевидно - зачем передавать в функцию указатель на число, счем єто связано, с какой ошибкой столкнулся автор? Далеко не факт что мне сейчас интересны вопросы строковых массивов, что я сразу кинусь создавать и тестировать данный проект. По тому, что бі получить внятній ответ - лучше и вопрос задавать внятно.

11K
01 февраля 2006 года
TheFeaR
24 / / 06.01.2006
как можно сделать перетаскиваение элементов из 1 листбокса в другой???
13K
02 февраля 2006 года
poland
34 / / 16.01.2006
Цитата:
Originally posted by TheFeaR
как можно сделать перетаскиваение элементов из 1 листбокса в другой???


Ключевые слова Drag, OnDragOver, OnDragDrop

1
02 февраля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by TheFeaR
как можно сделать перетаскиваение элементов из 1 листбокса в другой???


Код:
void __fastcall TfmMain::lvListProdDragDrop(TObject *Sender,
      TObject *Source, int X, int Y)
{
TListItem *LI;
  TListView *S = ((TListView*)Source);
  LI = ((TListView*)Sender)->Items->Add();

}
void __fastcall TfmMain::lvTimeDragOver(TObject *Sender, TObject *Source,
      int X, int Y, TDragState State, bool &Accept)
{
 if(Sender!=Source)Accept = Source->ClassNameIs("TListView");
}
void __fastcall TfmMain::lvTimeDragDrop(TObject *Sender, TObject *Source,
      int X, int Y)
{
  Equal=false;
  bDown = true;
  TListView *S = ((TListView*)Source);
  TListItem *LIG;
  int Count  = lvTime->Items->Count;
  for(int i=0;i<Count;i++){
   if(*(AnsiString*)(lvTime->Items->Item->SubItems->Objects[0])==*(AnsiString*)(S->Items->Item[S->ItemIndex]->SubItems->Objects[0]))
   {
    LIG = lvTime->Items->Item;
    Equal= true;
    lvListProd->EndDrag(false);
    return;
   }
  }
  LIG = ((TListView*)Sender)->Items->Add();
  LIG->Caption = S->Items->Item[S->ItemIndex]->Caption;
  LIG->SubItems->AddObject(S->Items->Item[S->ItemIndex]->SubItems->Strings[0],S->Items->Item[S->ItemIndex]->SubItems->Objects[0]);

}
/

Это пример для TListView- для листбокса - тоже самое - но соответственно так как для листбокса.
Пример взят из рабочего кода, он не полный и использовать копи/пасте НЕ НУЖНО.
11K
02 февраля 2006 года
TheFeaR
24 / / 06.01.2006
Сделал так:(таскать можно из 1 во второй и из 2 в первый)
Осталось токо селать проверку на индекс(
-1) ато вылетает с ошыбкой когда промахиваешься и цепляешь пустое место

Код:
//---------------------------------------------------------------------------
void __fastcall TForm1::OnDragOver(TObject *Sender, TObject *Source, int X,
      int Y, TDragState State, bool &Accept)
{
Accept=Source=ListBox2;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::DragDrop(TObject *Sender, TObject *Source, int X,
      int Y)
{
ListBox2->Items->Add(ListBox1->Items->Strings[ListBox1->ItemIndex]);
ListBox1->Items->Delete(ListBox1->ItemIndex);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::OnDrGover(TObject *Sender, TObject *Source, int X,
      int Y, TDragState State, bool &Accept)
{
Accept=Source=ListBox1;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::OnDragDrop(TObject *Sender, TObject *Source, int X,
      int Y)
{
ListBox1->Items->Add(ListBox2->Items->Strings[ListBox2->ItemIndex]);
ListBox2->Items->Delete(ListBox2->ItemIndex);
}
//---------------------------------------------------------------------------
1
02 февраля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by TheFeaR
Сделал так:(таскать можно из 1 во второй и из 2 в первый)
Осталось токо селать проверку на индекс(
-1) ато вылетает с ошыбкой когда промахиваешься и цепляешь пустое место


Чтоб не промахиваться - обрабатывай нажатие клавиши мыши и там проверяй индекс

16K
14 февраля 2006 года
TimZ
5 / / 13.02.2006
Привет всем!

Хочу написать такую программу, которая запрещает доступ к различным настройкам компьютера. Это в общем.
Подробнее: Нужно, чтобы пользователь Windows XP без прав администратора не мог менять обои раб.стола, удалять или перемещать значки на рабочем столе и в "Программах".
Скорее всего, это будет самостоятельная программка, без дистанционного контроля (хотя, такой варинт не исключаю).
По ходу дела могут возникнуть дополнительные требования, но на первом этапе хотелось бы знать с чего начать? Под силу ли новичку написать такую прогу?

P.S. Установил C++Builder несколько дней назад, впервые. Т.е. - я полный..., мягко говоря, начинающий.
В форуме найти ничего не смог, потому что даже не знаю, как назвать такую прогу и какие термины могут употребляться.

Заранее спасибо.
1
14 февраля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by TimZ
Привет всем!

Хочу написать такую программу, которая запрещает доступ к различным настройкам компьютера. Это в общем.
Подробнее: Нужно, чтобы пользователь Windows XP без прав администратора не мог менять обои раб.стола, удалять или перемещать значки на рабочем столе и в "Программах".
Скорее всего, это будет самостоятельная программка, без дистанционного контроля (хотя, такой варинт не исключаю).
По ходу дела могут возникнуть дополнительные требования, но на первом этапе хотелось бы знать с чего начать? Под силу ли новичку написать такую прогу?

P.S. Установил C++Builder несколько дней назад, впервые. Т.е. - я полный..., мягко говоря, начинающий.
В форуме найти ничего не смог, потому что даже не знаю, как назвать такую прогу и какие термины могут употребляться.

Заранее спасибо.


Для начинающего, ИМХО, весьма неподъемная задача. Твое приложение должно по сути подменить рабочий стол винды, или как другой минимальный вариант - при запуске проверять права доступа на папки "Рабочий стол" и "Главное меню" и при необходимости выставлять нужные. Если у тебя есть опыт системного программирования в других средах разработки (С++) - то в общем то проблем не будет - задача геморная, но вполне решаемая. Если весь опыт программирования у тебя - несколько дней - тогда ...гы :)

16K
14 февраля 2006 года
TimZ
5 / / 13.02.2006
Цитата:
Originally posted by kot_
Если у тебя есть опыт системного программирования в других средах разработки (С++) - то в общем то проблем не будет - задача геморная, но вполне решаемая. Если весь опыт программирования у тебя - несколько дней - тогда ...гы :)



Да, полный ГЫ... :-)

А если, скажем... ну, для начала, попробовать сделать программку, которая просто отключает мышь и клавиатуру, пока не получит комманду с сервера по сети.
Это проще?

1
15 февраля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by TimZ
Да, полный ГЫ... :-)

А если, скажем... ну, для начала, попробовать сделать программку, которая просто отключает мышь и клавиатуру, пока не получит комманду с сервера по сети.
Это проще?


:) Ну пробуй - узнаешь :) :) :)

16K
15 февраля 2006 года
TimZ
5 / / 13.02.2006
Цитата:
Originally posted by kot_
:) Ну пробуй - узнаешь :) :) :)




Хе-хе... Ну, спасибо за совет.. :-)
Если бы еще подсказали как попробовать....

1
15 февраля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by TimZ
Хе-хе... Ну, спасибо за совет.. :-)
Если бы еще подсказали как попробовать....


Посмотри в билдеровких примерах - как работать с сетью, как слушать сокет и т.д.

16K
15 февраля 2006 года
Dvor_nik
5 / / 15.02.2006
Здравствуйте. Я очень долго сидел на Delphi, и С++ только начал изучать (+ курс лекций), поэтому мой вопрос так туп.
Есть ли в С++ аналог процедуры или как заставить функцию возвращать больше одного значения? В Паскале для этого были процедуры, и все было просто и понятно.
 
Код:
procedure Example(A:Integer; B:Integer; Var C:Integer; Var D:Integer);
 Begin
  C:=A+B;
  D:=A*B;
 End;
Потом вызов процедуры Example(5, 3, C1, D1) и все ок

А в return и C и D не затолкаешь. Неужели только через глобальные переменные? Просто сложно перейти сразу с Паскаля ни Си :(
1
15 февраля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Dvor_nik
Здравствуйте. Я очень долго сидел на Delphi, и С++ только начал изучать (+ курс лекций), поэтому мой вопрос так туп.
Есть ли в С++ аналог процедуры или как заставить функцию возвращать больше одного значения? В Паскале для этого были процедуры, и все было просто и понятно.
 
Код:
procedure Example(A:Integer; B:Integer; Var C:Integer; Var D:Integer);
 Begin
  C:=A+B;
  D:=A*B;
 End;
Потом вызов процедуры Example(5, 3, C1, D1) и все ок

А в return и C и D не затолкаешь. Неужели только через глобальные переменные? Просто сложно перейти сразу с Паскаля ни Си :(


В билдере это будет выглядеть так:

 
Код:
void Example(int A, int B, int &C, int &D){
 C = A+B;
 D = A*B;
}
int C1,D1;
Example(5,3,C1,D1);

это называется - передача значения по ссылке. Так же в фукцию можно передать указатель на переменную. Смысл один и тот же - в функцию передается адрес переменной и по этому адресу помещается результирующее значение.
16K
15 февраля 2006 года
Dvor_nik
5 / / 15.02.2006
Цитата:
Originally posted by kot_
В билдере это будет выглядеть так:
 
Код:
void Example(int A, int B, int &C, int &D){
 C = A+B;
 D = A*B;
}
int C1,D1;
Example(5,3,C1,D1);

это называется - передача значения по ссылке. Так же в фукцию можно передать указатель на переменную. Смысл один и тот же - в функцию передается адрес переменной и по этому адресу помещается результирующее значение.


Правильно ли я понял:
В результате в С1 и D1 запишется значения С и D. &C - это адрес переменной-параметра (в нашем сл это адрес С1), те в функции переменная С - это ссылка на С1 и при ее изменании меняесся и С1. И return писать не нужно. Верно я понял?
Про указатель: те если есть какая -то глобальная переменная С то можно создать Функцию с параметром *С и *D:

 
Код:
void Example(int A, int B, int *C, int *D){
 C = A+B;
 D = A*B;
}
int C1,D1;
Example(5,3,C1,D1);

Опять верно ли я понял: *С - при вызове функции это указатель на С1, и тогда в функции С это сама С1? Примерно так?
1
15 февраля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Dvor_nik
Правильно ли я понял:
В результате в С1 и D1 запишется значения С и D. &C - это адрес переменной-параметра (в нашем сл это адрес С1), те в функции переменная С - это ссылка на С1 и при ее изменании меняесся и С1. И return писать не нужно. Верно я понял?


Да. Этот прием используется достаточно часто если функция должна вернуть более одного параметра. Единственно, что бы не плодить функции с сумашедшим числом параметров в нее как правило передают указатель на структуру - т.е. этот пример можно переписать примерно так:

Код:
struct TParam{
int C;
int D;
};

void Example(const int A,const int B,TParam *param){
param->C = A+B;
param->D = A*B;
}
TParam param;
param.C = 0;param.D = 0;
Example(5,3,&param);

Цитата:
Originally posted by Dvor_nik

Про указатель: те если есть какая -то глобальная переменная С то можно создать Функцию с параметром *С и *D:
 
Код:
void Example(int A, int B, int *C, int *D){
 C = A+B;
 D = A*B;
}
int C1,D1;
Example(5,3,C1,D1);

Опять верно ли я понял: *С - при вызове функции это указатель на С1, и тогда в функции С это сама С1? Примерно так?


Примерно так. Только если функция требует указатель тогда ее вызов будет выглядеть так:

 
Код:
void Example(int A, int B, int *C, int *D){
 *C = A+B;
 *D = A*B;
//Что бы присвоить значение указатель нужно разименовать обязательно.
}

Example(5,3,&C1,&D1);

или надо объявлять указатель на переменные С1 и D1 или иначе ты получишь ошибку при компиляции. Простые типы как правило передаются или по ссылке - если планируется использовать ее значение в дальнейшем или непосредственно. По указателю как правило передаются пользовательские типы данных(классы структуры массивы). Если переменная не будет изменятся в процессе работы функции ее лучше передавать как константную. Ну и еще нюанс - в реальной программе переменные лучше инициализировать перед тем как использовать. Будет меньше проблем.
Ну и рекомендую читать Страуструпа - с начала может будет тяжело и непонятно - зато когда въедеш - проблем не будет.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог