Обсуждение компонентов. Сравнение, фичи, проблемы - все в эту тему
Подкинь ссылочку если есть в инете. из делфи в билдер портировать можно вроде бы...
Подкинь ссылочку если есть в инете. из делфи в билдер портировать можно вроде бы...
на торри
В общем все было хорошо, пока я на форму не добавил меню.
В принципе причину косяка я выяснил и обращаюсь с вопросом, как его элегантней обойти.
Теперь подробности:
-имеем стандартную форму TForm.
-в конструкторе создаем экземпляр TShape.
-при изменении размеров формы, двигаем экземпляр TShape на середину формы.
-при закрытии формы, удаляем указатель на экземпляр TShape.
Код:
#pragma resource "*.dfm"
TForm1 *Form1;
TShape *testShape;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
testShape=new TShape(NULL);
testShape->Parent=Form1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
testShape->Left=Form1->ClientWidth/2-testShape->Width/2;
testShape->Top=Form1->ClientHeight/2-testShape->Height/2;
//ShowMessage("Form Resized");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
//ShowMessage("Form Closed");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete testShape;
//ShowMessage("Form Destroyed");
}
//---------------------------------------------------------------------------
Пока форма без меню, все хорошо. В конструкторе создается объект testShape. При изменении размера все правильно прописывается. При уничтожении формы, объект удаляется.
Но с меню начинаются непонятки. В конструкторе создается объект testShape. При изменении размера все правильно прописывается. А теперь фокус покус билдера. После уничтожении формы, если на форме расположено меню, происходит событие Resize, которое естественно обращается к уже удаленному объекту testShape. Далее естественно Ахтунг, Access Violation...
Спрашивать почему и какого х, после уничтожения формы с меню, вдруг происходит ресайз, я спрашивать не хочу, хотя факультативно хотелось бы получить ответ и на этот вопрос.
А интересует, как корректно удалить созданные объекты, чтобы потом к ним не было никаких таких гадких обращений?
В общем все было хорошо, пока я на форму не добавил меню.
В принципе причину косяка я выяснил и обращаюсь с вопросом, как его элегантней обойти.
Теперь подробности:
-имеем стандартную форму TForm.
-в конструкторе создаем экземпляр TShape.
-при изменении размеров формы, двигаем экземпляр TShape на середину формы.
-при закрытии формы, удаляем указатель на экземпляр TShape.
Код:
#pragma resource "*.dfm"
TForm1 *Form1;
TShape *testShape;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
testShape=new TShape(NULL);
testShape->Parent=Form1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
testShape->Left=Form1->ClientWidth/2-testShape->Width/2;
testShape->Top=Form1->ClientHeight/2-testShape->Height/2;
//ShowMessage("Form Resized");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
//ShowMessage("Form Closed");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete testShape;
//ShowMessage("Form Destroyed");
}
//---------------------------------------------------------------------------
Пока форма без меню, все хорошо. В конструкторе создается объект testShape. При изменении размера все правильно прописывается. При уничтожении формы, объект удаляется.
Но с меню начинаются непонятки. В конструкторе создается объект testShape. При изменении размера все правильно прописывается. А теперь фокус покус билдера. После уничтожении формы, если на форме расположено меню, происходит событие Resize, которое естественно обращается к уже удаленному объекту testShape. Далее естественно Ахтунг, Access Violation...
Спрашивать почему и какого х, после уничтожения формы с меню, вдруг происходит ресайз, я спрашивать не хочу, хотя факультативно хотелось бы получить ответ и на этот вопрос.
А интересует, как корректно удалить созданные объекты, чтобы потом к ним не было никаких таких гадких обращений?
Проверяй testShape на NULL
т.е.
if (!testShape) return;
Но объектов у меня достаточно много, и проверять каждый из них на валидность, это как то топорно выглядит... :(
Да и читабельность кода страдает.
С какого перепою, этот ресайз там вообще, после destroy, вызывается? (Публика негодует)
перед закрытием
Я пишу небольшой аудио проигрыватель в среде Delphi, с использованием MMTols (Multimedia Tools Library). Так вот, при работе с этим компонентом я столкнулся с такой проблемой: я запускаю свою программу, на другом компьютере и при попытке проиграть выбранный файл программа выдаёт ошибку – «WaveOutOpen: The actual device can’t play this format». Я так понял, что необходимо к программе присоединить *.dll библиотеки? А вот какие, не знаю. :confused:
Во вторых, если вы уж решили использовать компонент стороннего производителя - то почему бы ему не посредственно не задать наболевший вопрос?
В третьих, в среде разработки Borland есть специальная утилита, называется tdump.exe - она позволяет посмотреть все функции, которые программа экспортирует, и соответвенно длл которые ей нужны. Пользоваться не пробовали? На риалкодинг вам посоветовали для этого воспользоваться тоталкомандером - но в принципе разници нет.
В четвертых, если это те компоненты о которых я думаю (потому как вы считаете по повидимому,что если вы эту херню установили себе, то все автоматически догадались о производителе, версии и т.д. В сотый раз повторяю, телепатов на форуме нет - задав вопрос о чем либо, что по умолчанию не входит в стандартный минимум - вы обязаны дать версию, производителя, и откуда вы ее закачали - если вы конечно не мазохист и не любите выслушивать мнения о своих умственных способностях, ближайших родственниках и т.д. вместо дельного совета), то вобщето они платные. Вы уверены в том что вы используете полную версиию а не демо?
В четвертых - длл необходима - mmtools.dll
В пятых - вот пример как работать в билдере без компонентов
http://bcbjournal.org/articles/vol2/9808/Low-level_wave_audio__part_2.htm
никак не могу поставить, вылазят ошибки:
[Linker Error] Unresolved external 'CreateStdAccessibleProxyA' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\INTERMED\MSAAINTF.OBJ
ЗЫ: Требует ThemeManager, я его предварительно установил (без проблем)
никак не могу поставить, вылазят ошибки:
[Linker Error] Unresolved external 'CreateStdAccessibleProxyA' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\INTERMED\MSAAINTF.OBJ
ЗЫ: Требует ThemeManager, я его предварительно установил (без проблем)
Ну а ФАКу кто читать будет?
Помогите разобраться с компонентом RxRichEdit из набора RXLib. Как программно в нем втавлять изображения?
Сейчас я помогу :mad:. Я вообще помогаю всем - кто не считает нужным ознакомиться с правилами топика. Для начала ограничимся предупреждением - а дальше посмотрим как пойдет.
Вам никто не обязан помогать, тем более при подобной формулировке вопроса. Или по вашему мнению кому-либо надо тянуть с сайта разработчика компоненты, которые нафик не нужны - ради того что вам лень прочесть документацию? Дайте себе труд ознакомиться во-первых с форматом rtf-файла, во вторых хотябы с описанием компонент, которые вы решили использовать - если вы уверены что эта функциональность там присутствует,так я, например - хз. И выяснять это мне честно говоря абсолютно не хочется - если мне понадобиться работать с форматом rtf я буду использовать стандартный компонент, а для вставки - ознакомьтесь со спецификацией формата - Word 2002 RTF Specification Final ничего особо сложного там нет.
Ну хорошо, можно тогда вопрос такого плана: У меня нет навыка работы с документациями. Вот с какой стороны подходить к изучению нового для себя компонента? Просто мой алгоритм действий заканчиваеться прочтением сопутсвующего хэлпа. Вот так и с этим компонентом, в хэлпе к нему написано, что он поддерживает вставку OLE-объектов и как эту возможность активировать и больше ни слова. Из методов имееться только вызов диалога вставки OLE... Но при этом при его компиляции из Clipborda можно вставлять изображения с текстом без всяких диалоговых окон...
Как в таких ситуациях поступают дальше? К какой документации обращаються?
...
А также я пробовал вставлять картинки и в стандартный компонент RichEdit через InsertControl, вставить вроде получилось, но при этом рухнул как компонент RichEdit.
Вот, как я вас понял, <B>kot_</B>, вы говорите работать с rtf-файлом напрямую, т.е. в обход компанента?
...
Зарание спасибо - если не за ответы, то хотябы за внимание...
Вот, как я вас понял, <B>kot_</B>, вы говорите работать с rtf-файлом напрямую, т.е. в обход компанента?
...
Да. Это пожалуй, самое простое в ситуации, если конечно нет необходимости организовывать интерфейс WYSIWYG.
Уточните, что имеется ввиду:
он поддерживает вставку OLE-объектов и как эту возможность активировать
разве это не то, что вы хотели?
Но при этом при его компиляции из Clipborda можно вставлять изображения с текстом без всяких диалоговых окон...
тоже не понятно, что в этом плохого? Создайте собственное окно для выбора рисунка, и через Clipboard вставьте его туда куда вам необходимо
Уточните, что имеется ввиду: ...
Вот дословно как написано в хэлпе:
AllowObjects: Свойство определяет, возможно ли будет вставлять OLE-объекты в редактор TRxRichEdit.
---------
М-мм... Я это хотел бы применить в чате, т.е. тогда получаеться я динамически создаю TImage, копирую его в Clipbord и вставляю его уже куда и когда надо? А как Image скопировать в Clipbord, ведь ему не доступна функция CopyToClipboard()?
---------
М-мм... Я это хотел бы применить в чате, т.е. тогда получаеться я динамически создаю TImage, копирую его в Clipbord и вставляю его уже куда и когда надо? А как Image скопировать в Clipbord, ведь ему не доступна функция CopyToClipboard()?
А вот имеет смысл: в исходном коде компонента искать описание данного метода, чтобы использовать его алгоритм на своё усмотрение?..
А вот имеет смысл: в исходном коде компонента искать описание данного метода, чтобы использовать его алгоритм на своё усмотрение?..
Я думаю что имеет. :) А на счет не "похранишь" - я думаю что все не так и плохо. Зачем собственно "хранить"? Рисунок вставили и забыли. Можно предварительно проверять состояние буфера обмена и после операции его восстанавливать. Просто я не пользуюсь данными компонентами, поэтому проверить на практике не могу.
Реализовать лог чата компонентом CppWebBrowser, программно создавая и каждый раз дописывая html-страницу?..
Image1->Picture->SaveToClipboardFormat(unsigned short &AFormat,unsigned int &AData,void * &APalette);
или так:
Image1->Picture->Bitmap->SaveToClipboardFormat(unsigned short &AFormat,unsigned int &AData,void * &APalette);
Покрайней мере в 2007-ом билдере.
Реализовать лог чата компонентом CppWebBrowser, программно создавая и каждый раз дописывая html-страницу?..
Можно и так собственно. Почему бы и нет? У меня пользователи, после того как им закрыли и запретили использование программ для чатов и коммуникаторов, использовали для этой цели блокнот и сетевые шАры :)
Но с моей точки зрения чат-прога использующая формат rtf или тот же CppWebBrowser будет немножко так мягко говоря громоздка - вам так не кажется? Может подумать над своим форматом - предварительно посмотрев как это сделано другими? Хотябы в той же миранде - благо коды ее открыты.
Помогите, пожайлуста, найти следующие компоненты для C++Builder 2006(см. вложения):
1 - наследник TTrackBar, имеющий вид регулятора громкости;
2 - тоже наследник TTrackBar, у которого задается цвет трэка (полоса, по которой перемещается "ползунок");
3 - наследник TListView, у которого чередуются цвета строк.
Можно без ссылок. Главное: укажите правильное название.
Спасибо.
Но срабатывают они только при ручном переходе на TTabSheet (при щелчке на ярлычок).
Как быть, если изменение программное:
this->pcMain->ActivePageIndex = 1;
..
Обработка события TTabSheet::OnShow не подходит.
Видел что-то такое:
for( int i = 0; i < rg->ComponentCount; i++ )
{
dynamic_cast< TRadioButton * >( rg->Components[ i ] )->MultiLine = true;
}
..
Но у TRadioButton нет ни свойства MultiLine, ни свойства WordWrap.
...
Но у TRadioButton нет ни свойства MultiLine, ни свойства WordWrap.
...
включаем моск, если есть:)
: TForm(Owner)
{
TRadioButton* rb=NULL; String StrNum;
for (int i=0; i < RadioGroup1->ControlCount ; i++)
{
rb = dynamic_cast<TRadioButton*>(RadioGroup1->Controls);
if(rb)
{
::SetWindowLong(rb->Handle, GWL_STYLE, (::GetWindowLong(rb->Handle, GWL_STYLE)|BS_MULTILINE));
StrNum = IntToStr(i);
RadioGroup1->Items->Strings = "Upper line " + StrNum + "\n" + "Bottom line " + StrNum;
}
}
}
С тебя бАльшой + :)
А теперь попробуй сделать MultiLine, если TRadioGroup не заполнен сразу же.
1) Есть TRadioGroup
2) Необходимо в зависимости от каких-то условий заполнять его Items'ами (причем с MultiLine = true).
Получается:
1) Необходимо сначала заполнить(Add) TRadioGroup произвольными Items'ами
2) Прикрутить к ним св-во MultiLine = true
3) Изменить(Strings[ i ] = ..) значения Items'ов на реальные
Иначе ничего не выйдет, т.е. сделать так не получится:
1) Заполнить(Add) TRadioGroup реальными значениями
2) Прикрутить к ним св-во MultiLine = true
Но это же чушь получается.. К примеру мне сначала нужно, чтоб 2 Items'а было, потом 3, потом опять 2 и т.д..
+ почему TextAlignment у MultiLine TRadioButton'а становится Center??
Опять же как его изменить??
А теперь попробуй сделать MultiLine, если TRadioGroup не заполнен сразу же.
TRadioGroup не заполнен, пробую:
{
//TODO: Add your source code here
TRadioButton* rb = dynamic_cast<TRadioButton*>(rg->Controls[rg->Items->Add(s)]);
if(rb) ::SetWindowLong(rb->Handle, GWL_STYLE, (::GetWindowLong(rb->Handle, GWL_STYLE)|BS_MULTILINE));
}
+ почему TextAlignment у MultiLine TRadioButton'а становится Center??
Опять же как его изменить??
у меня равнение на лево остается, TRadioButton::Alignment - ?
Часто возникают ошибки прорисовки в случае вложенности компонентов. Но главное, при открытии новой формы на котором есть PageControl. Он не прорисовывается, а прорисовываеться только при нажатии на TabSheet. Как это обойти ? Ну еще один простой вопрос, как программно вызвать событие OnShow. / Paint (рисовать команду)?
Подскажите, где можно взять бесплатно компоненты для карманных компьютеров, типа этих:
http://franson.com/gpstools/
http://www.geoframeworks.com/Products/GPS/Default.aspx
Спасибо конечно, но интересно написать самому на C++ Builder'e. А что касается Apache, то в конфиге там нужно указывать внешний smtp сервер...
Вобщем, инструкция, ниже напишу как я ее понял.
How to install ?
All Versions
1 - Install DirectX9 if you plan to use VMR or Direct3D : http://www.microsoft.com/windows/directx/downloads/drx90.asp
2 - Install Direct3D libraries if you plan to use Direct3D : http://clootie.narod.ru/delphi/download_dx90.html
3 - Install Windows Media if you plan to use ASF compression or streaming: http://www.progdigy.com/download/wmfdist.exe
CPP Builder 6
4 - Download the DirectX9 SDK from MS and update the "$(BCB)\Include" directory. You must also updates the DX SDK with the file provided in the "(DSPackDir)\Include" directory.
5 - Add this paths to your search directory:
- (DSPackDir)\src\Directx9
- (DSPackDir)\src\DSPack
6 - Compile DirectX 9 Package (DirectX9_BCB6.dpk) from the "packages" directtory.
7 - Compile DSPack Package (DSPack_BCB6.dpk) from the "packages" directory.
8 - Install Design Package (DSPackDesign_BCB6.dpk) from the "packages" directory.
Теперь по русски:
1. Инсталлировал DirectX 9, установился без проблем. Status OK.
2. Скачал 2 dll-ки, по ссылке, вставил их в windows/system32. Status OK.
3. С этим пунктом прооблемы. Ссылка в инструкции не рабочая. Погуглил, не нашел... Но думаю без этого пункта можно обойтись. Прав ли я? Status NONE
4. Скачал последнюю мартовскую версию SDK DirectX9. Установил, и скопировал файлы из "C:\Program Files\Microsoft DirectX SDK (March 2008)\Include" в папку include Buildera. Не уверен, правильно ли... Вторую часть предложения вообще не понял как осуществить Status ???
5. К сожалению этот пункт не совсем понятен. Не знаю как поместить указанные пути, в директорию поиска... Status NONE.
6,7,8. Тут все понятно, запускаешь указанные файлы, появляется установщик, для первых двух жмем Compile, для последнего Install. Status OK
После проделанного выходит окно "package is succesfuly installed" и действительно появляется новая вкладка компонентов... Но проблема остается. Они есть, но они не работают.
Буду признателен, если скажете, что именно я делал неправильно...