Евгений Корепов

Пользователи
  • Публикации

    288
  • Зарегистрирован

  • Посещение

  • Days Won

    10

Евгений Корепов last won the day on 25 сентября 2016

Евгений Корепов had the most liked content!

О Евгений Корепов

  • Звание
    Продвинутый пользователь
  • День рождения 22 июля

Информация

  • Пол
    Мужчина
  • Город
    Ухта

Посетители профиля

647 просмотров профиля
  1. Создал https://quality.embarcadero.com/browse/RSP-16910 по этой проблеме. Надеюсь разработчики что то подскажут.
  2. Создал https://quality.embarcadero.com/browse/RSP-16910 . Правда мой английский не позволяет свободно описать проблему, надеюсь переводчик гугл справился с задачей более-менее сносно :-)
  3. Вот именно то что я искал, спасибо! Хорошая статья, теперь в голове все встало на свои места.
  4. К сожалению на чистом проекте воспроизвести глюк не удалось, а в том проекте где глюк наблюдался, сделал все ручками c помощью TObjectList<TImage>...
  5. TDictionary работает посредством хеш таблицы, и работает чертовски быстро (исключая некоторые специфичные моменты Collision resolution). А код просто выдрал из живого проекта, поэтому лишнее присутствует ;-)
  6. А как решить проблему на андроид ТВ-приставках (тема уже дважды поднималась на форуме, но решения нет) - приложения Дельфи не реагируют на нажатие кнопки Ок с пульта управления (Инфракрасный пульт), на цифро-буквенные, меню, назад реагируют нормально. Товарищ по моей просьбе написал приложение на андроид студии, форма с кнопкой (фокус на кнопке), при нажатии выводится сообщение "Кнопка нажата" - на тв-приставки с пульта кнопка прекрасно нажимается. Аналогичное приложение на Дельфи (Berlin Update 2) никак не реагирует. Из за этой проблемы путь на тв-приставки приложениям на Дельфи закрыт :-(
  7. Если именно как на приведенной вами картинке то вот так: Делаете ListView с DynamicAppearance, включаете DesingMode, добавляете необходимые поля, включая TListItemAccessory с AccessoryType=Checkmark (он и будет отображать красивые галочки). Не забудьте дать названия добавленным элементам. В моем коде TListItemAccessory называется "ShowPool" P.S. Вариант, предложенный выше, с ListView1.EditMode := True будет выглядеть страшненько, чекбоксы не очень хорошо смотрятся в интерфейсе приложений. procedure TFormMain.FillSettingPools; Var I : Integer; AItem : TListViewItem; begin ListViewPools.BeginUpdate; ListViewPools.Items.Clear; for I := 0 to FPoolList.Count-1 do begin AItem:=ListViewPools.Items.Add; AItem.Data['CoinName']:=FPoolList.Items[I].CoinName; AItem.Data['CoinDetail']:=FPoolList.Items[I].Href; AItem.Data['ShowPool']:=FPoolList.Items[I].ShowPool; TListItemAccessory(AItem.View.FindDrawable('ShowPool')).Visible:=FPoolList.Items[I].ShowPool; //Boolean end; ListViewPools.EndUpdate; end; procedure TFormMain.ListViewPoolsUpdateObjects(const Sender: TObject; const AItem: TListViewItem); Var AItemAccessory : TListItemAccessory; begin AItemAccessory:=TListItemAccessory(AItem.View.FindDrawable('ShowPool')); if AItem.Data['ShowPool'].AsBoolean then AItemAccessory.Visible:=True Else AItemAccessory.Visible:=False; end; procedure TFormMain.ListViewPoolsItemClick(const Sender: TObject; const AItem: TListViewItem); Var I : Integer; S : String; AListItemAccessory : TListItemAccessory; APool : TPool; AShowPool : Boolean; begin AListItemAccessory:=TListItemAccessory(AItem.View.FindDrawable('ShowPool')); if AListItemAccessory<>nil then begin AShowPool:=AItem.Data['ShowPool'].AsBoolean; AShowPool:=Not AShowPool; AListItemAccessory.Visible:=AShowPool; AItem.Data['ShowPool']:=AShowPool; S:=AItem.Data['CoinName'].AsString; for I := 0 to FPoolList.Count-1 do begin If FPoolList.Items[I].CoinName.Equals(S) Then begin APool:=FPoolList.Items[I]; APool.ShowPool:=AShowPool; FPoolList.Items[I]:=APool; Break; end; end; end; FillListViewPoolsMaster; SavePools; end;
  8. Вот бы статью с иллюстрациями о правильном использовании TImageList. Интерфейс дизайн-части крайне нелогичный и запутанный. Мой опыт использования обычно заканчивается психозом из за того что компонент рушит приложение из за ошибок с индексами. И фиг поймешь почему он падает при попытке обращения к некоему индексу 3 (где то в недрах своего кода), если в нем всего две картинки, которые используются на двух кнопках.
  9. Для этого лучше использовать TCPServer и TCPClient, протокол TCP сделает это все гораздо лучше, чем велосипед на UDP. Но если именно UDP, то алгоритм такой: нумеруете все отправляемые пакеты, вставляя в тело пакета его номер, что бы на стороне приемника контролировать все ли пакеты пришли и в правильной ли последовательности (udp пакеты могут прийти не в той последовательности в которой отправлены), в завершении передачи отправляете хэш файла (md5 к примеру) для контроля целостности всего файла. Естественно при не получении какого то пакета, нужно отправлять запрос на сервер о повторной отправке. Желательно еще и хэш каждого пакета к нему присобачивать. Так же нужно учесть обрезку и дробление пакетов из за разных размеров MTU на промежуточных устройствах сети.
  10. Попробуйте на событие OnMouseDown делать ListBox1.HitTest:=False, а на OnMouseUp ListBox1.HitTest:=True
  11. Приложите проект который можно запустить, попробую помочь. Кстати может стоит отказаться от UDP клиента совсем? UDP сервер умеет все тоже что и клиент, плюс умеет слушать порт.
  12. А вот как получить параметры Ethernet? Кстати вот еще способ получения дополнительных параметров: Папка /sys/class/, в ней много всего, к примеру display, ethernet, input, net, video. Вот некоторые файлы папки /sys/class/net/eth0/ (через тире их содержимое): address - f8:f0:82:4f:06:17 carrier - 1 duplex - full mtu - 1500 operstate - up speed - 100 P.S. Кстати для просмотра содержимого удобно поставить ftp-сервер на устройство и с компа клиентом, к примеру Far Manager, смотреть.
  13. Не только должна, но и отлично работает. Вот пример: function TFormMain.CreateUDPServer : Boolean; Var I : Integer; begin Result:=False; IdUDPServer:=TIdUDPServer.Create; IdUDPServer.BroadcastEnabled:=True; IdUDPServer.OnUDPRead:=IdUDPServerUDPRead; for I := Low(UDPPortArray) to High(UDPPortArray) do begin IdUDPServer.Bindings.Clear; with IdUDPServer.Bindings.Add do begin IP:='0.0.0.0'; Port:=UDPPortArray[I]; end; try IdUDPServer.Active:=True; except end; if IdUDPServer.Active then begin FActiveUDPPort:=IdUDPServer.Bindings.Items[0].Port; IPMACLocalPair.Port:=IdUDPServer.Bindings.Items[0].Port; Result:=True; Exit; end; end; FActiveUDPPort:=-1; end; procedure TFormMain.IdUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); Var S : String; begin if (IPMACLocalPair.IP.Equals(ABinding.PeerIP)) And (IPMACLocalPair.Port=ABinding.PeerPort) then exit; DateTimeToString(S, 'hh:nn:ss.zzz', Now); S:=S+' '+BytesToString(AData , IndyUTF8Encoding); S:=S+' | from '+ABinding.PeerIP+':'+ABinding.PeerPort.ToString; Memo.Lines.Insert(0,S); end; На UDPPortArray не обращайте внимание, это если порт занят, то используется другой (UDPPortArray : array [0..2] of Integer = (55771, 55772, 55773);). IdUDPServer.BroadcastEnabled:=True; тоже не нужно, если не собираетесь широковещать. Большинство функций работы с TIdBytes доступны в юните idGlobal, как например BytesToString(AData , IndyUTF8Encoding) в моем коде.
  14. Проверил на тв-приставке. Все отлично, кроме определения сетевых параметров. На приставке wifi выключен, имеется 100Мбит ethernet подключение. Скриншот прилагаю. Прошу прощения за качество, не допер как сделать скриншот с телевизора (или приставки), так что сфотографировал экран ;-)
  15. Попробовал попрограммить под приставку и победить специфику управления, результат опубликовал в уже существующей теме