Перейти к содержанию
Fire Monkey от А до Я

enatechno

Пользователи
  • Постов

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

  • Посещение

  • Победитель дней

    26

Активность репутации

  1. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в Проверка статуса GPS в настройках (вкл или выкл)   
    procedure OpenGPSSettings; // uses Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers, Androidapi.JNI.Provider; {$IFDEF ANDROID} var Intent: JIntent; {$ENDIF} begin {$IFDEF ANDROID} Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_LOCATION_SOURCE_SETTINGS); TAndroidHelper.Activity.startActivity(Intent); {$ENDIF} end;  
  2. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в Проверка статуса GPS в настройках (вкл или выкл)   
    использовать IsGPSActive
  3. Like
    enatechno отреагировална dnekrasov в Ошибка "Bitmap size too big"   
    Попробуйте TBitmapSurface.StretchFrom
  4. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в RAD 11 на подходе?   
    1) Кастомный стиль в виде плитки *
    2) ListView с горизонтальной прокруткой, профиксил баги, которые появились из-за этого *
    3) Отступ сверху от первого Itema, задается вручную. (нужно было сделать, чтобы решить без многочисленных костылей одну ситуацию)
    4) Кастомные цвета для отдельных Item'ов
    5) разные хелперы и внутренние настройки
    * можно посмотреть тут
    скрин выполненной работы

  5. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в Custom Font   
    Шаблон проекта с кастомным шрифтом FontAwesome
    Намного удобней и менее затратно использовать Шрифт с Иконками, чем заботиться о качестве картинок, скейлах, их хранении и загрузке
    Поэтому давно перешел на шрифты, пару скриншотов (без использования картинок)

    Seattle CustomFont.7z
    Berlin CustomFont(Berlin).zip
     
    WINDOWS/MACOS - установить шрифт в систему
    IOS - в деплой добавить шрифт и с помощью IOS9Fix прописать в .plist следующее:
    ANDROID - в деплой добавить шрифт (Remote Path -> assets\internal) и подключить к проекту измененные файлы FMX.FontGlyphs.Android.pas, FMX.FontGlyphs.pas
  6. Like
    enatechno отреагировална RoschinSpb в [TListView] Как загрузить картинку в итем TListView из TImageList?   
    Если у вас не самоцель загружать именно исходные картинки, то можно присваивать просто номер изображения.
    // настройка ListView если хотите в Run-Time ListView2.Images := ImageList1; // Указываем коллекцию изображений  // которая будет использоваться. ListView2.ItemAppearanceName := TAppearanceNames.ImageListItem; ListView2.ItemAppearanceObjects.ItemObjects.Image.Visible := True; ... Item := ListView2.Items.Add; // Добавляем новый пункт если надо if (Item.Objects.ImageObject <> nil) then begin   Item.Objects.ImageObject.ImageIndex := Item.Index; // Присваиваем номер изображения // из коллекции изображений   Item.Text := Format('Item with ImageIndex = %d', [Item.Objects.ImageObject.ImageIndex]); end; А вот тут пример загрузки из файла в ImageList
  7. Like
    enatechno отреагировална zairkz в С помощью каких компонентов проще всего реализовать онлайн чат?   
    Можно помучаться с TListView, но я остановился на TPresentedScrollBox и стилизованных Label'ах (облачки сообщений, под разные scale на png 9patch), скорость скролла хорошая, плюс есть боунсы и тд.
    Приложил исходники проекта, также в архиве отдельно chat.style
    procedure TForm2.ChatUp(UsID: integer; LastId: integer; CText: string); var   Labb: TLabel;   Marg: Single;   LT: TLayout; begin   LT := TLayout.Create(PR);   LT.Parent := PR.Content;   LT.Margins.Top := 2;   LT.Align := TAlignLayout.Top;   LT.Position.Y := PR.ContentBounds.Height + 50;   Marg := PR.Width * 0.20;   Labb := TLabel.Create(PR);   Labb.Parent := PR;   Labb.Align := TAlignLayout.Top;   Labb.AutoSize := True;   Labb.WordWrap := True;   Labb.TextSettings.WordWrap := True;   if UsID = 0 then   begin     Labb.Margins.Left := Marg;     Labb.Margins.Right := 4;     Labb.TextAlign := TTextAlign.Trailing;     Labb.StyleLookup := 'labelchat_green';   end   else   begin     Labb.Margins.Right := Marg;     Labb.Margins.Left := 4;     Labb.TextAlign := TTextAlign.Leading;     Labb.StyleLookup := 'labelchat_white';   end;   Labb.NeedStyleLookup;   Labb.Text := ' ' + CText + ' ';   LT.Height := Labb.Height + 4;   Labb.Parent := LT;   if UsID = 0 then     Labb.Align := TAlignLayout.Right   else     Labb.Align := TAlignLayout.Left; end; Первые признаки шизофрении:

    Chat.zip
  8. Like
    enatechno получил реакцию от zairkz в stringGrid + цвет ячейки   
    http://fire-monkey.ru/topic/887-tstringgrid-kak-podsvetit-zadnii-fon-iacheiki-v-zavisimos/
    http://fire-monkey.ru/topic/287-izmenenie-svoistva-shrifta-odnoi-iacheiki-v-firemonkey-tstringgrid-delphi-xe6/
     
  9. Like
    enatechno получил реакцию от Rusland в stringGrid + цвет ячейки   
    http://fire-monkey.ru/topic/887-tstringgrid-kak-podsvetit-zadnii-fon-iacheiki-v-zavisimos/
    http://fire-monkey.ru/topic/287-izmenenie-svoistva-shrifta-odnoi-iacheiki-v-firemonkey-tstringgrid-delphi-xe6/
     
  10. Like
    enatechno отреагировална Rusland в [TPath] Как составлять TPathData?   
    sviat, Нарисуйте сначала что-нибудь карандашиком, затем сохраните... ищите в файле "<path  ...  d=" - вот все что в d, то и вставляйте в PathData
  11. Like
    enatechno отреагировална Rusland в [TPath] Как составлять TPathData?   
    Вот, например, взял данные из svg и простым Ctrl-C/Ctrl-V скопировал в PathData
    M121.720001220703,37.5099983215332 C134.070007324219,37.4599990844727 146.419998168945,37.3300018310547 158.770004272461,37.25 C149.610000610352,52.1599998474121 140.360000610352,67.0100021362305 131.229995727539,81.9400024414063 C123.230003356934,81.5400009155273 115.169998168945,82.4599990844727 107.540000915527,84.9100036621094 C112.309997558594,69.120002746582 116.959999084473,53.2999992370605 121.720001220703,37.5099983215332 Z M134.979995727539,82.3499984741211 C145.630004882813,67.3099975585938 156.210006713867,52.2099990844727 166.850006103516,37.1599998474121 C179.839996337891,41.4199981689453 192.839996337891,45.6500015258789 205.820007324219,49.9300003051758 C189.960006713867,63.2700004577637 173.820007324219,76.3000030517578 158.110000610352,89.8099975585938 C150.740005493164,86.379997253418 143.130004882813,83.25 134.979995727539,82.3499984741211 Z M81.5100021362305,55.5699996948242 C91.6999969482422,51.4799995422363 101.910003662109,47.4500007629395 112.110000610352,43.4099998474121 C109.519996643066,57.5999984741211 106.819999694824,71.7799987792969 104.290000915527,85.9800033569336 C97.2699966430664,88.9700012207031 90.629997253418,92.8899993896484 84.9700012207031,98.0299987792969 C83.8000030517578,83.879997253418 82.6800003051758,69.7300033569336 81.5100021362305,55.5699996948242 Z M53.9900016784668,84.0400009155273 C61.1300010681152,77.1500015258789 68.1999969482422,70.1900024414063 75.4499969482422,63.4099998474121 C77.9700012207031,75.5500030517578 80.5100021362305,87.6900024414063 83.0699996948242,99.8199996948242 C78.0299987792969,104.819999694824 73.870002746582,110.660003662109 70.6800003051758,116.98999786377 C65.1699981689453,105.980003356934 59.5499992370605,95.0199966430664 53.9900016784668,84.0400009155273 Z M88.0699996948242,106.139999389648 C98.8600006103516,95.0599975585938 114.519996643066,88.9599990844727 129.970001220703,89.9100036621094 C142.520004272461,90.5100021362305 154.679992675781,95.7799987792969 163.949996948242,104.230003356934 C144.149993896484,117.919998168945 124.339996337891,131.580001831055 104.540000915527,145.25 C106.300003051758,150.710006713867 108.129997253418,156.149993896484 109.970001220703,161.580001831055 C112.029998779297,161.130004882813 114.080001831055,160.679992675781 116.129997253418,160.240005493164 C119.220001220703,166.880004882813 122.230003356934,173.559997558594 125.23999786377,180.240005493164 C124.690002441406,180.220001220703 123.580001831055,180.190002441406 123.029998779297,180.169998168945 C114.559997558594,179.059997558594 105.790000915527,178.589996337891 97.4400024414063,180.710006713867 C94.6699981689453,181.470001220703 91.9100036621094,182.570007324219 89.8600006103516,184.649993896484 C79.1800003051758,174.789993286133 72.6399993896484,160.559997558594 72.3399963378906,146 C71.8600006103516,131.300003051758 77.6999969482422,116.559997558594 88.0699996948242,106.139999389648 M90.0899963378906,109.059997558594 C80.9400024414063,117.790000915527 75.2900009155273,130.229995727539 75.4300003051758,142.949996948242 C75.6100006103516,155.449996948242 80.2099990844727,167.699996948242 87.4899978637695,177.779998779297 C90.379997253418,176.729995727539 93.2799987792969,175.729995727539 96.1800003051758,174.75 C89.5999984741211,166.050003051758 84.5599975585938,155.919998168945 83.0899963378906,145.009994506836 C81.7799987792969,135.270004272461 83.9899978637695,124.889999389648 90.0899963378906,117.059997558594 C98.0400009155273,106.639999389648 109.720001220703,100.110000610352 121.220001220703,94.3399963378906 C119.5,93.9300003051758 117.709999084473,93.1900024414063 115.98999786377,94.0400009155273 C106.400001525879,97.0299987792969 97.3399963378906,102.059997558594 90.0899963378906,109.059997558594 Z M43.5299987792969,117.25 C46.560001373291,110.150001525879 49.5999984741211,103.040000915527 52.6199989318848,95.9400024414063 C58.1800003051758,103.970001220703 63.7999992370605,111.940002441406 69.3000030517578,120.01000213623 C67.2799987792969,124.940002441406 65.8300018310547,130.089996337891 65.0100021362305,135.360000610352 C57.8300018310547,129.350006103516 50.6699981689453,123.309997558594 43.5299987792969,117.25 Z M114.01000213623,148.389999389648 C133.880004882813,134.740005493164 153.690002441406,121.01000213623 173.529998779297,107.309997558594 C175.619995117188,117.459999084473 177.649993896484,127.620002746582 179.630004882813,137.789993286133 C158.139999389648,142.559997558594 136.690002441406,147.470001220703 115.209999084473,152.220001220703 C114.800003051758,150.940002441406 114.400001525879,149.669998168945 114.01000213623,148.389999389648 Z M43.1500015258789,144.440002441406 C43.6300010681152,137.460006713867 44.2099990844727,130.479995727539 44.7900009155273,123.51000213623 C51.4000015258789,128.479995727539 58.1199989318848,133.309997558594 64.6500015258789,138.389999389648 C64.2300033569336,143.270004272461 64.3000030517578,148.190002441406 64.9400024414063,153.050003051758 C57.689998626709,150.160003662109 50.4300003051758,147.270004272461 43.1500015258789,144.440002441406 Z M45.2599983215332,150.039993286133 C51.9599990844727,151.910003662109 58.7000007629395,153.619995117188 65.3499984741211,155.649993896484 C66.129997253418,159.850006103516 67.3199996948242,163.979995727539 68.879997253418,167.960006713867 C62.7799987792969,167.929992675781 56.6800003051758,167.899993896484 50.5699996948242,167.830001831055 C48.8499984741211,161.880004882813 47.0200004577637,155.970001220703 45.2599983215332,150.039993286133 Z M125.440002441406,161.210006713867 C130.029998779297,164.050003051758 133.050003051758,168.699996948242 137.470001220703,171.75 C144.039993286133,176.639999389648 151.330001831055,181.190002441406 155.600006103516,188.410003662109 C159.410003662109,194.860000610352 162.350006103516,201.800003051758 164.889999389648,208.839996337891 C161.880004882813,213.759994506836 157.380004882813,217.600006103516 151.960006713867,219.610000610352 C143.119995117188,200.149993896484 134.199996948242,180.710006713867 125.440002441406,161.210006713867 Z M52.9900016784668,171.949996948242 C58.5499992370605,171.229995727539 64.129997253418,170.589996337891 69.7099990844727,169.910003662109 C71.129997253418,173.600006103516 73.7600021362305,176.699996948242 75.0599975585938,180.429992675781 C71.1699981689453,181.880004882813 67.370002746582,183.539993286133 63.4900016784668,185 C60.0299987792969,180.619995117188 56.439998626709,176.339996337891 52.9900016784668,171.949996948242 Z
    214993062.zip
  12. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в Как правильно зачистить ListBox   
    while TListBox Items.Count > 0 do TListBox Items.Delete(0);
  13. Like
    enatechno отреагировална Rusland в как получить адрес по карте   
    Вы уже достаточно много знаете... осталось только собрать информацию воедино.
    Под настоящей инфой подразумевается Адрес, который определяется по клику на карте?
    Значит вам понадобится MapView (понадобится прописать ApiKey в VersionInfo). 
    Алгоритм такой - обрабатываете OnMapClick чтобы получить координату для маркера, через Geocoder получаете адрес, с помощью процедуры AddMarker добавляете маркер на карту, указав в качестве Title.
    Советую скачать компонент TMapsEngine, с ним очень удобно работать, когда дело касается MapView.
  14. Like
    enatechno отреагировална zairkz в [Android]Каталог, вывод в 2-3 колонки   
    На ListView будет достаточно сложно это реализовать.
    Попробуйте TPresentedScrollBox и элементы стиля.
    Стиль нужен: к примеру:
    Вам необходимо фиксированные размеры панелек, например глобальные переменные
      ObjectHeight := 205;
      ObjectWidth := 160;
      PanHeight := 200;
      PanWidth := 148;
    Затем вычислить количество колонок на FormResize, тоже глобальные пр.
     
    procedure TForm_main.FormResize(Sender: TObject);
    begin
      PrColumns := Floor(Form_main.ClientWidth / ObjectWidth);
      AllMargins := (Form_main.ClientWidth - (PrColumns * PanWidth)) / (PrColumns + 1);
    end;
     
    Процедура заполнения, здесь только создания панелей в скроллбоксе, я использовал обычный button в виде панельки
    procedure TForm_main.LoadObject();
    var
      x, i: integer;
      LT: TLayout;
      Butt: TButton;
    begin
      x := 0;
      for i := 0 to OBJ.Count - 1 do
      begin
          if x mod PrColumns = 0 then
          begin
            LT := TLayout.Create(PresentScrolBox);
            LT.Parent := PresentScrolBox;
            LT.Position.y := PresentScrolBox.ContentBounds.Height + 100;
            LT.Align := TAlignLayout.Top;
            LT.Height := ObjectHeight;
            LT.HitTest := false;
          end;
     
          Butt:= TButton.Create(LT);
          Butt.Parent := LT;
          Butt.Position.x := LT.Width;
          Butt.Height := PanHeight;
          Butt.Width := PanWidth;
          Butt.Align := TAlignLayout.Left;
          Butt.Margins.Top := (ObjectHeight - PanHeight) / 2;
          Butt.Margins.Bottom := (ObjectHeight - PanHeight) / 2;
          Butt.Margins.Left := AllMargins;
          Butt.StyleLookup := 'buttonx';
          Butt.text := '';
          Butt.tag := 55; //Пример
          Butt.TextSettings.WordWrap := True;
          Butt.OnTap := Form_main.ButObjTap;
    {$IFDEF MSWINDOWS}
          Butt.OnClick := Form_main.ButtObjectClick;
    {$ENDIF}
          Butt.OnApplyStyleLookup := Form_main.ObjectStyle;
          x := x + 1;
        end;
      end;
      LT := TLayout.Create(SB_Object);
      LT.Parent := SB_Object;
      LT.Position.y := SB_Object.ContentBounds.Height + 100;
      LT.Align := TAlignLayout.Top;
      LT.Height := 72;
    end;
     
    После создания заполнять данными необходимо в Butt.OnApplyStyleLookup := Form_main.ObjectStyle;
    procedure TForm_main.ObjectStyle(Sender: TObject);
    var
      i: integer;
    begin
      for i := 0 to 9 do
        if TButton(Sender).tag=i then
        begin
          TButton(TButton(Sender).FindStyleResource('btn_add')).tag := i;
          // TButton(TButton(Sender).FindStyleResource('btn_add')).text := ‘+’;
          TButton(TButton(Sender).FindStyleResource('btn_add')).OnClick := Form_main.But_Main_Add;
          TText(TButton(Sender).FindStyleResource('text')).text := 'i = '+inttostr(i);
          TText(TButton(Sender).FindStyleResource('obj_price')).text := ‘500’;
          TImage(TButton(Sender).FindStyleResource('img')).Bitmap.Assign(Какой нибудь битмап);
          break;
        end;
    end;
     
    Желательно данные и картинки загрузить сперва в Record, затем заполнять их в OnApplyStyleLookup.
    ХЗ может подойдет вариант, на слабых телефонах лагов не много, но и ListView на слабых подлагивает.
     
    Как вариант старое наше с Zuby приложение по доставке еды Gepard, не судите строго мы его забросили): https://play.google.com/store/apps/details?id=kz.vbaze.Gepard

     
     
     
  15. Like
    enatechno отреагировална zairkz в listBoxItem управление цветом   
    На ListView скролл значительно лучше и без лагов, и вообще очень мощный компонент, все равно, рано или поздно вы откажетесь от ListBOX.
    Кнопку можно разместить стандартным способам в настройках самой ListView. Если же вам нужно сто кнопок в одном Итеме, тогда да придется чуток заморочиться. 
     
    Во первых надо в настройках ListView в ItemAppearance включить ImageListItemBottomDetailRightButton.
    Далее в ItemAppearanceObjects -> ItemObjects можете указывать любые настройки, через PlaseOffset.X - Y перемещать текст и детайл текст как хотите и куда хотите, тоже самое с картинкой и кнопкой, менять цвета и шрифты.
    Можете повесить обработчик в свойствах на OnItemClick, а также нажатие на саму кнопку OnButtonClick.
    При заполнении Item'ам присваивайте Tag и по ним ориентируйтесь. 
    Далее для покраски Item'ов подключите Хелпер Zuby(все таки не хелпер, а измененный исходник TListView) FMX.ListView.zip, пропишите пару процедур:
     
    procedure myDefaultItemColor(const aLV: TListView; const aItemIndex: integer; const aUseCustomColor: Boolean = false);
    begin   with aLV.Items[aItemIndex] do   begin     Data['aUseCustomColor'] := aUseCustomColor;   end; end;   /// <summary> устанавливаем кастомный цвет для Item'a </summary> procedure myCustomItemColor(const aLV: TListView; const aItemIndex: integer; const aCustomColor: TAlphaColor;   const aUseCustomColor: Boolean = true); begin   with aLV.Items[aItemIndex] do   begin     Data['aUseCustomColor'] := aUseCustomColor;     Data['aCustomColor'] := aCustomColor;   end; end;   Далее к примеру заполняем ListView  ListViewPoisk.BeginUpdate;   for i := 0 to 15 do   begin     ListViewPoisk.Items.Insert(0);     ListViewPoisk.Items[0].Tag := i;     ListViewPoisk.Items[0].Text := 'X_text';     ListViewPoisk.Items[0].Detail := 'X_detail';     ListViewPoisk.Items[0].ButtonText := 'X_buttext';     ListViewPoisk.Items[0].Data['offer'] := 0; //Если нужно хранить не отображаемые данные.     ListViewPoisk.Items[0].Bitmap.Assign(Image1.Bitmap);     if i mod 2 = 0 then        myCustomItemColor(ListViewPoisk, ListViewPoisk.Items[0].Index, TAlphaColors.Lime);     // TAlphaColors.Lime можно заменить TAlphaColorF.Create(70 / 255, 130 / 255, 180 / 255, 155 / 255).ToAlphaColor;   end;   ListViewPoisk.EndUpdate;
  16. Like
    enatechno отреагировална dante333 в Путь к файлам другой Android апликации   
    Как бы посмотреть куда оно пишет... Я почти на 100% уверен что в  /data/data/<package name>/ http://delphifmandroid.blogspot.ru/2014/02/deployment-manager.html
    Если пишется кодом что вы привели,то да,вы правы.Однако если это приложение ваше,то можно изменить место записи опять же исходя из таблицы по ссылке.
    P.S. пока писал,ZuBy опередил.
  17. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в Путь к файлам другой Android апликации   
    да, чтобы в android/data писать нужно через TPath.GetSharedDocumentsPath
  18. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в PushEvents без Provider   
    для основы статья хорошая, но она требует доработки в плане добавления заголовка для обоих платформ.
    если в android'е это делается дописыванием строчки
    $message = new \push\CodeMonkeysRu\GCM\Message($tokens, array("title" => $title, "message" => $text)); то в классе для IOS нужно пару строк добавить в ApnsPHP/Message.php
    переменка новая в классе class ApnsPHP_Message
    // ZuBy === protected $_sTitle; // === ZuBy и два метода
    // ZuBy === public function setTitle($sText) { $this->_sTitle = $sText; } public function getTitle() { return $this->_sTitle; } // === ZuBy и в мотоде protected function _getPayload() нужно добавить проверку есть ли у нас Title
    было примерно так (не помню уже)
    $aPayload[self::APPLE_RESERVED_NAMESPACE]['alert'] = (string)$this->_sText; заменить на такую конструкцию
    // ZuBy === if (isset($this->_sTitle) and isset($this->_sText)){ if (!empty($this->_sTitle)){ $aPayload[self::APPLE_RESERVED_NAMESPACE]['alert']['title'] = (string)$this->_sTitle; $aPayload[self::APPLE_RESERVED_NAMESPACE]['alert']['body'] = (string)$this->_sText; } else { if (isset($this->_sText)) { $aPayload[self::APPLE_RESERVED_NAMESPACE]['alert'] = (string)$this->_sText; } } } // === ZuBy в методе public function getPayload() нужно заменить следующее
    $sJSONPayload = str_replace( '"'.self::APPLE_RESERVED_NAMESPACE.'":[]', '"'.self::APPLE_RESERVED_NAMESPACE.'":{}', $sJSON); на вот такое
    // ZuBy === $sJSONPayload = str_replace( ['"'.self::APPLE_RESERVED_NAMESPACE.'":[]', '"alert":[]'], ['"'.self::APPLE_RESERVED_NAMESPACE.'":{}', '"alert":{}'], $sJSON); // === ZuBy и теперь мы можем вызвать наш новый метод
    # Устанавливаем параметры отправки сообщения $message->setSound(); $message->setTitle($title); // ZuBy $message->setBadge(0); $message->setText($text); если не ошибаюсь заголовок появился начиная в IOS 8.2
  19. Like
    enatechno получил реакцию от HyperZen в [DX10] Drag-and-Drop Пример   
    https://www.youtube.com/watch?v=ta_N6DSi0Xg
    с 22 минуты
  20. Like
    enatechno получил реакцию от Равиль Зарипов (ZuBy) в Серьезно о FireMonkey на Android и iOS   
    имхо: FMX - удачный инструмент. мы под даже под официанта все заточили. а клиенты бывают разные... 
  21. Like
    enatechno получил реакцию от Равиль Зарипов (ZuBy) в Серьезно о FireMonkey на Android и iOS   
    Поддерживаю Zuby.
    Чем проще, тем стабильнее. Три параметра - номер стола и время, проверка занятости.
    P.S. устанавливал себе виджет "аналоговые часы", казалось бы.... Из 5-10 (со скачиванием 1кк) не один не показывал правильное время после "просыпания" Андроида. Остановился на виджете одного японца, скачиваний меньше 100к.  Кунг-фу решает. 
  22. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в Серьезно о FireMonkey на Android и iOS   
    если выбрать правильные инструменты, то возможно.
    FMX + сервак + PHP (или любой серверный язык) всю работу с БД и с картами (такие как запросы геокодинга и прочие ssl запросы на другие сайты) на PHP, а клиент-приложение только в виде отображения контента.
    и можно делать не только одноформенные приложения, а сложные
  23. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в Простая защита программы   
    procedure GetWMIInfo(mem: TMemo); // uses Winapi.ActiveX, System.Win.ComObj; const wbemFlagForwardOnly = $00000020; var FSWbemLocator: OLEVariant; FWMIService: OLEVariant; FWbemObjectSet: OLEVariant; FWbemObject: OLEVariant; oEnum: IEnumvariant; iValue: LongWord; begin FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', ''); FWbemObjectSet := FWMIService.ExecQuery('Select * from Win32_MotherboardDevice', 'WQL', wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant; while oEnum.Next(1, FWbemObject, iValue) = 0 do begin if not VarIsNull(FWbemObject.DeviceID) then mem.Lines.Add(VarToStr(FWbemObject.DeviceID)); if not VarIsNull(FWbemObject.PrimaryBusType) then mem.Lines.Add(VarToStr(FWbemObject.PrimaryBusType)); if not VarIsNull(FWbemObject.SecondaryBusType) then mem.Lines.Add(VarToStr(FWbemObject.SecondaryBusType)); FWbemObject := Unassigned; end; end; что вы там собрались брать?
     
    Результат:
     
    я могу вам предложить вот такой вариант
    замените этими строками код выше, вы получите все устройства доступные на ПК
    FWbemObjectSet := FWMIService.ExecQuery('Select * from CIM_LogicalDevice', 'WQL', wbemFlagForwardOnly); .........   if not(VarIsNull(FWbemObject.Name) and VarIsNull(FWbemObject.DeviceID)) then     mem.Lines.Add(VarToStr(FWbemObject.Name) + ' - ' + VarToStr(FWbemObject.DeviceID)); или использовать защиту по MAC адресу
    FWbemObjectSet := FWMIService.ExecQuery ('SELECT Description,MACAddress,IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE', 'WQL', wbemFlagForwardOnly); .............. if not(VarIsNull(FWbemObject.MacAddress) and VarIsNull(FWbemObject.IpAddress)) then mem.Lines.Add(VarToStr(FWbemObject.MacAddress) + ' - ' + VarToStr(FWbemObject.IpAddress[0]));
  24. Like
    enatechno получил реакцию от Равиль Зарипов (ZuBy) в Странные глюки ProgressBar'ов в ListBox   
    тут еще:
    http://blogs.embarcadero.com/yaroslavbrovin/2012/10/11/listboxitem_styling/
    http://blogs.embarcadero.com/yaroslavbrovin/2012/10/15/listboxitem_styling_part2/
     
    тут о новом подходе (видео)
     
     
  25. Like
    enatechno получил реакцию от Brovin Yaroslav в Странные глюки ProgressBar'ов в ListBox   
    тут еще:
    http://blogs.embarcadero.com/yaroslavbrovin/2012/10/11/listboxitem_styling/
    http://blogs.embarcadero.com/yaroslavbrovin/2012/10/15/listboxitem_styling_part2/
     
    тут о новом подходе (видео)
     
     
×
×
  • Создать...