Активность

Лента обновляется автоматически     

  1. Последний час
  2. Tlabel Click

    Доброго времени суток, на Delphi 10.2.3 наблюдается странное поведение компоненты TLabel (FMX) Из свойств установлено: lblCompanyMail.StyleLookup := 'labelstyle'; lblCompanyMail.ApplyStyleLookup; lblCompanyMail.AutoSize := True; lblCompanyMail.WordWrap := False; lblCompanyMail.Text := 'info@company.com'; lblCompanyMail.Position.X := 10; lblCompanyMail.Position.Y := 10; lblCompanyMail.TabStop := False; По событию OnClick ничего не происходит. В чем может быть затык? Заранее, спасибо!
  3. Сегодня
  4. StatusBar Color

    Добрый день, на основе вашей последней версии, в том же проекте создал основу интерфейса для своей программы. Сохранил, все отлично работает, но потом понял что название проекта то нужно изменить... пробовал сохранить проект заново "Save Project As", но вылетает ошибка (скрин ниже). Затем попробовал создать новый проект и все ваши файлы туда "внедрить", вроде все получилось, ошибок нет, стили применились - статус бар прозрачный, но все содержимое ( ToolBar и т.п.) проваливается, т.е. не работает почему-то эта команда на отступ не работает - "TmyWindow.StatusBarHeight". Можете пожалуйста посмотреть прикрепленный проект, в чем я накосячил? Спасибо! 24.04.2018.rar
  5. Как бы это по мягче сказать.... он (почти) работает. На андроиде работает (хоть как-то) только он, на винде глюков в несколько раз меньше стокового. Я про российский компонент. TRichView. Даже бэкап сайта на его основе делал. Честно скажу - 700к в него не пихал, но порядка 80-100к - живал без проблем.
  6. Вчера
  7. Windows 7x64 (но собирал под x32). А так прога с прицелом и на Android тоже. TMS браузер не пробовал, в чём собственно его преимущество? RichEdit от TMS пробовал - очень сильно медленно работает, а у меня около 700k чистого текста. И кроме того - в html легко сделать мягкие переносы, выравнивание по обоим краям, колонки через табличную вёрстку и подгонка высоты и ширины колонок через встроенный javascript - так что richedit-ы для меня использовать не вариант. А браузер не перерисовывается не потому, что команда не успевает сработать, а не обновляется вообще, и через минуту, если не дёрнешь. Так вот - как можно программно это "дёрганье" сэмулировать?
  8. Обработка ява-скрипт команды занимает некоторое время и происходит асинхронно. Поэтому если сразу сделать репаинт - ничего не изменится. P.S. Что за ОС? Как ведёт себя браузер от TMS? Вообще если статический html и якоря, то на дельфе лучше richedit какой-нибудь сторонний использовать... Ну это так, к слову.
  9. Хм, что-то получилось. Вот таким костылём, но меня вполне устраивает: WebBrowser1.EvaluateJavaScript('document.location.href=''#z10'';'); Только одно "но" - браузер не обновляется автоматически, только когда начнёшь скроллить происходит реальное отображение новой позиции. WebBrowser.Repaint и Application.ProcessMessages не дают нужного эффекта.
  10. Есть динамически создаваемая страница, на ней размечены опорные точки <a name="zXXX"></a> WebBrowser1.LoadFromStrings(GenerateHtml, ''); Есть TreeView, нажатие на пункты которого должно скроллить браузер к этим якорям. Вот так: не получается... WebBrowser1.Navigate('#z10'); Как это можно сделать? Может, есть какое-то внутреннее имя у страницы, чтобы указать в Navigate? В LoadFromStrings в качестве 2-го параметра задавал имя, допустим 'test', в Navigate указывал 'test#z10' - не работает. Подскажите кто знает...
  11. Последняя неделя
  12. Скругление углов у Edit

    Всем привет. Кто поможет подсказать, как сделать скругление углов у Edit только с одной стороны (слева, сверху, справа, снизу и так далее), а не везде сразу? Есть задача сделать: Но пока что у меня: Спасибо за помощь.
  13. Тут в процессе работы над одним проектом понадобилось узнать IP адрес устройства. Очень не хотелось включать дополнительные разрешения приложению. Думал ограничится одним "Доступ в Интернет". Вот как это можно сделать: С помощью TIdUDPServer посылаем широковещательное сообщение, с помощью того же TIdUDPServer сами получаем его и в ABinding узнаем с какого IP оно пришло. Таким образом мы узнаем IP адрес интерфейса с маршрутом по умолчанию. Вот код, все просто: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IdGlobal, IdSocketHandle, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer; const ConstUDPSendString = 'dfgb2hd3f6gbf'; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } FUDPServer : TIdUDPServer; FMyIP : String; procedure OnUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); procedure GetMyIP; public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin GetMyIP; end; procedure TForm1.GetMyIP; begin FMyIP:=''; FUDPServer:=TIdUDPServer.Create; FUDPServer.DefaultPort:=46734; FUDPServer.BroadcastEnabled:=True; FUDPServer.OnUDPRead:=OnUDPServerUDPRead; FUDPServer.Active:=True; FUDPServer.Broadcast(ConstUDPSendString, FUDPServer.DefaultPort); end; procedure TForm1.OnUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); begin AThread.Synchronize(AThread, procedure begin if BytesToString(AData).Equals(ConstUDPSendString) and FMyIP.IsEmpty then FMyIP:=ABinding.PeerIP; end ); end; end.
  14. Использование SSL

    Благодарю всех ответивших !
  15. Да ничего сложного. Вы как в телеграмме дублируйте новости на английском языке. Все. Мы сами позаботимся, чтобы иностранцы имели прямую ссылку на этот раздел форума...
  16. Так поиск в словаре O(1). Вычисление хеша и получение индекса.
  17. Но ведь еще нужно время чтобы в словаре найти сответствие.
  18. Если я все помню, то поиск в не упорядоченном списке Бинарным поиском - это O(nlog(n)). А поиск в словаре О(1).
  19. Проще использовать бинарный поиск для поиска своего индекса-идентификатора контрола, готовый бинарный поиск реализован в TList и его потомках, также в массивах.
  20. Использование SSL

    Лучше спросить у хостера. Обычно у них в панели есть кнопка для включения этого - ткнул и появился https c сертификатом от Let's Encrypt.
  21. ListView - DynamicAppearance - header

    у винды было такое например свойствоTListView.TopItem, по которому можно было узнать где сейчас отрисовка. OnPullRefresh - это событие, когда пользователь на первом элементе крутит вверх. используется для обновления данных. а тут чуть другое. попробую определять верхний индекс итема через indx := Trunc(ListView.ScrollViewPos / ListView.ItemAppearance.ItemHeight); далее прибавить кол. видимых итемов (ListView.Height / ListView.ItemAppearance.ItemHeight) и узнать примерно подходим мы к концу или нет.
  22. ListView - DynamicAppearance - header

    OnPullRefresh но это неспортивно ) надо пытаться заранее, а не когда уже всё у listView есть ScrollViewPos
  23. ListView - DynamicAppearance - header

    да, я смотрел на обработчик OnScrollViewChange. только не могу понять, как отследить, что список подходит к концу и нужно подтянуть новую порцию данных. listView.ItemIndex указывает на выбранный итем, а тут нужно как-то узнать ItemIndex верхнего\нижнего отрисовываемого итема, что бы понять что прокрутка доходит до конца и нужно подтянуть следующую порцию данных. или какое-то событие типа OnScrollEnd. не вкурсе, может где-то запрятано такое событие?
  24. ListView - DynamicAppearance - header

    да, я смотрел на обработчик OnScrollViewChange. только не могу понять, как отследить, что список подходит к концу и нужно подтянуть новую порцию данных. listView.ItemIndex указывает на выбранный итем, а тут нужно как-то узнать ItemIndex верхнего\нижнего отрисовываемого итема, что бы понять что прокрутка доходит до конца и нужно подтянуть следующую порцию данных. или какое-то событие типа OnScrollEnd
  25. Для получения инфо о доставке пуша, надо использовать XMPP Вот гугломануал Firebase Cloud Messaging XMPP Protocol ПО для отправки сообщений (комп, сервер и т.д.) <-- обмен по протоколу XMPP ---> Сервер гугла FCM <-------> Андроид устройство использовал IdTCPClient Host fcm-xmpp.googleapis.com Port 5236 IdTCPClient.Connect вот сценарий >>> - отправка на FCM <<< - ответ от FCM >>> здороваемся (IdTCPClient1.IOHandler.WriteLn ) <stream:stream to="gcm.googleapis.com" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams"> <<< (IdTCPClient1.IOHandler.Readln) <stream:stream from="gcm.googleapis.com" id="000000000000" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"> <<< <stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-OAUTH2</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism><mechanism>PLAIN</mechanism></mechanisms></stream:features> >>> логинимся <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">Base64Encode(sender_id@gcm.googleapis.com+ApiKey)</auth> <<< <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/> >>> отправляем обязательный пакет <stream:stream to="gcm.googleapis.com" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams"> <<< <stream:stream from="gcm.googleapis.com" id="000000000000" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"> <<< <stream:features><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features> >>> отправляем обязательный пакет <iq type="set"> <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"></bind></iq> <<< <iq type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>sender_id@gcm.googleapis.com/000000</jid></bind></iq> >>> отправляем сообщение <message><gcm xmlns="google:mobile:data">{"message_id":"20","delivery_receipt_requested":true,"to":"DeviceToken","data":{"title":"Message title","message":"Message text"}}</gcm></message> <<< получаем подтверждение, что гуглосервер принл сообщение от нас <message><data:gcm xmlns:data="google:mobile:data">{"message_type":"ack","from":"DeviceToken","message_id":"20"}</data:gcm></message> <<< получаем подтверждение, что сообщение доставлено на андроид-устройство <message to="sender_id@gcm.googleapis.com" from="devices@gcm.googleapis.com" type="normal"><gcm xmlns="google:mobile:data">{"data":{"message_status":"MESSAGE_SENT_TO_DEVICE","device_registration_id":"DeviceToken","message_sent_timestamp":"1524141512313","original_message_id":"20"},"time_to_live":0,"from":"gcm.googleapis.com","message_id":"dr2:20","message_type":"receipt","category":"com.pushTest"}</gcm></message> Ключ АПИ и идентификатор отправителя надо брать в консоли Firebase https://console.firebase.google.com/u/0/project Подробно описано тут http://blog.rzaripov.kz/2017/02/firebase-android-ios.html
  26. ListView - DynamicAppearance - header

    давно уже все говорили, что все эти биндинги плохо решают реальные задачи бесконечная прокрутка должна реализовываться как удаление итемов из направления "позади" и добавление в направление "впереди" в зависимости от направления прокрутки обработчик OnScrollViewChange. направление прокрутки определять самостоятельно при достижении некоторого индекса нужно запускать поток, который запрашивает новую порцию данных когда поток заканчивается, данные подгружать в ListView
  27. ListView - DynamicAppearance - header

    найти текст хедера по выбранному итему можно так: i:= ListView.ItemIndex; while (i >=0) and (ListView.Items.Purpose <> TListItemPurpose.Header) do dec(i); HeaderText:= ListView.Items.Text; я думал есть какая-то связь и по ListView.ItemIndex можно было бы узнать по какому там хедеру сгруппировано.
  28. Использование SSL

    https://www.tmssoftware.com/site/blog.asp
  1. Загрузить ещё активность