-
Постов
181 -
Зарегистрирован
-
Посещение
-
Победитель дней
26
Активность репутации
-
enatechno отреагировална #WAMACO в [Android] Горизонтальная ориентация экрана
ширину экрана проверяйте и оттуда исходите
разрешения поставьте все!
-
enatechno отреагировална Равиль Зарипов (ZuBy) в Вопрос по компонентам
Вот так делал для себя
PresentedButtonsRecalPosition.7z
-
enatechno отреагировална Равиль Зарипов (ZuBy) в Отображение в виде плиток
Предыстория была такая:
Изначально такие плитки были сделаны на Button'ах (стиль) и TPresentedScrollBox. Но как только пошло дело в тест основательный идею тут же выбросил. 120+ элементов выключили телефон (samsung ace2 duos) при отрисовке, точней при динамической загрузке картинок. да и в целом вся эта беда работает медленней чем реализация на TListView
Я не художник, но смысл вроде передал
Пример: У нас есть 12 элементов,и 4 колонки
Можно в LV отрисовывать дополнительные "контролы" и поместить в один реальный айтем, 4 виртуальные панельки (в нашем случае)
Для того чтобы такое получилось:
1) ListView должна при ресайзе рассчитать сколько колонок она может иметь (ширина LV / на ширину одной панельки)
2) дальше Вам нужно будет разбить отрисовку Itema на 4 панельки
2.1) тоже самое проделать и при выделении
3) При таком подходе не будет стандартных элементов отображения (Text, Detail, Image и прочее нужно выключить)
Добавление Itema будет проходить в два цикла: первый добавляет реальный Item (0-2), а второй заполняет данными наши поля в панельках (title1, price1, bitmap1, title2, price2, bitmap2 и тд...)
4) Ну и самое важное в OnUpdateObjects все это отрисовать
Надеюсь вам это поможет!
-
enatechno отреагировална master webs в IOS Push GCM/firebase
добавил ссылку на github в первый пост, в нем есть исходники для delphi 10.1 berlin (10 должно все работать)
-
enatechno отреагировална Andrey Efimov в [Статья] Публикация приложения в Google Play
Ссылка: http://delphifmandroid.blogspot.ru/2016/06/google-play-google-play.html
Автор: Андрей Ефимов
Описание: Публикация приложения в Google Play
-
enatechno отреагировална Andrey Efimov в Какие статьи вы хотели бы видеть в блогах?
Написал статейку по вашей теме [Google Play] Публикация приложения в Google Play
-
enatechno получил реакцию от Kitty в Слишком большой размер приложения.
Возможно. Дополнительный файл .so отличается от Вашего тем, что пробел заменен на _. Хотел проверить, но Delphi не дает мне создать проект с пробелом в имени.
-
enatechno получил реакцию от AngryOwl в Слишком большой размер приложения.
Возможно. Дополнительный файл .so отличается от Вашего тем, что пробел заменен на _. Хотел проверить, но Delphi не дает мне создать проект с пробелом в имени.
-
enatechno получил реакцию от Rusland в Слишком большой размер приложения.
Возможно. Дополнительный файл .so отличается от Вашего тем, что пробел заменен на _. Хотел проверить, но Delphi не дает мне создать проект с пробелом в имени.
-
enatechno получил реакцию от Axbor в Слишком большой размер приложения.
Возможно. Дополнительный файл .so отличается от Вашего тем, что пробел заменен на _. Хотел проверить, но Delphi не дает мне создать проект с пробелом в имени.
-
enatechno отреагировална Евгений Корепов в Прочитать DNS запрос в idUDPServer
Все правильно получаете, кодировка тут не при чем. Согласно спецификации "DNS Packet Structure", вы получаете не строку, а пакет который нужно разобрать. К примеру если запрос будет "nslookup www.google.ru 127.0.0.1", то там где вы получаете имя хоста будет строка "''#3'www'#6'google'#2'ru'#0#0#1#0#1".
Парсинг простейший:
#3 - означает что далее идут 3 символа хоста 'www' - вот ожидаемые 3 символа #6 - далее идут еще 6 символов хоста 'google' - ага, вот они #2 - ну и еще 2 символа 'ru' - ура, они здесь #0 - конец имени хоста, складываем в кучу, перемежая точками и получаем www.google.ru #0 - дальше у нас служебная информация... #1 #0 #1 Вот как то так.
P.S. А зачем вам на таком низком уровне работать? Может использовать IdDNSServer : TIdDNSServer ?
P.P.S. Правильно Memo1.Lines.Add(BytesToString(AData,12)); //(12, а не 13)
-
enatechno получил реакцию от zairkz в Слишком большой размер приложения.
Вы используете пробел в названии проекта?
-
enatechno отреагировална Равиль Зарипов (ZuBy) в Меню Android
1) Отдельная форма с прозрачностью + ListBox/ListView
2) TRectangle + ListBox/ListView
3) MultiView + ListBox/ListView
и тд...
ловить кнопочку VK_MENU в событии OnKeyDown
-
enatechno получил реакцию от Rusland в Потоки и процедуры
Здесь Вы обращаетесь к визуальному компоненту в потоке, а не из Synchronize. Возможно в этом проблема?
-
enatechno получил реакцию от Rusland в xe 8 нестандартный grid
Если в гриде планируется выводить только текстовую информацию то используйте TStringGrid. Для отображения текста в ячейке в несколько строк используйте в тексте символ абзаца. Пример:
StrinGrid1.Cells[1, 1] := 'строка 1 в ячейке 1.1' + #13#10 + 'строка 2 в ячейке 1.1'; Если же надо чтоб текст в одной ячейке был отображен разным шрифтом/цветом используйте событие TGrid.OnDrawColumnCell. Ниже описано как работать с TextLayout в этом событии:
Добавлю, что в одной ячейке можно рисовать несколько TextLayout указывая для каждого цвет и размер шрифта, например как TStringGrid на скриншоте:
P.S. Если планируете писать мобильное приложение, используйте TListView вместо грида.
-
enatechno получил реакцию от lev.vorobyov в xe 8 нестандартный grid
Если в гриде планируется выводить только текстовую информацию то используйте TStringGrid. Для отображения текста в ячейке в несколько строк используйте в тексте символ абзаца. Пример:
StrinGrid1.Cells[1, 1] := 'строка 1 в ячейке 1.1' + #13#10 + 'строка 2 в ячейке 1.1'; Если же надо чтоб текст в одной ячейке был отображен разным шрифтом/цветом используйте событие TGrid.OnDrawColumnCell. Ниже описано как работать с TextLayout в этом событии:
Добавлю, что в одной ячейке можно рисовать несколько TextLayout указывая для каждого цвет и размер шрифта, например как TStringGrid на скриншоте:
P.S. Если планируете писать мобильное приложение, используйте TListView вместо грида.
-
enatechno отреагировална Евгений Корепов в Генерация QR-кода на Android
Можно пойти другим путем. Рисовать не на TImage, а использовать шрифты.
На http://fontello.com/ сделал шрифт из двух символов - черный квадрат и белый квадрат. Рисовальщик из меня никудышний, не разобрался как увеличить высоту символов в SVG иконке. Шрифт подключил к проекту, отображаю на Memo, у которого установлен мой шрифт.
Код такой:
procedure TfmMainQRShare.Update; var Row, Column, I : Integer; S : String; ChBlack, ChWhite : String; begin Memo.BeginUpdate; Memo.Lines.Clear; ChBlack:=Char($e802); ChWhite:=Char($e803); QRCode.Free; QRCode := TDelphiZXingQRCode.Create; try QRCode.Data := edtText.Text; QRCode.Encoding := TQRCodeEncoding(cmbEncoding.ItemIndex); QRCode.QuietZone := StrToIntDef(edtQuietZone.Text, 2); for Row := 0 to QRCode.Rows - 1 do begin S:=''; for Column := 0 to QRCode.Columns - 1 do begin if (QRCode.IsBlack[Row, Column]) then S:=S+ChBlack else S:=S+ChWhite; end; Memo.Lines.Add(S); end; finally end; Memo.EndUpdate; end; На картинке видны горизонтальные пробелы между символами, в какой то момент мне удалось методом тыка (редактированием шрифта) от них избавится, но слетела ширина белого квадрата. Оставил вариант который хотя бы читается.
-
enatechno получил реакцию от Евгений Корепов в Cancel в InputQuery
и не только...
What's New - Berlin:
Simplified Dialog API
Several procedures and functions to show dialog boxes are now deprecated, and have been replaced by the
procedures and functions of the new IFMXDialogServiceAsync and IFMXDialogServiceSync platform services
that provide support for synchronous and asynchronous dialog boxes, respectively.
The following table summarizes the API changes:
Deprecated Members
New Members
FMX.Dialogs.ShowMessage*
FMX.Dialogs.ShowMessageFmt*
FMX.Dialogs.ShowMessagePos
ShowMessageAsync
ShowMessageSync
FMX.Dialogs.MessageDlg
FMX.Dialogs.MessageDlgPos
FMX.Dialogs.MessageDlgPosHelp
FMX.Platform.IFMXDialogService.MessageDialog
MessageDialogAsync
MessageDialogSync
FMX.Dialogs.InputBox
FMX.Dialogs.InputQuery
FMX.Platform.IFMXDialogService.InputQuery
InputQueryAsync
InputQuerySync
* ShowMessage and ShowMessageFmt are not really deprecated, but you may want to use ShowMessageAsync
or ShowMessageSync instead nonetheless.
Two new helper classes have been created as well: TDialogServiceAsync and TDialogServiceSync. These helper
classes provide class methods and functions that allow you to call the new procedures and functions for dialog
boxes without the need of an instance of the corresponding dialog box platform service.
Other FireMonkey
-
enatechno получил реакцию от Rusland в Cancel в InputQuery
и не только...
What's New - Berlin:
Simplified Dialog API
Several procedures and functions to show dialog boxes are now deprecated, and have been replaced by the
procedures and functions of the new IFMXDialogServiceAsync and IFMXDialogServiceSync platform services
that provide support for synchronous and asynchronous dialog boxes, respectively.
The following table summarizes the API changes:
Deprecated Members
New Members
FMX.Dialogs.ShowMessage*
FMX.Dialogs.ShowMessageFmt*
FMX.Dialogs.ShowMessagePos
ShowMessageAsync
ShowMessageSync
FMX.Dialogs.MessageDlg
FMX.Dialogs.MessageDlgPos
FMX.Dialogs.MessageDlgPosHelp
FMX.Platform.IFMXDialogService.MessageDialog
MessageDialogAsync
MessageDialogSync
FMX.Dialogs.InputBox
FMX.Dialogs.InputQuery
FMX.Platform.IFMXDialogService.InputQuery
InputQueryAsync
InputQuerySync
* ShowMessage and ShowMessageFmt are not really deprecated, but you may want to use ShowMessageAsync
or ShowMessageSync instead nonetheless.
Two new helper classes have been created as well: TDialogServiceAsync and TDialogServiceSync. These helper
classes provide class methods and functions that allow you to call the new procedures and functions for dialog
boxes without the need of an instance of the corresponding dialog box platform service.
Other FireMonkey
-
enatechno получил реакцию от Равиль Зарипов (ZuBy) в Cancel в InputQuery
и не только...
What's New - Berlin:
Simplified Dialog API
Several procedures and functions to show dialog boxes are now deprecated, and have been replaced by the
procedures and functions of the new IFMXDialogServiceAsync and IFMXDialogServiceSync platform services
that provide support for synchronous and asynchronous dialog boxes, respectively.
The following table summarizes the API changes:
Deprecated Members
New Members
FMX.Dialogs.ShowMessage*
FMX.Dialogs.ShowMessageFmt*
FMX.Dialogs.ShowMessagePos
ShowMessageAsync
ShowMessageSync
FMX.Dialogs.MessageDlg
FMX.Dialogs.MessageDlgPos
FMX.Dialogs.MessageDlgPosHelp
FMX.Platform.IFMXDialogService.MessageDialog
MessageDialogAsync
MessageDialogSync
FMX.Dialogs.InputBox
FMX.Dialogs.InputQuery
FMX.Platform.IFMXDialogService.InputQuery
InputQueryAsync
InputQuerySync
* ShowMessage and ShowMessageFmt are not really deprecated, but you may want to use ShowMessageAsync
or ShowMessageSync instead nonetheless.
Two new helper classes have been created as well: TDialogServiceAsync and TDialogServiceSync. These helper
classes provide class methods and functions that allow you to call the new procedures and functions for dialog
boxes without the need of an instance of the corresponding dialog box platform service.
Other FireMonkey
-
enatechno получил реакцию от Kitty в Cancel в InputQuery
и не только...
What's New - Berlin:
Simplified Dialog API
Several procedures and functions to show dialog boxes are now deprecated, and have been replaced by the
procedures and functions of the new IFMXDialogServiceAsync and IFMXDialogServiceSync platform services
that provide support for synchronous and asynchronous dialog boxes, respectively.
The following table summarizes the API changes:
Deprecated Members
New Members
FMX.Dialogs.ShowMessage*
FMX.Dialogs.ShowMessageFmt*
FMX.Dialogs.ShowMessagePos
ShowMessageAsync
ShowMessageSync
FMX.Dialogs.MessageDlg
FMX.Dialogs.MessageDlgPos
FMX.Dialogs.MessageDlgPosHelp
FMX.Platform.IFMXDialogService.MessageDialog
MessageDialogAsync
MessageDialogSync
FMX.Dialogs.InputBox
FMX.Dialogs.InputQuery
FMX.Platform.IFMXDialogService.InputQuery
InputQueryAsync
InputQuerySync
* ShowMessage and ShowMessageFmt are not really deprecated, but you may want to use ShowMessageAsync
or ShowMessageSync instead nonetheless.
Two new helper classes have been created as well: TDialogServiceAsync and TDialogServiceSync. These helper
classes provide class methods and functions that allow you to call the new procedures and functions for dialog
boxes without the need of an instance of the corresponding dialog box platform service.
Other FireMonkey
-
enatechno получил реакцию от rareMax в Cancel в InputQuery
и не только...
What's New - Berlin:
Simplified Dialog API
Several procedures and functions to show dialog boxes are now deprecated, and have been replaced by the
procedures and functions of the new IFMXDialogServiceAsync and IFMXDialogServiceSync platform services
that provide support for synchronous and asynchronous dialog boxes, respectively.
The following table summarizes the API changes:
Deprecated Members
New Members
FMX.Dialogs.ShowMessage*
FMX.Dialogs.ShowMessageFmt*
FMX.Dialogs.ShowMessagePos
ShowMessageAsync
ShowMessageSync
FMX.Dialogs.MessageDlg
FMX.Dialogs.MessageDlgPos
FMX.Dialogs.MessageDlgPosHelp
FMX.Platform.IFMXDialogService.MessageDialog
MessageDialogAsync
MessageDialogSync
FMX.Dialogs.InputBox
FMX.Dialogs.InputQuery
FMX.Platform.IFMXDialogService.InputQuery
InputQueryAsync
InputQuerySync
* ShowMessage and ShowMessageFmt are not really deprecated, but you may want to use ShowMessageAsync
or ShowMessageSync instead nonetheless.
Two new helper classes have been created as well: TDialogServiceAsync and TDialogServiceSync. These helper
classes provide class methods and functions that allow you to call the new procedures and functions for dialog
boxes without the need of an instance of the corresponding dialog box platform service.
Other FireMonkey
-
enatechno отреагировална Равиль Зарипов (ZuBy) в Переход по нажатию кнопки "Enter"
есть два способа
1) выставить правильные TabStop'ы (TabOrder) контролам и ReturnType = Next
2) самому присваивать фокус следующему компоненту, при нажатии на VK_RETURN
-
enatechno отреагировална Rusland в Рисование окружности
Как-то так
#include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.fmx" TForm1 *Form1; int c=0; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { c=c+20; Arc1->EndAngle=c; if (c<90) {Text1->Text="4";} else if (c<180) {Text1->Text="3";} else if (c<270) {Text1->Text="2";} else if (c<360) {Text1->Text="1";} else if (c==360) {Timer1->Enabled=False;Text1->Text="0";c=0;} } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Arc1->EndAngle=0; Timer1->Enabled=true; } //---------------------------------------------------------------------------
ArcTimer.zip
-
enatechno отреагировална Равиль Зарипов (ZuBy) в DeviceInfo - модуль для получения информации о девайсе
DeviceInfo - модуль для получения информации о девайсе
Android || Windows || IOS || MAC OS
Intel планшет
для Андроида нужно включить разрешения (permission)
Ссылка на GitHub