-
Постов
100 -
Зарегистрирован
-
Посещение
Активность репутации
-
-
walexw отреагировална Andrey Efimov в Помогите разобраться с потоком
Вот посмотрите справку System.Classes.TThread.Synchronize
Примеры на С++: ThreadSynchronize (C++) и TThreadYield (C++)
-
walexw отреагировална Равиль Зарипов (ZuBy) в Помогите разобраться с потоком
void __fastcall domThread::UpdateAnimation() { frm->aIndic->Visible = false; frm->aIndic->Enabled = false; } незнаю как на си будет, но примерно так
void __fastcall domThread::Execute() { Synchronize( UpdateAnimation ); Terminate(); } -
walexw отреагировална Камышев Александр в Многоязыковое приложение
чем плох стандартный TLang? свойство
AutoSelect=True - автоматическое определение языка и StoreInForm=True - хранить в ресурсах
использую TLang для статичных строк и вот такой код для статусов и сообщений:
String LangString( unsigned int code, AnsiString lang ) { if ( lang == "RU" ) switch( code ) { case 0: return (AnsiString)"Ожидание"; case 60: return (AnsiString)" не выполнено"; case 61: return (AnsiString)" выполнено успешно"; } else if ( lang == "EN" ) switch( code ) { case 0: return "Waiting"; case 60: return " not completed"; case 61: return " completed successfully"; } return "";
-
walexw отреагировална Andrey Efimov в Многоязыковое приложение
Можно использовать возможности Android API, а можно сделать всё самостоятельно, через какой-нибудь ini файл например
Пример использования АПИ: Автоматическая смена названия приложения в зависимости от языка системы
Пример нужно немного расширить: добавляем переводы меню и всего, что хотим в strings.xml, после этого, при запуске приложения получаем ресурсы из автоматически выбранного strings-**.xml.
Вот так выглядит функция получения ресурса:
class function TLoadR.LoadRString(const value: String): String; var resourceId: integer; begin resourceId := TAndroidHelper.Activity.getResources.getIdentifier (StringToJString(value), StringToJString('string'), TAndroidHelper.Activity.getPackageName); Result := JStringToString(TAndroidHelper.Activity.getResources.getString(resourceId)); end;
Внимание! Не пытайтесь использовать функцию TAndroidHelper.GetResourceID, в ней я обнаружил багу. В след. релизе поправят. Предложенный выше код, полностью рабочий.
-
walexw отреагировална Равиль Зарипов (ZuBy) в Многоязыковое приложение
1) можно использовать DeviceInfo
2) все зависимости есть в модуле выше
if TPlatformServices.Current.SupportsPlatformService(IFMXLocaleService, IInterface(LocaleService)) then DeviceInfo.diLang := LocaleService.GetCurrentLangID;
-
walexw отреагировална Равиль Зарипов (ZuBy) в Помогите разобраться с потоком
нужно делать вот так:
1) использовать компоненты Ярослава
2) анимацию запускаем до потока (в котором выполняются разного рода запросы), по завершению операции в !синхронизации! выключаем анимацию
-
walexw отреагировална Brovin Yaroslav в Помогите разобраться с потоком
Все просто.
Отрисовка индикатора идёт в главном потоке. Вызывая Sleep в главном потоке, вы лочите главный поток на 5 секунд и как следствие всю отрисовку (Даже если вы выставите раньше Enabled=True). С UI компонентами можно работать только в главном потоке, поэтому все вызовы, работающие с компонентами из других потоков нужно завернуть в TThread.Synchronize. -
walexw отреагировална Alexander в Нужен совет "бывалого" разработчика
Слева и справа вверху повесить "плавающие" полупрозрачные кнопки "Ок" и "Отмена"
-
walexw отреагировална Евгений Корепов в отправить файл на google disk
Один из вариантов вызывать активити вот так:
procedure ShareFile(aFileName, aComment : String); var Intent : JIntent; uri : Jnet_Uri; AttachmentFile: JFile; S : String; begin Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_SEND); Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); S:=TPath.GetFileName(aFileName); Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(aComment)); Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(aComment)); AttachmentFile := TJFile.JavaClass.init(StringToJString(aFileName)); Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile); Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((Uri as ILocalObject).GetObjectID)); Intent.setType(StringToJString('text/plain')); // Intent.setDataAndType(StrToJURI('file:' + TPath.Combine(TPath.GetSharedDownloadsPath, 'picture.png')), StringToJString ('image/png')); SharedActivity.startActivity(Intent); end; Пользователю нужно будет выбрать что именно использовать, список будет из всего что установлено (гугледиск, дропбокс и т.д.). Можно вызывать активити для определенного приложения, но под рукой примера нет.
-
-
walexw отреагировална Andrey Efimov в KeyStore
Вот здесь, специально писал статью [Google Play] Публикация приложения в Google Play
Ещё на форуме есть раздел Статьи и заметки, там статьи тоже упоминаются.
-
-
walexw отреагировална Равиль Зарипов (ZuBy) в listView
Там слишком много кода, чтобы выкладывать. Появится больше вопросов чем ответов.
Если я хочу скрыть один из элементов, создаю в Data доп. числовой параметр. Затем в событии изменяю видимость в зависимости от его значения. Параметр управляется вне события.
Сейчас Делфи нет под рукой, но приблизительно так
Aitem.Objects.TextObject.Visible := aitem.data['hide_text'].asinteger <> 1;
-
walexw отреагировална AngryOwl в кнопка поверх ListView
И [brunnengi] и [ZuBy] оба правы.
В первом случае у TLayout нужно выключить свойсвто HitTest, чтобы сам TLayout не "перекрывал" клики мышь (или тапы) (TLayout позволит "выравнивать" несколько "кнопок" относительно друг друга проще)
Во втором случае - все проще (любой лишний компонент на форме, не важно - в составе чего он, - это дополнительная память, а главное - расходы на отрисовку. Порой нам кажется, что вроде на форме и "нет ничего", а если копнуть поглубже - там окажется море того, чего мы не видим, а отрисовывать то их прийдется!). Простой TImage, на мой взгляд, лучше.
Но, как мне кажется, в данном случае вовсе не обязательно обрабатывать выравнивание в событии OnResize.
Достаточно в DesignTime разместить TImage (все) где нужно и установить его (их) свойство Anchors = [akRight, akBottom] (для Вашего случая)
-
walexw отреагировална Равиль Зарипов (ZuBy) в StringGrid + StringColumn + выравнивание
отрисовать самому?
procedure TFormMain.sGridDrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: integer; const Value: TValue; const State: TGridDrawStates); begin aBounds := Bounds; aBounds.Left := aBounds.Left + 2; Canvas.BeginScene; Canvas.Fill.Color := TAlphaColorRec.Red; Canvas.FillRect(Bounds, 0, 0, AllCorners, 1); Canvas.Fill.Color := TAlphaColorRec.White; Canvas.FillText(aBounds, (Sender as TStringGrid).Cells[1, Row], false, 1, [], TTextAlign.Center, TTextAlign.Center); Canvas.EndScene; end;
-
walexw получил реакцию от Равиль Зарипов (ZuBy) в кнопка поверх ListView
Вариант ZuBy подошел.
Если положить кнопки на панель, то панель закрывает последние строки и по ним не сделать клик.
Убирающуюся панель не стал делать, мне надо чтобы кнопка всегда была видна, не убиралась.
Круглый имидж запихнул в угол списка, он нормально работает и не мешает выбрать нижнюю строчку.
ZuBy спасибо!
-
walexw отреагировална Равиль Зарипов (ZuBy) в кнопка поверх ListView
кидаешь TImage без Align'инов и на ресайзе выставляешь позицию кнопке
-
walexw отреагировална #WAMACO в Разместить в Play Market
http://developer.alexanderklimov.ru/android/publish.php
https://support.google.com/googleplay/android-developer/answer/113469?hl=ru
-
walexw отреагировална AndroidHalfNoob в Разместить в Play Market
Так в Гугле все легко ищется
как зарегиться
http://www.homebusiness.ru/inet/327.htm
как опубликовать приложние
http://www.homebusiness.ru/inet/328.htm
кстати... для публикации приложения надо 25$ отстегнуть
-
walexw отреагировална AndroidHalfNoob в Intent + HTML
Этот код на Delphi работает. Если сможешь,переложи на C++
если же не заработает, то можно воспользоваться стандартным ActionList. Там создать ShowShareSheetAction и на кнопку написать текст
Данная строка вызовет список установленных браузеров и предложит открыть ссылку через один из них.
Опробовал оба способа. В своем проекте использую второй способ.
-
walexw отреагировална krapotkin в google клавиатура
У edit есть свойство ReturnKeyType
нужно установить его в Next
но некоторые клавиатуры косячат и могут игнорить эту установку
гугл вроде норм. работает
-
walexw отреагировална ophion в FireMonkey + PDF
Если своими силами, то вот необходимая информация http://www.adobe.com/devnet/pdf/pdf_reference.html
-
walexw отреагировална Andrey Efimov в Intent + HTML
К сожалению, в С++ плохо разбираюсь, но попробуйте вот так:
String pageName = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), L"MyPage.html"); if (FileExists(fileName)) { _di_JIntent Intent; Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW); Intent->setDataAndType(StrToJURI(L"file:" + pageName)), StringToJString(L"text/html")); SharedActivity()->startActivity(Intent); } т.е. если вы хотите открыть файл, который находится на устройстве, вам необходимо добавить приставку 'file:' перед строкой содержащей путь до файла.
на Делфях выглядит так:
Intent.setDataAndType(StrToJURI('file:' + 'Путь'), 'Здесь указываем Mime-type в JString'); -
walexw отреагировална zairkz в OnButtonClick vs OnItemClick
procedure TForm1.ListView1ItemClickEx(const Sender: TObject; ItemIndex: integer; const [Ref] LocalClickPos: TPointF; const ItemObject: TListItemDrawable);
begin
if ItemObject is TListItemTextButton then
begin
//Bla Bla Bla вообщем сюда перенесите OnButtonClick .
end;
//Next Bla Bla Bla
end;