krapotkin
-
Постов
2 184 -
Зарегистрирован
-
Посещение
-
Победитель дней
209
Активность репутации
-
krapotkin получил реакцию от Alisson R Oliveira в Уничтожение TFrame
все-таки вернусь к логической загадке ARC
1. если вы все ссылки на объект обнулили, то вызывать его деструктор не требуется, его вызовут за вас
2. если не все обнулили, но вызвали деструктор, значит имеем нехилую вероятность того, что кто-то, у кого осталась ссылка, обратится по ней к объекту. тогда мы имеем гарантированный AV
3. Тогда зачем все эти варианты с DisposeOF ???
У меня вся программа на фреймах построена, и ничего, создаются удаляются. При этом отлаживаюсь я в Win64, а потом запускаю на Andoird. И все работает штатно в обоих случаях.
Единственное отличие, я обычно не указываю владельца (Owner). Т.е. F:=TMyFrame.Create(NIL)
После использования сам убираю за собой
F.Parent:=NIL;
FreeAndNil(F)
и все норм.
В некоторых фреймах еще большинство компонентов в динамике создается и пересоздается. и тоже никаких явных вызовов деструктора.
Так что лучше все-таки следовать архитектуре, а не раскладывать костылики...
-
krapotkin получил реакцию от Ingalime в Alexandria 11 not compatible with ModermListview by (rzaripov1990 ZuBy )
Actually that IS exactly a negative point to modify sources of standard components. You have to repeat the changes in every version.
As a replacement I can suggest this.
Or much better - the fgx-native library by Yaroslav Brovin.
-
krapotkin получил реакцию от Benny в Alexandria 11 not compatible with ModermListview by (rzaripov1990 ZuBy )
Actually that IS exactly a negative point to modify sources of standard components. You have to repeat the changes in every version.
As a replacement I can suggest this.
Or much better - the fgx-native library by Yaroslav Brovin.
-
krapotkin получил реакцию от Semitako в Не подключается Huawei
Короче, действуем примерно так.
Я надеюсь, что базовые действия - скачать google latest adb driver - мы уже провели, но наш No- или Brand- name телефон недоступен
Тогда
1) идем в диспетчер устройств, находим там наше невстающее устройство, кликаем дважды, и на закладке Сведения выбираем свойство ИД оборудования. Копируем себе
что-то типа
2) идем к файлам того самого драйвера, открываем android_winusb.inf
находим разделы
[Google.NTx86] и [Google.NTamd64]
и вписываем туда, прямо в оба
;galaxy tab a 2019
%SingleAdbInterface% = USB_Install, USB\VID_04E8&PID_6866
%CompositeAdbInterface% = USB_Install, USB\VID_04E8&PID_6866&MI_01
3) делаем обновить драйвер, выбираем вариант Вручную, и указываем тот модифицированный файл
если не берет автоматом, то "Выбрать из списка уже установленных..." --> "Есть диск" --> "Да, мне пофиг что он не подписан"
4) The End
-
krapotkin получил реакцию от Ingalime в RAD 11 и Android
По мне, лучший вариант - скачать Android Studio и там в настройках уже найти SDK manager и установить SDK/NDK в папки, которые лежат на вменяемой глубине.
Delphi натравить на эти папки в настройках.
Я делаю так со времен Seattle и пока не подводила стратегия.
-
krapotkin отреагировална Yarpda в [ANDROID] Смена USER-AGENT компонента Webbrowser
Публикую решение вопроса смены UserAgent под андроид (больше спасибо Ярославу!).
Оказалось все до боли просто, но сам бы я до этого никогда не дошел...
В общем. На форме лежит TWebBrowser с именем WB.
1. Добавляем в Uses Androidapi.Jni.Embarcadero, Androidapi.helpers;
2. На кнопку вешаем:
var NativeBrowser:JWebBrowser; begin if Supports(WB,JWebBrowser,NativeBrowser) then NativeBrowser.getSettings.setUserAgentString(stringToJString('MyUserAgent')); WebBrowser1.Navigate('https://www.whatsmyua.info'); // переходим на сайт, чтобы посмотреть что все получилось. end; И это все! Жесть. 3 дня на это убил. Может быть кому-то пригодится.
-
krapotkin получил реакцию от OnePeople в Динамическое создание объекта во фрейме
эмм крайне странная логика, не ?
обработчик должен присваивать тот кто создает, а не тот, кого создают
и уж 99.9% компонент не должен знать ничего о классе, куда его будут вставлять
procedure TFrame6.SomeProc(); var img: TMyImage; begin img := TMyImage.Create(Self); img.parent := layout5; img.OnMouseDown := OnMouseDown; images.add(img); end;
-
-
krapotkin отреагировална gonzales в Push в Delphi11
Оставлю здесь информацию, как заставить работать пуши при переходе на delphi11. Если Вы заметили, что после перехода на 11 версию у Вас отвалились пуши, система не показывает firebase token, то проблема решается так.
1. Скачиваем JSON с консоли FireBase
2. Открываем его, видим следующий вид
3. Вписываем в Настройках проекта в секцию Services в следующем соответствии:
API key - current_key
Application id - mobilesdk_app_id
Project id - project_id
GSM sender id - project_number
4. И не забываем выставить в секцию Entitlement List галочку Receive push notifications.
После этого все опять начинает работать.
-
krapotkin получил реакцию от Ingalime в Подключение к БД Firebird из Android
примеров полно, но нужно бы ТЗ иметь.
обращение из программы к серверу - через THttpClient
сервер - в зависимости от умений и знаний, на любом языке. традиционно у нас в ходу PHP
-
krapotkin получил реакцию от Letter в Как открыть окно "Поделиться"
\Samples\Object Pascal\Mobile Snippets\ShareSheet
-
krapotkin получил реакцию от Tumaso в Почему я не могу изменить программно свойствоTransferType y IdFTP?
1. делаем в коде Ctrl+клик по TransferType попадаем в модуль IdFTP выясняем что тип TransferType : TIdFTPTransferType
2. делаем Ctrl+ клик по TIdFTPTransferType и попадаем в модуль IdFTPCommon
3. этот модуль вписываем в uses нашего откуда мы начали это увлекательное путешествие.
4*. (опциональное) в современных версиях принято не просто указывать константу, а еще и тип, чтобы работало автодополнение
тогда строка выглядит как
ftpbot.TransferType := TIdFTPTransferType.ftBinary;
------------------------------------
Но вообще это какбэ азы совсем.
-
krapotkin получил реакцию от Andrey Efimov в Почему я не могу изменить программно свойствоTransferType y IdFTP?
1. делаем в коде Ctrl+клик по TransferType попадаем в модуль IdFTP выясняем что тип TransferType : TIdFTPTransferType
2. делаем Ctrl+ клик по TIdFTPTransferType и попадаем в модуль IdFTPCommon
3. этот модуль вписываем в uses нашего откуда мы начали это увлекательное путешествие.
4*. (опциональное) в современных версиях принято не просто указывать константу, а еще и тип, чтобы работало автодополнение
тогда строка выглядит как
ftpbot.TransferType := TIdFTPTransferType.ftBinary;
------------------------------------
Но вообще это какбэ азы совсем.
-
krapotkin отреагировална slav_z в О публикации приложения в магазине
Лучше все же купить аккаунт разработчика у гугла... если после этого останется психологический дискомфорт, взять 2-3 сеанса у психолога...
-
krapotkin получил реакцию от Андрей Рулин в Движущееся изображение
onPaint вызывается не когда вы хотите, а когда система считает нужным
а чтоб она посчитала нужным, вызывайте Invalidate.
-
krapotkin получил реакцию от Вадим Смоленский в Перенос на другой компьютер
https://www.google.com/search?client=opera&q=смонтировать+образ+iso+в+windows+10&sourceid=opera&ie=UTF-8&oe=UTF-8
-
krapotkin получил реакцию от Вадим Смоленский в Перенос на другой компьютер
поддержу, но в данном случае как раз проблема не в том. лицензия-то есть. и к политике не имеет отношения. она бессрочная.
а это интернет-инсталлер? может, из ISO-шечки попробовать?
кроме того сообщение на скрине не говорит, что не установлены платформы, а лишь - нет того, что ожидает установки
попробуйте чистый проект запустить. Если там появятся нужные платформы, нужно всего лишь поправить руками .dproj
-
krapotkin получил реакцию от Вадим Смоленский в Перенос на другой компьютер
ну. явно установка не удалась. совсем
вот ссылки на образ
ftp://ftpd.embarcadero.com/download/radstudio/10.2/delphicbuilder10_2.iso
http://altd.embarcadero.com/download/radstudio/10.2/delphicbuilder10_2.iso
win 10 позволяет по правой кнопке смонтировать образ как диск. далее все как обычно
ессн сначала зачистить все что вы написали выше. вроде еще в AppData что-то валяется.
-
krapotkin получил реакцию от fredhack в Ошибка при компиляции
последнее - банально перезагрузить девайс. если не помогло, то и компьютер
-
-
krapotkin получил реакцию от gonzales в Delphi 10.4.2 и ComboBox
в кб текстовые итемы и listBoxItems хранятся раздельно
и видимо, прямая связь - создание итемов по тексту - осталась, а обратная - потерялась в какой то переделке)
-
krapotkin получил реакцию от OnePeople в Delphi 10.4.2 и ComboBox
эмм
вот вполне рабочий вариант
procedure TForm1.b1Click(Sender: TObject); var item: tlistboxitem; i: integer; begin for i := 1 to 2 do begin item := tlistboxitem.Create(nil); item.Text := inttostr(i); cbb1.ListBox.AddObject(item); end; end; procedure TForm1.b2Click(Sender: TObject); var item: tlistboxitem; i: integer; begin for i := 3 to 4 do begin item := tlistboxitem.Create(nil); item.Text := inttostr(i); cbb1.ListBox.AddObject(item); end; end;
-
krapotkin отреагировална Slym в Как перевести данные из TStrings в TMemoryStream?
Вангую: потом будет вопрос как понять что весь stream прилетел а не его некоторая часть...
-
krapotkin отреагировална Navadvipa Chandra das в FireDAC, PostgreSQL процедуры и Blob параметры
Здравствуйте!
Блоб параметры в процедурах PostgreSQL победить не удалось, а вот та же функциональность через Блоб-поля TFDQuery была достигнута. В целом такой вариант более универсален.
void __fastcall TNNConfig::SaveToDB()
{
if ( Connection && !Connection->Connected )
return;
TMemoryStream* ms = new TMemoryStream();
fFiler = new TNNTextStream( ms );
try {
SaveFilerFromUserEvent();
std::unique_ptr< TFDQuery > quReg( new TFDQuery( this ) );
std::unique_ptr< TFDTransaction > trReg( new TFDTransaction( this ) );
quReg->Connection = Connection;
trReg->Connection = Connection;
quReg->Transaction = trReg.get();
String RK = RegistryKey();
Connection->StartTransaction();
try {
quReg->SQL->Text = "SELECT \"UserRegKey\", \"UserData\" FROM \"UserReg\" where \"UserRegKey\" = :UserRegKey_";
quReg->Params->Items[ 0 ]->DataType = ftString;
quReg->Params->Items[ 0 ]->AsString = RK;
quReg->Open();
if ( quReg->RecordCount == 0 ) {
quReg->Insert();
quReg->Fields->Fields[ 0 ]->AsString = RK;
} else
quReg->Edit();
TBlobField *bf = ((TBlobField *)(quReg->Fields->Fields[ 1 ]));
bf->LoadFromStream( Filer );
quReg->Post();
Connection->Commit();
} catch ( ... ) {
Connection->Rollback();
}
} __finally {
delete fFiler;
fFiler = nullptr;
}
}
bool __fastcall TNNConfig::LoadFromDB()
{
if ( Connection && !Connection->Connected )
return false;
bool B = false;
std::unique_ptr< TFDQuery > quReg( new TFDQuery( this ) );
std::unique_ptr< TFDTransaction > trReg( new TFDTransaction( this ) );
quReg->Connection = Connection;
trReg->Connection = Connection;
quReg->Transaction = trReg.get();
quReg->SQL->Text = "SELECT \"UserRegKey\", \"UserData\" FROM \"UserReg\" where \"UserRegKey\" = :UserRegKey_";
quReg->Params->Items[ 0 ]->DataType = ftString;
quReg->Params->Items[ 0 ]->AsString = RegistryKey();
quReg->Open();
if ( quReg->RecordCount == 1 ) {
TBlobField *bf = ((TBlobField *)(quReg->Fields->Fields[ 1 ]));
bf->SaveToStream( Filer );
B = true;
}
return B;
}
Вопрос закрыт!
Спасибо!
С уважением, Навадвипа Чандра дас.
-
krapotkin отреагировална slav_z в FMX: Скроллинг и нажатия
Все разработчики при работе с FMX рано или поздно сталкиваются с одной и той же проблемой: необходимо исключить "случайное" срабатывание нажатий элементов внутри скроллбокса во время его скроллинга. Идут годы, а решения так и нет. Давайте попробуем это исправить. Поехали!
Запускаем IDE, создаем новый проект, кидаем на форму TVertScrollBox и на него чего-нибудь побольше... запускаем на мобильном устройстве, пытаемся скроллировать,
получаем проблемы в виде срабатывания разных событий типа OnClick элементов.
Решение состоит в том, чтобы сделать элементы "невидимыми" для событий связанных с действиями пользователя с экраном во время скроллинга.
Делаем следующее:
Все. Переносим код в базовую форму, делаем его более гибким, убираем все те костыли, которые мы уже успели сделать ранее...
Удачи!
https://github.com/slav-libx/scroll-click.git