(Часть 1) (*Закрыта*)Я начинающий, подскажите пожалуйста, как...
Если вы только начинаете осваивать среду разработки ВСВ - предлагаю возникающие вопросы размещать в данной теме. Не создавайте пожалуста отдельные темы - типа "Как мне запустить свое приложение на другом компьютере", "Как перевести String в char*" и тому подобное. Такие темы будут закрываться с отсылку в эту. Не обижайтесь.
Кроме того, не брезгуйте плиз, пользоваться поиском хотя бы, по нескольким критериям. Иногда бывает так, вопрос который возник у вас не столь оригинален - вполне возможно, кто то уже спрашивал его до вас :) Поверьте, отвечать на одни и теже вопросы тоже не всегда интересно.
Если вы задаете свой вопрос на форуме - что бы получить наиболее эффективный ответ - следуйте пожалуйста несложным правилам. Они просты:
0. Опишите чего вы хотели добиться.
1. Опишите ошибку которая у вас возникла, по возможности с текстом самой ошибки.
2. Если вы считаете это необходимым - приведите фрагмент(пожалуста не помещайте в свой вопрос весь листинг) кода, на который жалуется компилятор, коротко описав переменные которые используются, и как они инициализируются. Исходники высылайте или выкладывайте только в том случае, если вас об этом просят.
3. Если проблема связана с функцией какой либо библиотеки - не стесняйтесь залезть в хелп и найти там ее описание. То чтовы не рубите в английском, зато читаете Рабле в оригинале - отнюдь не оправдание. Людей для которых английский - родной, здесь немного. Пользуйтесь словарем, это дает результаты :)
4. Не забывайте - может быть ВСВ и имеет раширения по сравнению со стандартом - но тем не менее это С++. Не забывайте проверить, что в ваш проект подключены все необходимые заголовочные файлы, а так же файлы библиотек.
5. Если вы задали вопрос один раз - не нужно его повторять или дублировать, или размещать посты типа "Ну что никто не знает" и т.д. Вы рискуете узнать много разных путей, но так и не получить нужный вам ответ.
6. Форум - дело сугубо добровольное. Здесь ни кто НЕ ОБЯЗАН искать ответы на ваши вопросы. Если вам отвечают - то это только исключительно из любви к вам. :)
7. Исходя из выше сказанного, если вам не отвечают - ну возможно вас не любят :)
8. Для тех, кому нужно написать курсовую, программу, решить контрольную или тому подобное - существует раздел форума Студентам
Размещайте, плиз, свои посты там. Сообщения размещенные в данной теме - не будут перемещаться - они будут удаляться.
9. Если вы хотите пообщаться, обсудить тему, не связанную с ВСВ - милости просим: В "Отдохнем". Флуд в данном разделе не приветствуется.
Ну вроде все. Если что забыл - или не так - поправьте.
Удачи.
// и т.д.
// и т.д.
благодарю, разобрался:) у меня возник ещё один вопрос - как по массиву i-й строки в Tmemo бегать:? кроме как создавать копию записывая в другой массив и работать с ним есть другие варианты:?
и ещё) как избежать многословия типа
{
EnterValue(0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B1Click(TObject *Sender)
{
EnterValue(1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B2Click(TObject *Sender)
{
EnterValue(2);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B3Click(TObject *Sender)
{
EnterValue(3);
}
.....
void __fastcall TForm1::BnClick(TObject *Sender)
{
EnterValue(n);
}
можно както по другому это написать не расписывая каждую кнопку:?
Каждой кнопке присваиваешь Tag по-порядку (1,2,3,...), пишешь 1 функцию обработчика событий нажатия на кнопку и вешаешь ее на каждую кнопку. В обработчике пишешь:
{
EnterValue((Sender as TButton)->Tag);
}
...
можно както по другому это написать не расписывая каждую кнопку
[/quote]
Если используется TButton, значит символы "виртуальной клавиатуры" отображаются не через рисунки, а введены в Caption.
Значит всё гораздо проще и элегантней
{
TButton *btn = (TButton*) Sender; //Приводим источник события к типу
Edit1->Text = Edit1->Text + btn->Caption; // Для кнопки "A" будет именно "A" :D
}
Есть у меня на форме ComboBox1, значения Items, например, уже прописаны {"Строка1", "Строка2", "Строка2"}
Как мне при Form::OnShow заставить ComboBox принять первое значение из уже утверждённого списка ("Строка1")? или любое, которое я захочу (например, "Строка2")?
{
int i;
ComboBox1->Style = csDropDownList;
for (i = 0; i < 3; i++) {
ComboBox1->Items->Add("Строка" + IntToStr(i+1));
}
ComboBox1->Text = ComboBox1->Items[0].GetText(); //не получается - пустой...
ComboBox1->ItemIndex = 0; // вот мне и "Строка1"... :)
}
Уважаемые знатоки, вопрос для вас: почему не срабатывает вариант №1?
Есть у меня на форме ComboBox1, значения Items, например, уже прописаны {"Строка1", "Строка2", "Строка2"}
Как мне при Form::OnShow заставить ComboBox принять первое значение из уже утверждённого списка ("Строка1")? или любое, которое я захочу (например, "Строка2")?
{
int i;
ComboBox1->Style = csDropDownList;
for (i = 0; i < 3; i++) {
ComboBox1->Items->Add("Строка" + IntToStr(i+1));
}
ComboBox1->Text = ComboBox1->Items[0].GetText(); //не получается - пустой...
ComboBox1->ItemIndex = 0; // вот мне и "Строка1"... :)
}
Уважаемые знатоки, вопрос для вас: почему не срабатывает вариант №1?
Так как ComboBox имеет стиль csDropDownList, Вы не можете изменить свойство Text, поэто му нужно использовать именно вариант с ItemIndex'ом. Более того, конструкция
не верна. Правильно надо писать
Помогите с решением проблемы:
объявляю структуру примерно так:
typedef struct{
char ch[4];
int in;
DynamicArray <int> Array;
} global;
Далее если переменную типа global объявить так:
global a;-все нормально работает, но если так:
global * a;-возникают проблемы с DynamicArray-никто не поможет разобраться?
Телепаты в отпуске.
Не компилируется, ошибка :( . Помогите, плиз, как надо правильно сделать?!
как описывается менюайтем:
const AnsiString ACaption,
TShortCut AShortCut,
bool AChecked,
bool AEnabled,
Classes::TNotifyEvent &AOnClick,
THelpContext hCtx,
const AnsiString AName);
а вот из хелпа Билдера пример
This code displays a new menu named MyMenu when the user clicks the button.
{
TMenuItem *Item1 = NewItem("New item",
TextToShortCut("Ctrl+N"),
false,
true,
Action1->OnExecute,
0,
"Item1");
Menu = NewMenu(TForm1, "MyMenu", &Item1, 0);
}
Есть функция OnClick(TObject *Sender)
Как из этого Sender'a вынуть значение tag (Класс = TMenuItem)?
TMenutem *Item = (TMenutem*) Sender; // Грубое приведение
TMenutem *Item = dynamic_cast <TMenutem*> (Sender);
if (Item != NULL) // Если Sender не элемент класса TMenuItem, то Item будет NULL
[COLOR="Gray"]Оффтоп: почему в списке форума видны только последние 4 страницы тем? как посмотреть остальные?[/COLOR]
Я поставила активной Release build, сняла галочку с use RTL а также с Use Runtime Packages.
Как только я ставлю галочку на Packages, все нормально компилится, но файл невозможно запустить на другом компе. Как только снимаю галку, так сразу ошибка [Linker Error] Error: Unable to open file 'PERFGRAP.RES' :(
он в ..\Borland\BDS\4.0\Demos\CPP\Controls
Я его перетащила в ..\Borland\BDS\4.0\lib\ потому что в шестом билдере такой же файл в либах лежит и после этого еще отключила галочку No state files там же где отключается RTL, и, естественно, отключила Runtime Packages и все заработало!!! Ура!
У меня есть файл 1.xls. В нем в ячейке B2 записано значение 100. Как мне его открыть, прибавить к этому значению 100 и записать полученных результат в текстовый файл 1.txt.
спасибо
Пока всё нормально. В Unit2.cpp наверху пишу
#include <glu.h>
Потом пытаюсь сделать Билд, но Билдер выдаёт типа нашёл дохренищща ошибок в gl.h ! Это же охренеть надо! Главное не в моих файлах ошибку нашёл, а в своих же! Абсурд!
Пытался создать классы для работы с OpenGL, но ткпой Билдер мне всё запорол! Переустановил ведь ровно полчаса назад, а всё равно такая же фигня!
Помогите как исправить всё это! Очень вас прошу!
Название твоих модулей должно отличаться от системных...
Также нужен алгоритм расстановки (фамилий)в алфавитном порядке. Я пока только наинаю изуать си, поэтому интересует реализация через стандартные средсва (if,for,while и т.д.). Находить конкретный(max/min) элемент в массиве я умею, а как попроще добится изложенного выше, увы пока не догадываюсь:{
stdlib.h:
void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *))
У меня есть файл 1.xls. В нем в ячейке B2 записано значение 100. Как мне его открыть, прибавить к этому значению 100 и записать полученных результат в текстовый файл 1.txt.
http://forum.codenet.ru/showthread.php?t=26390
8. Как ускорить вывод/загрузку данных в/из Excel?
Form1->Canvas->Polygon(points, 3);
на форме рисуется полигоны.
Подскажите плз. как очистить форму от них потм.
http://www.codenet.ru/progr/cpp/sprd/filesize.php -эт раз, но я делаю так:
int fh=FileOpen(OpenDialog1->FileName,fmOpenRead);//открываем файл
int ll=FileSeek(fh,0,2);//В ll будет размер файла в байтах
FileSeek(fh,0,0);//Позиция на начало файла
спасибо
int iAttributes = faAnyFile;
if(OpenDialog1->Execute())
{
if (FindFirst(OpenDialog1->FileName, iAttributes, sr) == 0)
Label1->Caption = AnsiString(sr.Size);
FindClose(sr);
}
Также нужен алгоритм расстановки (фамилий)в алфавитном порядке. Я пока только наинаю изуать си, поэтому интересует реализация через стандартные средсва (if,for,while и т.д.). Находить конкретный(max/min) элемент в массиве я умею, а как попроще добится изложенного выше, увы пока не догадываюсь:{
void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *))
qsort реализует пузырьковую сортировку. Есть и другие алгоритмы.
См. http://program.rin.ru/razdel/html/765.html
http://program.rin.ru/razdel/html/789.html
Form1->Canvas->Polygon(points, 3);
на форме рисуется полигоны.
Подскажите плз. как очистить форму от них потм.
unit1.h
{
__published: // IDE-managed Components
TButton *Button4;
TButton *Button5;
TButton *Button6;
void __fastcall Button4Click(TObject *Sender);
void __fastcall FormPaint(TObject *Sender);
void __fastcall Button5Click(TObject *Sender);
void __fastcall Button6Click(TObject *Sender);
private: // User declarations
bool CanPaint; // <--- он нам нужен...
public: // User declarations
__fastcall TForm1(TComponent* Owner);
unit1.cpp
void __fastcall TForm1::Button4Click(TObject *Sender)
{
bool t = CanPaint;
CanPaint = false;
this->Refresh();
CanPaint = t;
}
// ну, это понятно...
void __fastcall TForm1::FormPaint(TObject *Sender)
{
if(CanPaint)
{
TPoint points[4];
points[0] = Point(10,10);
points[1] = Point(30,10);
points[2] = Point(130,30);
points[3] = Point(240,120);
this->Canvas->Brush->Color = clTeal;
this->Canvas->Polygon(points, 3);
}
}
// нарисовать полигон
void __fastcall TForm1::Button5Click(TObject *Sender)
{
CanPaint = true;
this->Refresh();
}
// убрать полигон
void __fastcall TForm1::Button6Click(TObject *Sender)
{
CanPaint = false;
this->Refresh();
}
Меню Project \ Options, на вкладке Packages снимается флаг Build with runtime package. После чего полученный exe никаких dll & bpl не требует.
Подключение к нету через VPN-соединение.
Как только обрывается связь, возникает собтие OnInvalidHost и начинает работать этот код:
{
StatusBar1->SimpleText = "Обрыв соединения. Пытаюсь соединиться...";
try
{
NMPOP31->Host = Edit1->Text;
NMPOP31->UserID = Edit2->Text;
NMPOP31->Password = Edit3->Text;
NMPOP31->Connect();
}
catch (Exception &e) {}
StatusBar1->SimpleText = "Соединение восстановлено!";
Timer2->Enabled = true;
}
Но как только соединение по протоколу POP3 восстанавливается, вываливается форточка с ошибкой: "Null Remote Address".
Закрываю окно с ошибкой и программа работает дальше нормально, т.е. по таймеру периодически соединяется с почтовым сервером и проверяет почтовый ящик.
Ситуация аналогична, как при запуске из отладчика, так и уже скомпилированного файла в винде.
Где копать? :(
Вопросы:
1. Что делает таймер?
2. Какое значение получает параметр Handled?
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "cstring.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ListBox1->Items->LoadFromFile("text.txt") ;
Edit10->Text = ListBox1->Items->Count;
Timer1->Enabled = false;
Timer1->Interval = 60000;
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (NMPOP31->Connected)
{
StatusBar1->SimpleText = "Connect";
NMPOP31->Disconnect();
StatusBar1->SimpleText = "Disconnect";
}
else
{
NMPOP31->Host = Edit1->Text;
NMPOP31->UserID = Edit2->Text;
NMPOP31->Password = Edit3->Text;
NMPOP31->Connect();
Label10->Caption = NMPOP31->MailCount;
StatusBar1->SimpleText = "Connect";
}
if (NMPOP31->MailCount > 0)
{
for (int f=1; f<=NMPOP31->MailCount; f++)
{
NMPOP31->DeleteMailMessage(f);
}
NMPOP31->Disconnect();
StatusBar1->SimpleText = "Disconnect";
Timer1->Enabled = true;
}
//---------------------------------------------------
void __fastcall TForm1::NMPOP31InvalidHost(bool &Handled)
{
StatusBar1->SimpleText = "Обрыв соединения. Пытаюсь соединиться...";
try
{
NMPOP31->Host = Edit1->Text;
NMPOP31->UserID = Edit2->Text;
NMPOP31->Password = Edit3->Text;
NMPOP31->Connect();
}
catch (Exception &e) {}
StatusBar1->SimpleText = "Соединение восстановлено!";
Timer2->Enabled = true;
}
Таймер через минуту просто кликает по Button1.
В коде есть ещё SMTP, но я его не стал приводить, т.к. после возникновения ошибки дело до него не доходит.
Не понял по поводу значения Handled. Что там должно быть? :confused:
Я понимаю, что false или true, но что это даёт при присваивании этих значений?
Я понимаю, что false или true, но что это даёт при присваивании этих значений?
Как видно из заголовка функции, параметр Handled передаётся по ссылке. Далее читаем справку в Билдере.
Перевожу: "Событие OnInvalidhost вызывается, если хост неправильный. Если параметр Handled установить в TRUE, попытка соединения будет повторена. Если Handled - FALSE, то будет сгенерировано исключение."
Судя по всему, значение параметра остаётся ложным, соответственно после выхода из обработчика события, компонент должен генерировать Exception.
И ещё, как видно из приложенного к хелпу примера, делать повторный Connect не нужно. Даже, в некотором роде, нельзя.
Разобрался - просто нужно было отлавливать ещё и вторую ошибку.
Т.е. первая была: Host lookup failed, а за ней сразу вторая: Null remote address - вот её и надо было отлавливать конструкцией try {} catch (Exception &e) {}. :)
Заранее всем спасибо.