antarey
-
Постов
284 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Сообщения, опубликованные antarey
-
-
Добрый день.
Помогите побороть access violation
Есть главная форма frmMain, на ней лежит панелька rootLayout.
По кнопкам создаю фреймы:
private: // User declarations TFrame *WorkFrame; TPanel* FrameLayout; // -------------------------------------------------------------------------- void TfrmMain::CreateFrame(String FrameName) { if (FrameLayout != NULL) { delete FrameLayout; } FrameLayout = new TPanel(Application); FrameLayout->StyleLookup = "pushpanel"; FrameLayout->Name = "FrameLayout"; FrameLayout->Parent = rootLayout; FrameLayout->Align = TAlignLayout::Client; if (FrameName == "frmParam") { WorkFrame = new TfrmParam(FrameLayout); } if (FrameName == "frmEditor") { WorkFrame = new TfrmEditor(FrameLayout); WorkFrame->Tag = 1; } if (FrameName == "frmAdmin") { WorkFrame = new TfrmAdmin(FrameLayout); } WorkFrame->Parent = FrameLayout; WorkFrame->Align = TAlignLayout::Client; } // --------------------------------------------------------------------------
На фрейме frmEditor тоже есть панелька ItemsListRootLayout и в етом фрейме я создаю дополнительные фреймы
TFrame *EditorWorkFrame; TPanel* EditorFrameLayout; // --------------------------------------------------------------------------- void TfrmEditor::CreateFrame(String FrameName) { if (EditorFrameLayout != NULL) { delete EditorFrameLayout; } EditorFrameLayout = new TPanel(Application); EditorFrameLayout->StyleLookup = "pushpanel"; EditorFrameLayout->Name = "EditorFrameLayout"; EditorFrameLayout->Parent = ItemsListRootLayout; EditorFrameLayout->Align = TAlignLayout::Client; if (FrameName == "frmNewArticleList") { EditorWorkFrame = new TfrmNewArticleList(Application); .................. } ............................... EditorWorkFrame->Parent = EditorFrameLayout; EditorWorkFrame->Align = TAlignLayout::Client; } // --------------------------------------------------------------------------
На фрейме frmNewArticleList лежит ListBox привязан к таблице( пробовал через грид таже ошибка) и есть обработчик
//--------------------------------------------------------------------------- void __fastcall TfrmNewArticleList::NewArticleListItemClick(TCustomListBox * const Sender, TListBoxItem * const Item) { frmEditor->Label2->Text = dm->qLocalContent->FieldByName("title")->AsString; } //---------------------------------------------------------------------------
В результате при клике на итеме получаю access violation
Подскажите где я накосячил.
Заранее благодарен
-
С размером разобрался - нужно при записи явно указывать качество.
А что еще можно оптимизировать?
-
Есть картинки *.png,*.jpg в основном.
На примере темы написал код, для начала только уменьшение качестка
if (FileExists("d:\\Work\\Project\\Tmp\\11.JPG")) TFile::Delete("d:\\Work\\Project\\Tmp\\11.JPG"); TStream *Stream = new TMemoryStream(); TBitmapSurface *Surface = new TBitmapSurface(); TBitmapCodecSaveParams *SaveParam = new TBitmapCodecSaveParams(); TBitmap *SrcBitmap = new TBitmap(); TBitmap *DstBitmap = new TBitmap(); SrcBitmap->LoadFromFile("d:\\Work\\Project\\Tmp\\1.JPG"); Surface->Assign(SrcBitmap); SaveParam->Quality = 50; TBitmapCodecManager::SaveToStream(Stream, Surface, ".jpg", SaveParam); Stream->Position = 0; DstBitmap->LoadFromStream(Stream); DstBitmap->SaveToFile("d:\\Work\\Project\\Tmp\\11.JPG");
Исходное изображение 2,5Мб а конечное DstBitmap 3,7 Мб.
Ето так надо? Где я ошибся?
Кроме изменения размеров изображения и качества - что еще можно оптимизировать?
Спасибо
-
Подскажите как без программного кода построить дерево из таблицы базы данных?
Через Bind Visually не могу найти в свойствах TreeView ->Item.Text & Item->ParentId
-
Добрый день.
Есть TDateEdit подключенный к базе через LiveBindings. Поле дати имеет значение по умолчанию "0000-00-00 00:00"
DateEdit отображает ето значение как 30.12.1899 . На доквики написано что можно использовать логические операторы, но нет примера как.
Подскажите как будет выглядеть строка CustomFormat для условия - if (query1->FieldByName("DateB")->AsString == "0000-00-00 00:00")DateEdit1->Date = ""/NULL или же DateEdit1->Text = "0000-00-00 00:00".
-
Добрый день. Как програмно прокрутить TListBox на последний итем?
TListBoxItem *logItem = new TListBoxItem(Application); logItem->Parent = cbLog; logItem->Name = "item" + IntToStr(itemIndex); logItem->Text = Now().FormatString("dd:mm:yy") + " : " + text; ; logItem->ImageIndex = ImageIndex; logItem->TextSettings->WordWrap = true; cbLog->ItemIndex = cbLog->Items->Count - 1; cbLog->ScrollToItem(logItem);
последние две строки, по идее должны прокрутить на последний елемент списка, но последний елемент выделяется а прокрутка в начале списка
-
Есть библиотека для парсинга .
сторики 177,178
property Nodes[const Name: AnsiString]: TALXMLNode read GetNodeByName; default; property Nodes[const Index: integer]: TALXMLNode read GetNodeByIndex; default;
Я добавил ALXmlDoc.pas в проект, билдер сам создал ALXmlDoc.hpp и сгенирировал
__property TALXMLNode* Nodes[const System::AnsiString Name] = {read=GetNodeByName/*, default*/}; __property TALXMLNode* Nodes[const int Index] = {read=GetNodeByIndex};
и естественно получаю ошибку о дублировании - как исправить сие недоразумение?
И второй вопрос.
строка 705
property OnParseText: TAlXMLParseTextEvent read FonParseText Write FonParseText; // [added from TXMLDocument]
в ALXmlDoc.hpp
__property _di_TAlXMLParseTextEvent OnParseText = {read=FonParseText, write=FonParseText}; __interface TAlXMLParseTextEvent : public System::IInterface { virtual void __fastcall Invoke(System::TObject* Sender, const System::AnsiString Path, const System::AnsiString Str) = 0 ; }; private: _di_TAlXMLParseTextEvent FonParseText; protected: void __fastcall DoParseText(const System::AnsiString Path, const System::AnsiString Str);
Делал по демке
*. hpp
void __fastcall OnParseText(System::TObject* Sender,const System::AnsiString Path, const System::AnsiString Str);
*.cpp
void __fastcall TForm1::OnParseText(System::TObject* Sender, const System::AnsiString Path, const System::AnsiString Str) { } // --------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TALXMLDocument* aXMLDocument = new TALXMLDocument("root"); aXMLDocument->OnParseText = OnParseText; }
и получаю ошибку
[bcc32 Error] Unit1.cpp(30): E2235 Member function must be called or its address taken
Как правильно объявить событие?
Спасибо
-
37 минут назад, Slym сказал:
заставлять надо TFDConnection, смотри charset* настройки конекшена
Прописано UTF8, ето какой то глюк студии
-
Замучил меня FDQuery. Переделал на FDScript и прописал кодировку - все нормально.
Спасибо за ответы
-
В 25.01.2020 в 13:22, Maximus сказал:
Попробуйте так
title = dm->qExpContent->FieldByName("title")->AsWideString; introtext = dm->qExpContent->FieldByName("introtext")->AsWideString; fulltext = dm->qExpContent->FieldByName("fulltext")->AsWideString;
Без результатов
Пробовал тупо так
dm->qProc->SQL->SaveToFile("1.sql",TEncoding::UTF8); dm->qProc->SQL->LoadFromFile("1.sql", TEncoding::UTF8); dm->qProc->ExecSQL();
Файл сохраняется в UTF8, но в я так понимаю что TFDQuery переконвертирует скорее всего в АНСИ.
Можно как-то заставить работать TFDQuery на юникоде ?
-
Помогите разобраться к кодировками
Есть проект на C++Builder 10.3 использую VCL но думаю что для FMX будет та же проблемаИспользую Firedac
Есть две базы - SQLite - UTF8 и MYSQL - UTF8.
Надо експортировать таблицу из SQLite в MYSQL
В базе SQLite все нормально видно, Девекспресовский грид нормально показывает данные
Формирую скрипт в TFDQuery - qProcdm->qExpContent->Open(); dm->qProc->SQL->Clear(); UTF8String title,introtext,fulltext; do { title = dm->qExpContent->FieldByName("title")->AsString; introtext = dm->qExpContent->FieldByName("introtext")->AsString; fulltext = dm->qExpContent->FieldByName("fulltext")->AsString; dm->qProc->SQL->Add("insert ignore into " _content(...alias,introtext,'fulltext'... values('" + "','" + title + "','" +introtext + "','" +fulltext..."');"); dm->qExpContent->Next(); } while (!dm->qExpContent->Eof); dm->qProc->ExecSQL();
И в результате в MYSQL вижу крякозябры.
Игрался с типом строковых переменных, тупо создавал файл в UTF8 и делал загрузку в qProc
результат тот же
Как правильно синхронизировать таблицы? и победить кодировки
Заранее всем спасибо
-
На пару лет выпал из темы.
Проблема со стандартным гридом TGrid и TTMSFMXLiveGrid. Запускаю по F9 - нормально запускается, но при Build project по Shift F9
получаю ошибку Class TTMSFMXLiveGrid not found ну или Class TGrid not found
Подскажите что надо подшаманить. Раньше таких проблем не было.
-
Етот параметр передается в ворд.Ето переделка кода VBA.
-
Документ открываю, но сохранять в упор не хочет
vVarApp = CreateOleObject("Word.Application"); fStart = true; vVarApp.OlePropertySet("Visible", true); vVarDocs = vVarApp.OlePropertyGet("Documents"); vVarDocs.OleProcedure("Open",WordFileName); vVarDocs=vVarDocs.OleFunction("Item",1); vVarDocs.OleProcedure("Activate"); vVarApp.OlePropertyGet("ActiveDocument").OleProcedure(L"SaveAs2", HtmlFileName, L"FileFormat:=_wdFormatFilteredHTML"); vVarApp.OlePropertyGet("ActiveWindow").OleProcedure(L"Close"); vVarApp.OleProcedure("Quit");
Точнее сохраняет, но не в _wdFormatFilteredHTML формате
-
Добрый день.
Помогите побороть OLE сервер ворда.
Есть простая задача - открыть документ ворд и сохранить его в html, но что-то лыжи не едутВот код
unit1.h
public: // User declarations Variant vVarApp,vVarDocs; bool fStart;
unit1.cpp
#include <ComObj.hpp> #include <utilcls.h> if (!fStart) { try { vVarApp = CreateOleObject("Word.Application"); fStart = true; vVarDocs = vVarApp.OlePropertyGet("Documents"); vVarDocs.OleProcedure("ChangeFileOpenDirectory", "\"D:\\\""); vVarDocs.OleProcedure("Open", "f1.docx"); vVarApp.OlePropertySet("Visible", true); } catch (...) { ShowMessage("Ошибка при открытии сервера Word"); return; } }
И получаю ошибку - Unknown name
-
В 07.01.2018 в 15:15, x11 сказал:
А что, просто кинуть на форму обычную кнопку - это будет не то?
Может и то , но с региона , как в примере Равиля, проще реализовать круглую кнопку
-
Равиль Зарипов , спасибо.
-
Как создать Floating Action Button - аналог кнопок в сервисах гугла, к примеру в Inbox большая кнопка Плюс?
Нужна уневерсальная реализация и для Вин и Андроид платформ -
33 минуты назад, Равиль Зарипов (ZuBy) сказал:
в билдере есть умный указатель, unique_ptr, который сам чистит объекты которые больше никем не используются
Но это не точно
Вот как раз об unique_ptr тоже вопрос, как умные указатели ведут себя на мобильных платформах? Для винды написано что объекты уничтожаются когда их никто не использует, или же когда объект выходит за пределы видимости - если я правильно понял - если объект локальный и внутри какого-то обработчика, то объект будет уничтожен по завершению обработчика.
Но как сие на практике и для винды и мобильных платформ - вопрос к Ярославу и Ембарсадеро -
А как быть с С++ - кругом в документации пишеться , что вместо Free необходимо использовать delete, но в андроиде delete не удаляет объект - тоже юзать FreeAndNil?
-
Подскажите, как в FMX реализовать типа нативное приложение под Вынь 10 - когда заходиш в настройки, потом в какой-то подпункт и в левом верхнем углу в капшине появляется стрелка назад.
Убрать капшин , кинуть панель плюс три стандартные кнопки можно, но тогда форма ведет себя не совсем по нативному, когда пристыковываеш ее к краям экрана, она автоматически не ресайзится -
Есть ли возможность в FireDac делать локальное обновление без отсылки на сервер? Как ето реализовано в IBDAC
-
Ясно, спасибо за свой вариант, такой код немного проще
-
Только что, Равиль Зарипов (ZuBy) сказал:
Не пользуюсь таким. Но чисто теоретически все должно работать
Немного глупый вопрос - а как с базами работаешь? через переменные?
C++Builder и работа с фреймами
в Формы
Опубликовано
правильно
А можно в двух словах что ето делает?