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

» FAQ по Borland C++ Builder

Автор: Zyava
Дата сообщения: 22.06.2007 14:13
Вопрос: а закем кнопку удалять? Сделать ей visible=false и подвинуть на ее место другую, а еще лучше просто в обработчике для кнопок (как я понимаю для всех кнопок функция-обработчик одна и та же) просто перенумеровать кнопки а последнюю из 20 кнопок скрыть (насколько я помню ты писал что кнопок будет не больше 20).
Автор: Mayskii
Дата сообщения: 22.06.2007 16:09
Zyava


Updated Всё я разобрался!!
Вобщем я буду делать так: Form1->Controls[i]->Free();
--------------
Вобщем такая фигня, ни Show() не Hide() на кнопки не применяются. Только ShowMessage и другие функции которые не влияют на саму кнопку. Не знаю почему. Сейчас вот только хочу разобраться с удалением. А так почти уже всё написал.

Да конечно кнопок не много но охото сразу привыкать к хорошему, компактному и эффективному коду,
не буду же я делать все 20 кнопок вручную.
А так вообщем можно накидать на ГУЮ контролов и готово, могу даже сейчас сделать, как вариант.

Вот код:

Заголовочный код:


[more]
class TForm1 : public TForm
{
__published:    // IDE-managed Components
TMainMenu *ShorCuts;
TMenuItem *Options1;
TMenuItem *NewButton1;
void __fastcall FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift);
void __fastcall Options1Click(TObject *Sender);
void __fastcall NewButton1Click(TObject *Sender);



private:     // User declarations

public: int i; char Ch[100]; int Size; int ix; TButton* MyButton;         // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall ButtonPressed(TObject *Sender);
};




[/more]

И код программы:


[more]
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
//---
}


