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

A. Sharif

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

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

  • Посещение

Сообщения, опубликованные A. Sharif

  1. Вроде нашел активити Вконтакте для авторизации, но так и не смог настроить Вк-приложение, чтобы получить доступ. Вечное '{"error":"invalid_client","error_description":"client_id is incorrect"}'. Прикрепил пример, просьба: кто-нибудь попробуйте настроить Вк-приложение и авторизоваться, и отпишитесь, если получится. У меня уже руки опустились)

    AppIntentAuth.rar

  2. Все работает, авторизация в один клик, спасибо!! Немного помучился с настройками фейсбук-приложения и генерацией Хэш-ключа. Помогла инструкция https://stackoverflow.com/questions/5306009/facebook-android-generate-key-hash?noredirect=1&lq=1.

    Для Вконтакте тоже, вроде как, есть описание в документации. Буду пробовать)

  3. Возможно ли с помощью intent получить от какого-либо из официальных приложений Вконтакте/Фейсбук/Инст/Google access-token (через кол-бэк метод)?

    Предусматривается ли данная возможность этими приложениями? Если кто делал - приведите, пожалуйста, пример получения результата. 

  4. Кажется, ответ нашел сам. ViewportPosition в данном случае устанавливается как надо только если использовать ListBox1.ViewportPosition := TPointF.Create(X,Y) после добавления всех итемов.

  5. Delphi 10.1. Кроссплатформ, задачка следующая: 

    Необходимо добавлять определенное количество итемов в начало списка TListBox. Причем ViewportPosition при этом меняться не должно (т.е. область скролла не должна смещаться, если ViewportPosition не корректировать - все смещается). Если реализовать данную процедуру при клике на кнопку - все работает.

    Если реализовать из события OnViewportPositionChange таким образом, чтобы при прокручивании списка почти к началу (когда ViewportPosition.Y станет < 100, например) добавлялись новые итемы - не работает, всегда VP сбрасывается в начало. Как это побороть? Пробовал различные варианты с сохранением значений старой VP, откладыванием на время добавление итемов через поток и пр. - не помогло.

    Ниже код программы, нужно просто создать новый проект, добавить TListBox и пару кнопок, сопоставить события. Сначала нажимаем button1, затем начинаем подкручивать список к началу, чтобы добавить новые итемы. По button2 также можно добавить новые итемы.

    procedure TForm1.AddItems(Anum: integer);
    var
      I: integer;
      h,dy : single;
    begin
        h := ListBox1.ContentBounds.Height;
        for I := 0 to Anum do begin
            ListBox1.Items.Insert(0,'итем № '+inttostr(ListBox1.Count));
        end;
        dy := ListBox1.ContentBounds.Height-h;
        ListBox1.ScrollBy(ListBox1.ViewportPosition.X,-dy);
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
         AddItems(50);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
         AddItems(100);
         ListBox1.ScrollToItem(ListBox1.ItemByIndex(99));
         ListBox1.OnViewportPositionChange := ListBox1ViewportPositionChange;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    var
        t : TThread;
    begin
         with ListBox1.AniCalculations do begin
             Animation := true;
             BoundsAnimation := true;
             TouchTracking := [ttVertical];
         end;
    end;
    
    procedure TForm1.ListBox1ViewportPositionChange(Sender: TObject;
      const OldViewportPosition, NewViewportPosition: TPointF;
      const ContentSizeChanged: Boolean);
    var
        thread: TThread;
    begin
         if NewViewportPosition.Y <= 100 then begin
             ListBox1.OnViewportPositionChange := nil;
             Button2Click(sender);
         end;
    end;

    P.S. В событии OnViewportPositionChange ВСЕГДА приходит ContentSizeChanged = true.

  6. 1. Создаем пустой документ Word. Пишем в него что-нибудь, например слово "ЗАГОЛОВОК".

    2. Извлекаем из архива файл "document.xml" (переименовать ".docx" в ".zip", извлечь, найти в папке "word" этот файл)

    3. Загружаем из рантайма этот файл в TStrings методом LoadFromFile, а затем перезаписываем его методом SaveToFile.

    4. Архивируем все обратно в ZIP, переименовываем расширение в "docx". Пробуем открыть в MSWord.

    Фрагмент моего кода:

         Strings := Tstringlist.create;
         try
             Strings.LoadFromFile(path_temp, TEncoding.UTF8);

         finally
             Strings.SaveToFile(path_temp,TEncoding.UTF8);
             Strings.Free;
         end;

    "document.xml" состоит, из 2-х строк. 

    Почему-то при записи в  "document.xml" не прописывается перенос строки. Из-за этого документ Word не открывается. Как это исправить? 

    П.С. Мне нужно, по сути, внести какие-либо изменения в этот файл (например, заменить текст) и перезаписать любым способом, так, чтобы сохранить формат файла. 

     

×
×
  • Создать...