Доска почета

There are no members to show


Popular Content

Showing most liked content since 21.01.2017 in Article отзывов

  1. Ссылка: http://blog.rzaripov.kz/2017/02/firebase-android-ios.html Автор: Зарипов Равиль @ZuBy Описание: Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS
    10 likes
  2. Даже не знаю или в правильный раздел форума пишу. Я, например, хочу поблагодарить в своей теме - krapotkin и Равиль Зарипов за очень полезные ответы. Реально помогают решить вопросы. Спасибо. Хотя все они паскалисты, все же удается иногда получить код на С++ со стороны. Очень в этом помогает автор Indy rlebeau, например эту статью: Статья он переводит в С++ тут: C++ и никто бы другой не помог. В этом плане тяжело, без него и никак вопрос не решить. А этот форум это симбиоз ума и решений! Спасибо Ярославу за реализацию и хоты бы одного спеца по С++ как по Дельфи и - вот оно счастье. Спасибо!
    7 likes
  3. Выложена альфа версия ErrorSoft TurboUpdate - библиотека для легкого добавления автообновления в ваши FMX и VCL приложения под Windows. Совместимость - Delphi Seattle и выше. Описания пока нет, но в репозитории есть примеры для ознакомления. Лицензирование - для OpenSource и не коммерческого использования данная библиотека абсолютно бесплатна, допустимо изменение и т.д. Для коммерческого применения - пока нет решения. https://github.com/errorcalc/TurboUpdate Перед использованием необходимо установить необходимые Packages: TurboUpdateFmxOnly.groupproj - FMX only. TurboUpdateGroup.groupproj - VCL + FMX, зависит от ErrorSoftVclComponents(https://github.com/errorcalc/FreeEsVclComponents). Это ранняя альфа, необходимы ваши отзывы, критика и т.д.
    7 likes
  4. Описание Назначение: Компонент предназначен для отображения группы TRadioButton и осуществления выбор. Поддерживает стилизацию. Поддерживаемые платформы: Windows, OSX, iOS, Android Демо проект: Samples\RadioGroupDemo\RadioGroupDemo.dproj Возможности Стилизация через указание двух картинок отображающих голос и пустой голос Настройки отображения заголовка группы TfgRadiouGroup.TextOptions.TitleTextSettings Возможность выбрать настройки отображения заголовка группы из стиля TfgRadioGroup.TextOptions.StyledTitleTextSettings Настройки отображения текста TRadioGroup TfgRadiouGroup.TextOptions.ButtonTextSettings Возможность выбрать настройки отображения текста TRadioGroup из стиля TfgRadioGroup.TextOptions.StyledButtonTextSettings Текущий выбранный вариант TfgRadioGroup.ItemIndex Возможность разбить варианты на колонки TfgRadioGroup.AlignOptions.Columns Возможность указать отступы для вариантов по вертикале и горизонател TfgRadioGroup.AlignOptions.HorzSpace, TfgRadioGroup.AlignOptions.VertSpace Возможность узнать, когда пользователь делает выбор TfgRadioGroup.OnChanged
    7 likes
  5. Сделал пример приложения для работы с Microsoft Word из приложения Delphi. Такое приложение может использоваться для обмена данными между объектами семейства Microsoft Office. Исходные коды приложения помогут вам понять, как работать с объектной моделью Microsoft Word. Чтобы лучше разобраться с нюансами Word, предлагаю ознакомиться со справочником Word VBA reference на MSDN. Проект создан в среде FireMonkey Delphi Berlin 10.1 Протестирован в MS Word 2010, 2016, Windows 7x64 и 10x64. Чтобы посмотреть пример, просто распакуйте zip-файл проекта и щелкайте по порядку кнопки на форме. Скачать Delphi Word Test WordTest.zip
    7 likes
  6. 6 likes
  7. В качестве послесловия. Деструктор объекта не может быть вызван внутри метода этого объекта (самоубийства запрещены). Всегда можно поставить точку останова на вызов метода Free/FreeAndNil. И внимательно посмотреть стек вызова, если где-то в стеке вызова присутствует разрушаемый объект, то это не правильно. Сложности добавляет то, что это не обязательно приводит возникновению AV, вполне может быть, что у вас всё будет работать без ошибок, а на другом компьютере, или на другой платформе с ошибками. Release на самом деле приводит к отложенному удалению не внутри вызывающего метода, т.е. объект просто помечается как готовый к удалению.
    5 likes
  8. собираю голоса за запрещение слова андройд
    4 likes
  9. вам не нужно выполнять клик по listView, а нужно выполнять то, что должно выполняться по клику procedure TForm1.MyProc; begin .... end; procedure TForm1.ListViewClickEx(....); begin ... if (....) then MyProc; ... end; вот MyProc и выполняйте
    4 likes
  10. 4 likes
  11. 4 likes
  12. 4 likes
  13. 4 likes
  14. procedure RttiClick(const Obj: TObject); // uses System.TypInfo; var M: TMethod; begin if Obj = nil then exit; M := GetMethodProp(Obj, 'OnClick'); if Assigned(M.Code) then TNotifyEvent(M)(Obj); end; использовать RttiClick(Button2);
    4 likes
  15. ну вот такая есть штука у меня Это нативные окошки пока только под андроид NativeView.zip
    4 likes
  16. У стандартного TListView уже все есть: //устанавливаем режим редактирования у списка либо в редакторе свойств выставляем ListView1.EditMode := True; //... //Получаем список всех выбранных элементов ListView1.Items.CheckedIndexes(true); //обращаться к свойству текущего элемента так: ListView1.Items.SetChecked(const Index: Integer; const Value: Boolean); ListView1.Items.GetChecked(const Index: Integer): Boolean;
    3 likes
  17. от души рекомендую заменить TJSONObject на XSuperObject https://github.com/onryldz/x-superobject код будет таким примерно uses XSuperObject; ... procedure TForm1.b1Click(Sender: TObject); var x:ISuperObject; arr:ISuperArray; str:string; begin X:=TSuperObject.Create(); X.S['jsonrpc'] := '2.0'; X.S['method'] := 'get_accounts'; X.I['id'] := 1; arr:=TSuperArray.Create(); arr.Add('captain'); X.A['params']:=arr; ... str:=X.AsJSON(); ... но для начала вам нужно убедиться, что для правильного запроса правильный ответ. ваша строка с образцом не совпадает только в id у вас это строка, а в приведенных примерах - число. может, в этом проблема h:=THTTPClient.Create(); // h.Accept := 'application/json' // h.AcceptCharSet := 'UTF-8'; src:=TStringStream.Create('{"jsonrpc":"2.0","method":"get_accounts","id":1,"params":["captain"]}'); res:=TStringStream.Create(); resp:=h.Post(URL,src,res); if resp.StatusCode=200 then begin ShowMessage('Ответ'+sLineBreak+res.DataString); end; FreeAndNil(h); FreeAndNil(res); FreeAndNil(src); так же может быть, нужно правильно указывать кодировку запроса-ответа и другие заголовки HTTP проверьте этот код. а потом уже делайте JSON любым способом
    3 likes
  18. 3 likes
  19. Вот пример как у меня идет добавление в архив используя zip в MacOS: function ZipAdd(AArchName, AFileName: String): boolean; {$IFDEF MACOS} var s, sRoot, sFileName, sArchName: String; {$ENDIF} begin Result := False; {$IFDEF MACOS} try if DirectoryExists(AFileName) then begin if AFileName[AFileName.Length] = PathDelim then System.Delete(AFileName, AFileName.Length, 1); sRoot := ExtractFilePath(AFileName); AFileName := AFileName.Remove(0, sRoot.Length); s := Format('pushd "%s"; zip -r "%s" "%s"; popd', [sRoot, AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end else begin s := Format('zip -j "%s" "%s"', [AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end; Result := FileExists(AArchName); except Result := False; end; {$ENDIF} end; Замените зиповские команды архивирования на раровские разархивирования, добавьте необходимую Вам логику и наслаждайтесь
    3 likes
  20. Нет, не пойдет. Потому что DoOnCloseInfo по прежнему вызывается из внутренностей TButton.Click. Если ваш код отрабатывает на Windows - это ваша недоработка, а не показатель правильности. Причины я изложил выше. А на мобильных платформах с фреймом визуально просто ничего не произойдет. Причины опять-таки изложил выше. И в таком виде тоже не пойдет. Потому что Synchronize и Queue, будучи вызванными из главного потока, моментально передают управление в метод, а не дожидаются очередного витка выборки сообщений у Application. В таком виде вы просто добавляете несколько вложенных вызовов, увеличивая занятость стека. Не меняя при этом концепцию работы.
    3 likes
  21. Для мобильных есть (не)визуальные нативные компоненты TCustomPopover - http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.MultiView.Types.TCustomPopover TCustomListPicker - http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Pickers.TCustomListPicker TMultiView с режимом Popover TfgActionSheet - http://fire-monkey.ru/topic/3173-rx-fgx-описание-версии-071118/
    3 likes
  22. стиль должен заведовать оформлением а не функционалом если в стиль запихать TButton и TEdit то как потом с этим добром работать-то? только в OnApplyStyle ? Это нужно реализовывать стандартным образом, вставляя компоненты друг в друга. Тогда и свойства все доступны... Если нужно повторяющийся комплект использовать, то кинуть это все в TFrame
    3 likes
  23. необходимо использовать жесты. обрабатывать их нужно в событии OnGesture для определения того, что происходит в данный момент, есть EventInfo, с помощью которого можно узнать начался жест, окончился или нужно действовать по инерции (это свойство Flags). так же с помощью EventInfo можно узнать, какой именно жест происходит, а так же текущие координаты в качестве примера вот можете глянуть мою "демку" (это я делал пробу пера для одного проекта). код не претендует на звание эталонного, но вроде понятный test_touchanim.zip
    3 likes
  24. 3 likes
  25. решение как я и предполагал простое. У ListBox есть свойство GroupingKind. Так вот по дефолту оно стоит Plaint (без зазоров) а когда меняешь на Grouped появляются полосочки как я и хотел. странно что никто на форуме этого не знал...
    3 likes
  26. скорость жеста можно определить по изменению координаты этого жеста (EventInfo.Location). Запомнить предыдущее положение и сравнить с теперешним. Если разность этих положений будет выходить за вами определенную дельту, то можно считать жест резким (мне пока только такой способ видится) а длина отрезка жеста... EventInfo.Distance? П.С. Это все определяется в OnGesture
    3 likes
  27. Вопрос: как определить, какое именно действие совершает пользователь - увеличивает или уменьшает? Ответ: на примере сэмпла, поставляемого в комплекте с Delphi, в файле C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Mobile Snippets\InteractiveGestures\ImageZoom\ImageZoomU.pas можно попробовать заменить одну часть процедуры: begin { zoom the image } LImage := TImage(LObj.GetObject); LImageCenter := LImage.Position.Point + PointF(LImage.Width / 2, LImage.Height / 2); LImage.Width := LImage.Width + (EventInfo.Distance - FLastDistance); LImage.Height := LImage.Height + (EventInfo.Distance - FLastDistance); LImage.Position.X := LImageCenter.X - LImage.Width / 2; LImage.Position.Y := LImageCenter.Y - LImage.Height / 2; end; на другую: begin { zoom the image } if EventInfo.Distance > FLastDistance then showmessage('zoom in') else showmessage('zoom out'); end; Что с этим делать дальше — думаю, объяснять излишне. Если кто знает более элегантное решение, не основанное на вычислении дистанции, — смело делитесь, не стесняйтесь.
    3 likes
  28. я бы вообще в лоб сделал в GridPanelLayout внутри ScrollBox'а
    3 likes
  29. мы в чатике обсуждали такое поведение, решается через CopyFromBitmap TakePhoto.zip
    3 likes
  30. 3 likes
  31. Авторство всецело не мое, только правки вносил, т.к. в разных версиях студии код вел себя по-разному. Прощу прощения за то, что выкладываю в неудобной форме, просто из моего проекта сейчас это будет уже достаточно проблематично вытащить. Код для использования: На форме лежат Мемо, кнопки открытия/закрытия, эдит для отправляемых текстов и кнопка отправить. в паблике у формы добавляем объект GPort: TComPort; // ****************************************************************************** // ПРОЦЕДУРЫ РАБОТЫ С COM ПОРТОМ // открываем порт procedure TFormChannels.OpenPort(PortNum: Byte); begin GPort := TComPort.Create(PortNum, br9600); GPort.OnRead := FormChannels.OnRead; GFlagOpen := true; FormChannels.ButtonClosePort.Enabled := true; end; // закрываем порт procedure TFormChannels.ClosePort; begin GPort.Free; end; // отправляем в порт данные procedure TFormChannels.WritePort(strWrite: string); var arrBytes: array of Byte; i: Integer; begin if GFlagOpen = False then // проверяем, открыт ли порт OpenPort(strtoint(edtPort.Text)); // если нет, то открываем SetLength(arrBytes, Length(strWrite)); for i := Low(arrBytes) to High(arrBytes) do arrBytes[i] := Ord(strWrite[i + 1]); GPort.Write(arrBytes); arrBytes := nil; end; // читаем данные из порта procedure TFormChannels.OnRead(Sender: TObject; ReadBytes: array of Byte); var i: Integer; begin memRead1.Lines.BeginUpdate; for i := Low(ReadBytes) to High(ReadBytes) do begin if i > Low(ReadBytes) then memRead1.Text := memRead1.Text; // + '.'; memRead1.Text := memRead1.Text + char(ReadBytes[i]); end; // подчищаем заполняющийся Мемо if memRead1.Lines.Count > 5 then begin // memRead1.Clear; memRead1.Lines.Delete(0); memRead1.Lines.Delete(1); end; memRead1.Lines.EndUpdate; end; procedure TFormChannels.ButtonClosePortClick(Sender: TObject); begin ClosePort; end; // открываем порт кнопкой procedure TFormChannels.ButtonOpenPortClick(Sender: TObject); begin OpenPort(strtoint(edtPort.Text)); end; // отправляем в порт данные кнопкой procedure TFormChannels.btnWriteClick(Sender: TObject); begin WritePort(FormChannels.edtWrite.Text); end; // КОНЕЦ ПРОЦЕДУР РАБОТЫ С COM ПОРТОМ // ****************************************************************************** ComPort.zip
    3 likes
  32. Вроде там все просто, не запутанно. https://community.embarcadero.com/blogs/entry/timagelistxe8ru
    2 likes
  33. Прикладывайте к таким сообщениям скрины. Планшеты есть не у всех. Можно попробовать покрасить форму в чёрный цвет, на форму кинуть, например, TPanel (или TRectangle) с необходимыми размерами, выравниванием по центру и уже в него вставлять все остальные компоненты.
    2 likes
  34. 2 likes
  35. См. документацию источник знаний: KeyDown или TKeyEvent. Key это скан код клавиши приведенный к виртуальным кодам клавиш windows. Это значение получается когда нажато некоторое сочетание клавиш к примеру Ctrl+<пробел>, такие нажатия последовательно передаются всем контролам, пока один из них не обработает его и не сбросит в 0. За некоторыми исключениями эти значения определяются физическим расположением клавиш, т. е. английская клавиша <A> будет всегда располагаться приблизительно в одном и том же месте и на Mac и на Win и в России и в Гондурасе. Keychar это введенная буква. Т.е. обычная буква которая вводится при наборе текста зависит от платформы, языка, выбранной раскладки способа ввода и прочих параметров. Такие нажатия передаются только фокусному контролу. Так что для Ctrl+<пробел> надо использовать проверку if (Key = vkSpace) and (ssCtrl in shift). Для проверки нажатия Ctrl+Ф надо использовать проверку if (Key = vkA) and (ssCtrl in shift) и ни каких Key = Ord('Ф') потому, что неизвестно какая на этом месте будет буква на каком-нибудь Mac из Японии. И более того Key = Ord('Ф') = $D4 - это зарезервированный код клавиши Key = Ord('ф') = $F4 - это VK_OEM_ENLW (Only used by Nokia) Key = Ord('a') = $61 - это vkNumpad1 (1 key numeric keypad) Но проще было бы создать действие (см. TActionList и TAction), назначить на него ShortCut выбрав одно из рекомендованных значений.
    2 likes
  36. в том, что на билдере выполнение процедуры останавливается в ShowMessage код void __fastcall TForm1::Button1Click(TObject *Sender) { Label1->Text = L"До"; ShowMessage(L"Привет"); Label1->Text = L"После"; }
    2 likes
  37. информация для размышления asdf<пробел>fgt<F1><F2><F3>
    2 likes
  38. 2 likes
  39. На сколько я понимаю это не совсем вопрос по делфи... но держи http://ru.stackoverflow.com/questions/284297/Вывести-из-базы-mysql-в-виде-json-массива
    2 likes
  40. 2 likes
  41. Заведите TImageList (лучше на отдельном TDataModule), добавьте туда картинки в разных масштабах. На форму положите компонент TGlyph и установите свойства Images и ImageIndex. Glyph будет выбирать наиболее подходящую картинку с учетом и масштаба и размеров.
    2 likes
  42. лучше сформулировать мягче если есть возможность не использовать глобальные переменные, нужно ей пользоваться это опыт шишек, набитый десятками проектов )) иногда стоит просто поверить. хотя, конечно, можно и объяснить. но лень ))
    2 likes
  43. Бекапы делаются ежедневно. То есть не должно волновать, что он может просто взять и случайно потеряться. Из бекапа форум можно спокойно поднять. Для пользователей форума, копирования конечно нету
    2 likes
  44. 2 likes
  45. 2 likes
  46. попробовать изменить так aItem.StylesData['Edit.OnKeyDown'] := TValue.From<TKeyEvent>(EditKeyDown(Self,key,KeyChar,Shift))
    2 likes
  47. можно сделать на TListView в режиме колонок и использовать FontAwesome получится примерно такое
    2 likes
  48. да, этот деплой кнопочка Run и Run without debug сначала вызывают компиляцию, затем деплой
    2 likes
  49. 2 likes
  50. когда нужен срочный ответ, пишите в телеграм-чат Fire-Monkey имени Равиля ZuBy frame.7z
    2 likes
This leaderboard is set to Москва/GMT+03:00