//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonPressed(TObject *Sender)
{
MyButton->Free();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Options1Click(TObject *Sender)
{
Options->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::NewButton1Click(TObject *Sender)
{

if (ix <= 18){
Form1->Focused();
Clipboard()->GetTextBuf(Ch, 100);
Clipboard()->SetTextBuf(Ch);
Clipboard()->Close();
TButton* MyButton = new TButton (Form1);
MyButton->OnClick = ButtonPressed;
MyButton->Width = 33;
MyButton->Height = 33;
MyButton->Top = 8;
MyButton->Left = i + 8;
MyButton->Hint = Ch;
MyButton->ShowHint = Ch;
MyButton->ComponentIndex = ix;
MyButton->Parent = Form1;
//ShowMessage(MyButton->ComponentIndex);
i += 35;
ix++;


}
}



[/more]




Вот уже что-то вырисовывается, конечно, я это всё изменю, подправлю дизайн, сделаю алгоритм по работе со строками что бы он делал интервалы. Как уже говорил оно будет менеджером буфера обмена, у меня идея уже возникла давно, из Космических Рейнджеров, в этой игре была панель где игрок хранил всяку информацию: типа там прайс-листы товаров, задания...Вот. У меня вот вобщем то только из-за этого появилось желание изучить C++,
и он мне стал нравится.
Я раньше скриптил в VBScript, AutoIt но там конечно нету таких возможностей, что и говорить.

Да и большущее спасибо вам ребята, за помощь Я вообще люблю этот форум, тут и помогут и пенделя конечно могут дать, но от этого он только становится лучше и информативнее.
RUBOARD fore4ver!!Остапа понесло...)

А ещё такой вопросик посоветуйте толковую книгу по BCB, что нибудь типа справочника, а то вся куча книг котороя у меня есть учит только кнопки рисовать.

Автор: UserX3
Дата сообщения: 03.07.2007 20:58
Справочник Архангельского "Програмирование в Borland C++ Builder 6", в Е-буках я когда-то выкладывал (ссылка на пост h**p://forum.ru-board.com/topic.cgi?forum=93&topic=0488&start=180#5 ). Хорошая книга, куча справочного материала как ипо VCL,так и по C++.
Автор: WATERPROOF
Дата сообщения: 11.07.2007 14:41
а де FAQ? Можно в шапку вынести?
Автор: AnnaMsc2004
Дата сообщения: 24.07.2007 19:47
Updated Всё я разобрался!!
Вобщем я буду делать так: Form1->Controls[i]->Free();
--------------
Вобщем такая фигня, ни Show() не Hide() на кнопки не применяются. Только ShowMessage и другие функции которые не влияют на саму кнопку. Не знаю почему. Сейчас вот только хочу разобраться с удалением. А так почти уже всё написал.

Button1->Visible = false;
Автор: mrrex
Дата сообщения: 25.07.2007 18:05
Приветствую, многознающих всех!
Кто работает в эхотаге с OpenGL???
Есть проблема, отрисовка по методам тов. Краснова, производится слишком медленно.
Кто-нить может что-либо посоветовать?
И есче: Кто-нить хоть как нибудь прикручивал библиотеку GLScene к С++ Builder 2006?
Автор: artiyom
Дата сообщения: 30.09.2007 00:40
Когда компилирую файл на Си этим компилятором, то перед exe-файлом создается несколько промежуточных файлов: ilc .ild .obj .map. Как сделать чтобы они не создавались вообще или создавались в специально выделенной директории? Просто они мне мешают и приходится их каждый раз отделять от исходников с экзешками и удалять вручную.
Компилятор под XP.
IDE CodeBlocks
Автор: Kott
Дата сообщения: 30.09.2007 17:05
artiyom

Цитата:
Когда компилирую файл на Си этим компилятором, то перед exe-файлом создается несколько промежуточных файлов: ilc .ild .obj .map. Как сделать чтобы они не создавались вообще или создавались в специально выделенной директории? Просто они мне мешают и приходится их каждый раз отделять от исходников с экзешками и удалять вручную.

В свойствах проекта установить параметр Intermediate Output
Автор: artiyom
Дата сообщения: 05.10.2007 00:13
Kott
А если программы пишуться не в рамках проекта а просто?
Автор: Tantos
Дата сообщения: 05.10.2007 02:14
artiyom, создай батник такого вида

Код:
@echo off

del *.~*
del *.bak
del *.obj
del *.tds
Автор: 65daysofstatic
Дата сообщения: 02.11.2007 20:59
помогите, пож, ато у меня уже мозги плавятся, прога не хочет пахать только изза одной хрени: не могу обьявить функции в классе TForm, компилятор ругается, что неразрешенное обьявление.
где их вообще обьявлять и как?
Автор: Garrett
Дата сообщения: 02.11.2007 22:20
65daysofstatic
Мы не телепаты. Код в студию и выдели те части на которые ругается компилятор.
Автор: 65daysofstatic
Дата сообщения: 04.11.2007 13:23
прога создает массив, вводимый целиком в edit на form1, сортирует его пузырьком по возрастанию или убыванию в зависимости от радикнопки. отсортировав, массив должен быть выведен на form2.

ENTR.cpp:

Код: //---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "ENTR.h"
#include "RSLT.h"
#include "Error.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
exit(0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
try{
AnsiString text = Form1->Edit1->Text;
int i = 0, t = 0, k = 0, p = 0, l = text.Length();
for (i = 0; i < l; i++) {if ((text[i] == ',') || (text [i] == '.')) k++;} // - определение длины массива k

int *pMas;
pMas = new int[k]; // - динамическое обьявление массива длиной k
i = 0;

while (i < l) // заполнение массива
{
while ((text[i+t] != ',') || (text[i+t] != '.')) t++;
pMas[p] = text.SubString(i, i+t).ToInt();
p++;
i+=t;
t = 0;
}

if (Form1->RadioButton2->Checked == true) RVRS(pMas, k);
SORT(pMas, k); // - собственно сортировка
if (Form1->RadioButton2->Checked == true) RVRS(pMas, k);

Form2->Visible = true;
for (i = 0; i < k-1; i++) Form2->Edit1->Text += pMas[i] + ",";
Form2->Edit1->Text += ".";
}

catch (...) { Form3->Visible = true; }
}
//---------------------------------------------------------------------------

void TForm1::RVRS(int pMas[], int k)
{
for (int i = 0; i < k; i++) pMas[i] *= -1;
}
//---------------------------------------------------------------------------

void TForm1::SORT(int pMas[], int k)
{
int i = 0;
for (int s = 0; s < k-1; s++)
{
for (i; i < k-1; i++)
{
if (pMas[i] > pMas[i+1])
{
pMas[i] += pMas[i+1];
pMas[i+1] = pMas[i] - pMas[i+1];
pMas[i] = pMas[i] - pMas[i+1];
}
}
i = 0;
}
}
//---------------------------------------------------------------------------
void TForm1::DELT(int pMas[]) {delete pMas;}
//---------------------------------------------------------------------------
Автор: Garrett
Дата сообщения: 04.11.2007 19:41
65daysofstatic
Билдер сначала валится здесь
for (i = 0; i < l; i++) {if ((text[i] == ',') || (text [i] == '.')) k++;}
из-за того, что считает элементы Ansistring c единицы
т.е. надо так
for (i = 1; i <= l; i++) {if ((text[i] == ',') || (text [i] == '.')) k++;}

в этом блоке не учитывается, что юзер может завести "1,2,3", т.е к=2 вместо к=3
но для примера можно всегда набирать запятую в конце - "1,2,3,"

Другие блоки тоже можно переделать из-за Ansistring...

Удачи.
Автор: 65daysofstatic
Дата сообщения: 05.11.2007 14:24
Garrett

спасибо, этот пункт исправили, но все-таки не изза этого глюк, там ошибка выскакивает раньше, чем происходит обращение к функции Button1Click. если трессировать, то сразу после нажатия выскакиевает эта ошибка, а потом уже генерируется исклбчение, там же стоит try-catch - если что-то после 'try{' и до '}' не получается сделать, то происходит то, что идет после 'catch(соответствующая ошибка) {' и до '}', в данном случае для любой ошибки выполняется catch(...)
Автор: Garrett
Дата сообщения: 05.11.2007 15:13
65daysofstatic
Я сделал пример всавил твой код, и первой исключение появляется там где я сказал.
У бедиться очень просто. Перепиши свой код так
for (i = 0; i < l; i++) {
if ((text[i] == ',') || (text [i] == '.')) {
k++;
}
}
и запусти в отладчике. Исключение выйдет при попытке выполнения строки
if ((text[i] == ',') || (text [i] == '.')) {
а до неё компилятор дойдет нормально

PS. Советую вместо всяких массивов(простых и динамических) использовать вектора, списки, ассоциативные массивы, очереди.
Автор: diaz85
Дата сообщения: 05.11.2007 16:55
добрый день, у меня такой вопрос:
как сделать так, чтобы перевод строки в поле Memo отображался корректно?
Т.е. есть текстовый файлик, куда после строки я добавляю например putc (s, fp), s- это char s='\n'; а когда пытаюсь вывести содержимое этого файла в Memo например вот так
Memo1->Lines->Add(str), где str - это строка которая предварительно считана из текстового файла, то в конце каждой строки печатается какая то закорючка, хотя перевод и происходит. Помогите советом плз
Автор: 65daysofstatic
Дата сообщения: 05.11.2007 17:57
этот косяк исправлен, на него, сосбстно никто и не ругался, ошибка все равно та же самая выскакиевает при таком раскладе вещей:

Код: /* while (i <= l)
{ while ((text[i+t] != ',') || (text[i+t] != '.')) t++;
*/
pMas[p] = text.SubString(i, i+t).ToInt();
/* p++; i+=t; t = 0;
} */
Автор: Garrett
Дата сообщения: 05.11.2007 20:21
65daysofstatic
ну так i опять с нуля начинается...
Автор: 65daysofstatic
Дата сообщения: 05.11.2007 22:09
Garrett

нет, прямо перед этой строчкой было приравнивание i к нулю. фишка была в том, что условия нарасщивания t были заданы неверно, так получалось, что либо (text[i+t] != ','), либо (text[i+t] != '.') всегда верно.
потом:
pMas[p] = text.SubString(i, i+t).ToInt(); - тут неправильно фунция подстроки использована, вместо i+t надо писать t, вот и происходит запрос непонятно какого куска памяти.

прога почти заработала, осталось разобраться со значением, это вроде не сложно, у меня должно полчиться 0=Ъ

спасиба за помощь!
Автор: diaz85
Дата сообщения: 05.11.2007 22:11
65daysofstatic
спасибо, заработало


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


if (strstr(UpperCase((AnsiString)str).c_str(), UpperCase(p->Text).c_str())!=NULL)
m->Lines->Text=m->Lines->Text+str;
Автор: Tantos
Дата сообщения: 06.11.2007 08:06
diaz85, AnsiUpperCase тебе в помощь!
Автор: diaz85
Дата сообщения: 06.11.2007 09:44
Tantos
Спасибо, помогло
Автор: taraslis
Дата сообщения: 13.11.2007 11:22
Люди, такой вопрос: можно ли просто перекинуть библиотеку omp.h (параллельное программирование) из Visual Studio в Builder. И работать с ней как ни в чём не бывало? А то очень надо, а разбираться с VS не хочется.
Автор: Afrikoff2
Дата сообщения: 13.11.2007 19:49
C++Builer 2007 посоветуйте какой нибудь expert типа, VisualAssist X for VS.
(Особенно интересует - convert dot to -> опция).
Автор: diaz85
Дата сообщения: 18.11.2007 19:45
Добрый вечер.
Интересует следущий вопрос
при получении информации ф-ей recv в Memo выводятся только первые четыре символа отправлееной строки + WinSock 2.0. Т.е. отправляем допустим asdfg получаем asdfWinSock 2.0. Если оправлять < четырех символов, то нормально. В чем может быть причина.
И еще следом, как сокет в асинхронный режим перевести?
Автор: Garrett
Дата сообщения: 18.11.2007 20:20
c++ помещает литералы до 4 байтов в регистры(передает как есть).
Для длинных строк надо выделять память и передавать(обрабатывать) указатель.
Автор: Andrey32
Дата сообщения: 22.12.2007 21:00
Недавно стал изучать C++(неделю), использую Borland 2006. Написал программку строк в десять (решение уравненений n-й степени). Все работает. Но размер консольного екзешника-287 кБайт. Это нормльно, или я неправильно скомпилировал и там чего-то лишнее?
Автор: afiget
Дата сообщения: 23.12.2007 18:56

Цитата:
или я неправильно скомпилировал и там чего-то лишнее?

Не нашел в твоем сообщении прикрепленного адреса телепатического канала.

Исходник нужен плюс твои настройки среды.
Автор: Andrey32
Дата сообщения: 23.12.2007 21:52

Цитата:
Не нашел в твоем сообщении прикрепленного адреса телепатического канала.

Исходник нужен плюс твои настройки среды.

Не думаю, что нужен исходник.
"Hello world!" имеет екзешник такого же размера. Подключается только <iostream>.
А вот настройки среды :
Project->Options->Linker -снята галка "Use dynamic RTL"
Project->Options->Packages - снята галка "Build with runtime packages"

Страницы: 12345678910111213141516171819202122232425262728

Предыдущая тема: ms exchange


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