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

antarey

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

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

  • Посещение

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

    2

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

  1. Есть возможность изменить шрифт для итемов  TComboBox, желательно в динамике, хотя и в дизайнере не помешало - до итемов добрался - но изменения TextSettings ничего не дают

     
  2. Вот

    SaveStateIni.h

    // ---------------------------------------------------------------------------
    
    
    #ifndef SaveStateIniH
    #define SaveStateIniH
    // ---------------------------------------------------------------------------
    
    
    #include <FMX.Forms.hpp>
    #include <System.Classes.hpp>
    #include <System.SysUtils.hpp>
    
    
    #include <System.IOUtils.hpp>
    #include <Xml.XMLIntf.hpp>
    #include <Xml.XMLDoc.hpp>
    
    
    #include <FMX.Calendar.hpp>
    #include <FMX.NumberBox.hpp>
    #include <FMX.SpinBox.hpp>
    #include <FMX.ComboEdit.hpp>
    #include <FMX.ComboTrackBar.hpp>
    
    
    #include <sysvari.h>
    
    
    // ---------------------------------------------------------------------------
    class TSavaStateIni {
    public:
    void SaveFormState(TForm *forma);
    void LoadFormState(TForm *forma);
    
    
    };
    
    
    #endif

    SaveStateIni.cpp

    // ---------------------------------------------------------------------------
    
    
    #include <fmx.h>
    #pragma hdrstop
    #include "SaveStateIni.h"
    // ---------------------------------------------------------------------------
    #pragma package(smart_init)
    const System::String SavePath = System::Ioutils::TPath::Combine
    (System::Ioutils::TPath::GetDocumentsPath(),
    System::Ioutils::TPath::GetFileNameWithoutExtension(ParamStr(0)) + ".xml");
    TFmxObject *FMXObj;
    
    
    void TSavaStateIni::SaveFormState(TForm *forma) {
    TXMLDocument *XMLDocument = new TXMLDocument(Application);
    XMLDocument->Active = true;
    XMLDocument->Encoding = "UTF-8";
    XMLDocument->Options = XMLDocument->Options << doNodeAutoIndent;
    _di_IXMLNode parentNode, formaNode;
    if (FileExists(SavePath)) {
    XMLDocument->LoadFromFile(SavePath);
    parentNode = XMLDocument->DocumentElement;
    }
    else {
    parentNode = XMLDocument->AddChild("xml");
    }
    
    
    if (XMLDocument->DocumentElement->ChildNodes->FindNode(forma->Name))
    formaNode = XMLDocument->DocumentElement->ChildNodes->FindNode
    (forma->Name);
    else
    formaNode = parentNode->AddChild(forma->Name);
    
    
    try {
    for (int i = 0; i < forma->ComponentCount; i++) {
    if (dynamic_cast<TFmxObject*>(forma->Components[i])) {
    FMXObj = dynamic_cast<TFmxObject*>(forma->Components[i]);
    _di_IXMLNode nodNew =
    formaNode->ChildNodes->FindNode(FMXObj->Name);
    if (!nodNew)
    nodNew = formaNode->AddChild(FMXObj->Name);
    
    
    if (dynamic_cast<TCheckBox*>(FMXObj))
    nodNew->SetAttribute("data",
    ((TCheckBox*)FMXObj)->IsChecked);
    if (dynamic_cast<TRadioButton*>(FMXObj))
    nodNew->SetAttribute("data",
    ((TRadioButton*)FMXObj)->IsChecked);
    if (dynamic_cast<TSwitch*>(FMXObj))
    nodNew->SetAttribute("data", ((TSwitch*)FMXObj)->IsChecked);
    if (dynamic_cast<TComboBox*>(FMXObj))
    nodNew->SetAttribute("data",
    ((TComboBox*)FMXObj)->ItemIndex);
    if (dynamic_cast<TMemo*>(FMXObj))
    nodNew->SetAttribute("data", ((TMemo*)FMXObj)->Lines->Text);
    if (dynamic_cast<TEdit*>(FMXObj))
    nodNew->SetAttribute("data", ((TEdit*)FMXObj)->Text);
    if (dynamic_cast<TCalendar*>(FMXObj))
    nodNew->SetAttribute("data", ((TCalendar*)FMXObj)->Date);
    if (dynamic_cast<TDateEdit*>(FMXObj))
    nodNew->SetAttribute("data", ((TDateEdit*)FMXObj)->Date);
    if (dynamic_cast<TTimeEdit*>(FMXObj))
    nodNew->SetAttribute("data", ((TTimeEdit*)FMXObj)->Time);
    if (dynamic_cast<TNumberBox*>(FMXObj))
    nodNew->SetAttribute("data", ((TNumberBox*)FMXObj)->Value);
    if (dynamic_cast<TSpinBox*>(FMXObj))
    nodNew->SetAttribute("data", ((TSpinBox*)FMXObj)->Value);
    if (dynamic_cast<TComboEdit*>(FMXObj)) {
    nodNew->SetAttribute("data", ((TComboEdit*)FMXObj)->Text);
    nodNew->SetAttribute("list",
    ((TComboEdit*)FMXObj)->Items->Text);
    }
    if (dynamic_cast<TComboTrackBar*>(FMXObj))
    nodNew->SetAttribute("data",
    ((TComboTrackBar*)FMXObj)->Value);
    if (dynamic_cast<TTrackBar*>(FMXObj))
    nodNew->SetAttribute("data", ((TTrackBar*)FMXObj)->Value);
    }
    }
    XMLDocument->SaveToFile(SavePath);
    }
    __finally {
    XMLDocument->Free();
    }
    }
    
    
    // ---------------------------------------------------------------------------
    void TSavaStateIni::LoadFormState(TForm *forma) {
    if (FileExists(SavePath)) {
    TXMLDocument *XMLDocument = new TXMLDocument(Application);
    try {
    XMLDocument->Active = true;
    XMLDocument->Encoding = "UTF-8";
    XMLDocument->Options = XMLDocument->Options << doNodeAutoIndent;
    XMLDocument->LoadFromFile(SavePath);
    _di_IXMLNode formaNode =
    XMLDocument->DocumentElement->ChildNodes->FindNode(forma->Name);
    
    
    if (formaNode) {
    for (int i = 0; i < forma->ComponentCount; i++) {
    if (dynamic_cast<TFmxObject*>(forma->Components[i])) {
    FMXObj =
    dynamic_cast<TFmxObject*>(forma->Components[i]);
    _di_IXMLNode nodNew =
    formaNode->ChildNodes->FindNode(FMXObj->Name);
    if (nodNew) {
    if (dynamic_cast<TCheckBox*>(FMXObj))
    ((TCheckBox*)FMXObj)->IsChecked =
    BOOL(nodNew->GetAttribute("data"));
    if (dynamic_cast<TRadioButton*>(FMXObj))
    ((TRadioButton*)FMXObj)->IsChecked =
    BOOL(nodNew->GetAttribute("data"));
    if (dynamic_cast<TSwitch*>(FMXObj))
    ((TSwitch*)FMXObj)->IsChecked =
    BOOL(nodNew->GetAttribute("data"));
    if (dynamic_cast<TComboBox*>(FMXObj))
    ((TComboBox*)FMXObj)->ItemIndex =
    nodNew->GetAttribute("data");
    if (dynamic_cast<TMemo*>(FMXObj))
    ((TMemo*)FMXObj)->Lines->Text =
    nodNew->GetAttribute("data");
    if (dynamic_cast<TEdit*>(FMXObj))
    ((TEdit*)FMXObj)->Text =
    nodNew->GetAttribute("data");
    if (dynamic_cast<TCalendar*>(FMXObj))
    ((TCalendar*)FMXObj)->Date =
    Date(nodNew->GetAttribute("data").AsType
    (0x0007));
    if (dynamic_cast<TDateEdit*>(FMXObj))
    ((TDateEdit*)FMXObj)->Date =
    nodNew->GetAttribute("data");
    if (dynamic_cast<TTimeEdit*>(FMXObj))
    ((TTimeEdit*)FMXObj)->Time =
    nodNew->GetAttribute("data");
    if (dynamic_cast<TNumberBox*>(FMXObj))
    ((TNumberBox*)FMXObj)->Value =
    nodNew->GetAttribute("data");
    if (dynamic_cast<TSpinBox*>(FMXObj))
    ((TSpinBox*)FMXObj)->Value =
    nodNew->GetAttribute("data");
    if (dynamic_cast<TComboEdit*>(FMXObj)) {
    ((TComboEdit*)FMXObj)->Text =
    nodNew->GetAttribute("data");
    ((TComboEdit*)FMXObj)->Items->Text =
    nodNew->GetAttribute("list");
    }
    if (dynamic_cast<TComboTrackBar*>(FMXObj))
    ((TComboTrackBar*)FMXObj)->Value =
    nodNew->GetAttribute("data");
    if (dynamic_cast<TTrackBar*>(FMXObj))
    ((TTrackBar*)FMXObj)->Value =
    nodNew->GetAttribute("data");
    }
    }
    }
    }
    }
    __finally {
    XMLDocument->Free();
    }
    }
    }
    // ---------------------------------------------------------------------------

    _frmMain.cpp

    // ---------------------------------------------------------------------------
    
    
    #include <fmx.h>
    #pragma hdrstop
    
    
    #include "_frmMain.h"
    #include "SaveStateIni.h"
    // ---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.fmx"
    TfrmMain *frmMain;
    // ---------------------------------------------------------------------------
    
    
    __fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) {
    }
    
    
    // ---------------------------------------------------------------------------
    void __fastcall TfrmMain::Button1Click(TObject *Sender) {
    TSavaStateIni *st;
    st->LoadFormState(frmMain);
    
    
    }
    
    
    // ---------------------------------------------------------------------------
    void __fastcall TfrmMain::Button2Click(TObject *Sender) {
    TSavaStateIni *st;
    st->SaveFormState(frmMain);
    }
    // ---------------------------------------------------------------------------
  3. Подскажите как в билдере для андроида правильно преобразовать OleVariant в bool?

    if(dynamic_cast<TCheckBox*>(FMXObj))       ((TCheckBox*)FMXObj)->IsChecked= bool(nodNew->GetAttribute("data"));

    на вин платформе все нормально, а на андроиде 

    [bccaarm Error] SaveStateIni.cpp(97): ambiguous conversion for functional-style cast from 'System::OleVariant' to 'bool'
     
  4. по предыдущему вопросу  - билдер так и пишет

    Народ, помогите победить  в C++ BuilderXE7
    вот что записано
    {"Edit1":"{\"data\":\"test\"}"}
     
    код для записи
    void __fastcall TfrmMain::FormSaveState(TObject *Sender)
    {
    const System::String DATA_FIELD = "data";
    SaveState->Name=System::Ioutils::TPath::GetFileNameWithoutExtension(ParamStr(0));
    SaveState->StoragePath = System::Ioutils::TPath::GetHomePath();
    TJSONObject   *FormJSONObject;
    TFmxObject    *FMXObj;
    TJSONObject   *FMXJObj;
    TBinaryWriter *W;
    
    
        SaveState->Stream->Clear();
        W = new TBinaryWriter(SaveState->Stream, TEncoding::UTF8, false);
        FormJSONObject = new TJSONObject();
    
    
                for (int i = 0; i < ComponentCount; i++)
                {
        if (dynamic_cast<TFmxObject*>(Components[i]))
        {
        FMXObj=dynamic_cast<TFmxObject*>(Components[i]);
        FMXJObj = new TJSONObject();
                    switch (FMXObj->Data.Kind)
                    {
                        case tkUnknown:      break;
                        case tkInteger: FMXJObj->AddPair(DATA_FIELD, new TJSONNumber(FMXObj->Data.AsInteger()));break;
                        case tkChar:         break;
                        case tkEnumeration:
                            if (FMXObj->Data.AsBoolean())FMXJObj->AddPair(DATA_FIELD, new TJSONTrue());
                            else                         FMXJObj->AddPair(DATA_FIELD, new TJSONFalse());break;
                        case tkFloat:   FMXJObj->AddPair(DATA_FIELD,FMXObj->Data.AsVariant());break;
                        case tkString:  FMXJObj->AddPair(DATA_FIELD, FMXObj->Data.AsString());break;
                        case tkUString: FMXJObj->AddPair( DATA_FIELD,FMXObj->Data.AsString());break;
                        case tkLString: FMXJObj->AddPair(DATA_FIELD, FMXObj->Data.AsString());break;
                        case tkWString: FMXJObj->AddPair(DATA_FIELD, FMXObj->Data.AsString());break;
                        case tkSet:         break;
                        case tkClass:       break;
                        case tkMethod:      break;
                        case tkWChar:       break;
                        case tkVariant:     break;
                        case tkArray:       break;
                        case tkRecord:      break;
                        case tkInterface:   break;
                        case tkInt64:       break;
                        case tkDynArray:    break;
                        case tkClassRef:    break;
                        case tkPointer:     break;
                        case tkProcedure:   break;
                    }
    FormJSONObject->AddPair(FMXObj->Name, FMXJObj->ToJSON());
        }
                }
    
    
            try
            {
            W->Write(FormJSONObject->ToJSON());
            }
            __finally {
            W->Free();
            FormJSONObject->Free();
            FMXJObj->Free();
            }
    }
    //---------------------------------------------------------------------------
    
     
    вот так пытаюсь читать
    void __fastcall TfrmMain::FormCreate(TObject *Sender)
    {
    
    
    SaveState->Name=System::Ioutils::TPath::GetFileNameWithoutExtension(ParamStr(0));
    SaveState->StoragePath = System::Ioutils::TPath::GetHomePath();
    
    
    TBinaryReader *R = new TBinaryReader(SaveState->Stream, TEncoding::UTF8, false);
    if (SaveState->Stream->Size >0)
    {
     TJSONObject *jObj = static_cast<TJSONObject*>(TJSONObject::ParseJSONValue(R->ReadString()));
         TJSONObject *jItem = static_cast<TJSONObject*>(jObj->Get("Edit1")->JsonValue);
         Edit1->Text = jItem->Get("data")->JsonValue->Value();
    
    
    }
    R->Free();
    
    
    }
    //---------------------------------------------------------------------------
    
     
    на  
    Edit1->Text = jItem->Get("data")->JsonValue->Value();
    выдает access violation
    уже перепробовал все возможные варианты чтения
         Edit1->Text = jItem->Values[0]->ToString();
         Edit1->Text = jItem->Values["data"]->ToString();
         Edit1->Text = jItem->Values["data"]->Value();
         Edit1->Text = jItem->GetValue("data")->Value();
    хотя
    Edit1->Text = jItem->Value();
    выдает {"data":"test"} - тоесть данные есть - но какого они не читаются
    Забодался уже, толи лижи не едут, толи я ..., толи ембарседеро что-то нафигачело в билдере
    Всем заранее спасибо
  5. Один нюанс-

    в делфи

    FormJSONObject.AddPair(FMXObj.Name, FMXJObj)

    в файле 

    ‘{"Edit1":{"data":"qwerty"},"Edit2":{"data":"adfsdaf"},"GroupBox1":{"data":"Your Preferred OS"},"RadioButton1":{"data":false},"RadioButton2":{"data":true},"RadioButton3":{"data":false},"RadioButton4":{"data":false},"Label1":{"data":"Firstname"},"Label2":{"data":"Lastname"}}

    В билдере

    FormJSONObject.AddPair(FMXObj.Name, FMXJObj)

    выдает ошибку неверный указатель

    если 

    FormJSONObject->AddPair(FMXObj->Name, FMXJObj->ToJSON());

    то записывается как

    Б{"Switch1":"{\"data\":\"Switch1\"}","Edit1":"{\"data\":\"ADS\"}","Memo1":"{\"data\":\"Switch1\\r\\nADS\\r\\nSwitch1\\r\\nADS\\r\\nComboBox1\\r\\n{\\\"Switch1\\\":\\\"{\\\\\\\"data\\\\\\\":\\\\\\\"Switch1\\\\\\\"}\\\",\\\"Edit1\\\":\\\"{\\\\\\\"data\\\\\\\":\\\\\\\"ADS\\\\\\\"}\\\",\\\"Memo1\\\":\\\"{\\\\\\\"data\\\\\\\":\\\\\\\"Switch1\\\\\\\\r\\\\\\\\nADS\\\\\\\"}\\\",\\\"CheckBox1\\\":\\\"{}\\\",\\\"RadioButton1\\\":\\\"{}\\\",\\\"RadioButton2\\\":\\\"{}\\\",\\\"ComboBox1\\\":\\\"{\\\\\\\"data\\\\\\\":\\\\\\\"ComboBox1\\\\\\\"}\\\",\\\"Button1\\\":\\\"{}\\\"}\\r\\nSwitch1\\r\\nADS\"}","CheckBox1":"{}","RadioButton1":"{}","RadioButton2":"{}","ComboBox1":"{\"data\":\"ComboBox1\"}","Button1":"{}"}

     

    тоесть добавляется "\"  - как правильно перевести с делфи на с++??

  6. Пытаюсь переделать под билдер Automate Save State Feature in Firemonkey

    Как говорят вроде все просто, но толи лижи не едут ну и т.д.

     делфи код

    unit SaveStateHelper;
    
    
    interface
    
    
    uses
      FMX.Forms;
    
    
    type
    
    
      TSaveStateHelper = class helper for TCustomForm
      public const
        DATA_FIELD = 'data';
        procedure SaveFormState;
        procedure LoadFormState;
      end;
    
    
    implementation
    
    
    uses System.JSON, FMX.Types, System.Classes, System.SysUtils;
    
    
    { TSaveStateHelper }
    
    
    procedure TSaveStateHelper.LoadFormState;
    var
      R: TBinaryReader;
      FormJSONObject: TJSONObject;
      I: Integer;
      FMXObj: TFmxObject;
      FMXJObj: TJSONObject;
    begin
      try
        if not(SaveState.Stream.Size > 0) then
          exit;
        // Recover previously typed values in all control.
        R := TBinaryReader.Create(SaveState.Stream);
        try
          FormJSONObject := TJSONObject.ParseJSONValue(R.ReadString) as TJSONObject;
          try
            for I := 0 to Self.ComponentCount - 1 do
            begin
              if not(Self.Components[I] is TFmxObject) then
                continue;
              FMXObj := Self.Components[I] as TFmxObject;
              FMXJObj := FormJSONObject.Values[FMXObj.Name] as TJSONObject;
              case FMXObj.Data.Kind of
                tkUnknown:
                  ;
                tkInteger:
                  FMXObj.Data :=
                    (FMXJObj.GetValue(DATA_FIELD) as TJSONNumber).AsInt;
                tkChar:
                  ;
                tkEnumeration:
                  if FMXJObj.GetValue(DATA_FIELD) is TJSONTrue then
                    FMXObj.Data := true
                  else
                    FMXObj.Data := false;
                tkFloat:
                  FMXObj.Data :=
                    (FMXJObj.GetValue(DATA_FIELD) as TJSONNumber).AsDouble;
                tkString, tkUString, tkLString, tkWString:
                  FMXObj.Data :=
                    (FMXJObj.GetValue(DATA_FIELD) as TJSONString).Value;
                tkSet:
                  ;
                tkClass:
                  ;
                tkMethod:
                  ;
                tkWChar:
                  ;
                tkVariant:
                  ;
                tkArray:
                  ;
                tkRecord:
                  ;
                tkInterface:
                  ;
                tkInt64:
                  FMXObj.Data :=
                    (FMXJObj.GetValue(DATA_FIELD) as TJSONNumber).AsInt64;
                tkDynArray:
                  ;
                tkClassRef:
                  ;
                tkPointer:
                  ;
                tkProcedure:
                  ;
              end;
            end;
          finally
            FormJSONObject.Free;
          end;
        finally
          R.Free;
        end;
      except
        on e: Exception do
          Log.d('SaveStateHelper', Self, e.Message);
      end;
    end;
    
    
    procedure TSaveStateHelper.SaveFormState;
    var
      FormJSONObject: TJSONObject;
      I: Integer;
      FMXObj: TFmxObject;
      FMXJObj: TJSONObject;
      W: TBinaryWriter;
    begin
      try
        FormJSONObject := TJSONObject.Create;
        try
          for I := 0 to Self.ComponentCount - 1 do
          begin
            if not(Self.Components[I] is TFmxObject) then
              continue;
            FMXObj := Self.Components[I] as TFmxObject;
            FMXJObj := TJSONObject.Create;
            case FMXObj.Data.Kind of
              tkUnknown:
                ;
              tkInteger:
                FMXJObj.AddPair(DATA_FIELD,
                  TJSONNumber.Create(FMXObj.Data.AsInteger));
              tkChar:
                ;
              tkEnumeration:
                if FMXObj.Data.AsBoolean then
                  FMXJObj.AddPair(DATA_FIELD, TJSONTrue.Create)
                else
                  FMXJObj.AddPair(DATA_FIELD, TJSONFalse.Create);
              tkFloat:
                FMXJObj.AddPair(DATA_FIELD,
                  TJSONNumber.Create(FMXObj.Data.AsExtended));
              tkString, tkUString, tkLString, tkWString:
                FMXJObj.AddPair(DATA_FIELD, FMXObj.Data.AsString);
              tkSet:
                ;
              tkClass:
                ;
              tkMethod:
                ;
              tkWChar:
                ;
              tkVariant:
                ;
              tkArray:
                ;
              tkRecord:
                ;
              tkInterface:
                ;
              tkInt64:
                FMXJObj.AddPair(DATA_FIELD,
                  TJSONNumber.Create(FMXObj.Data.AsInt64));
              tkDynArray:
                ;
              tkClassRef:
                ;
              tkPointer:
                ;
              tkProcedure:
                ;
            end;
            FormJSONObject.AddPair(FMXObj.Name, FMXJObj)
          end;
          SaveState.Stream.Clear;
          W := TBinaryWriter.Create(SaveState.Stream);
          try
            W.Write(FormJSONObject.ToJSON);
          finally
            W.Free;
          end;
        finally
          FormJSONObject.Free;
        end;
      except
        on e: Exception do
          Log.d('SaveStateHelper', Self, e.Message);
      end;
    end;
    
    
    end.
    

     

     

    Что наваял:

    SaveStateHelper.h

     
    #ifndef SaveStateHelperH
    #define SaveStateHelperH
    //---------------------------------------------------------------------------
    #include <FMX.Forms.hpp>
    #include <System.Classes.hpp>
    
    
    #include <System.SysUtils.hpp>
    #include <FMX.Types.hpp>
    #include <System.JSON.hpp>
    //---------------------------------------------------------------------------
    class  TSaveStateHelper : public TCustomForm
    {
    __published:
    private: // User declarations
    public: // User declarations
    void   SaveFormState();
    void   LoadFormState();
    void   Init();
    };
    #endif
    SaveStateHelper.cpp
    //---------------------------------------------------------------------------
    
    
    #pragma hdrstop
    
    
    #include "SaveStateHelper.h"
    #include <System.IOUtils.hpp>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    //---------------------------------------------------------------------------
    void  TSaveStateHelper::Init()
    {
    SaveState->Name=System::Ioutils::TPath::GetFileNameWithoutExtension(ParamStr(0));
    SaveState->StoragePath = System::Ioutils::TPath::GetHomePath();
    }
    //---------------------------------------------------------------------------
    void  TSaveStateHelper::LoadFormState()
    {
    
    
       TBinaryReader *R;
       TJSONObject   *FormJSONObject;
       TFmxObject    *FMXObj;
       TJSONObject   *FMXJObj;
    if (SaveState->Stream->Size >0) {
    
    
    }
    
    
    }
    //---------------------------------------------------------------------------

    и при вызове LoadFormState получаю access violation 

    Что не так

  7. Необходимо реализовать диалог выбора каталога компьютера с андроид устройства.

     

    Подскажите хоть в какую сторону копать, если в обратном порядке есть идеи Диалог выбора каталога с компьютера на андроиде

    то тут вообще темень. На маркете есть куча самба клиентов - но это реализовать на обезьяне???

  8. Необходимо реализовать диалог просмотра каталогов андроид устройства с виндовс  платформы.

    Что я смог придумать - это использовать Аднроид СДК.

    На устройстве, если подключение по WiFi, запускаем ADB Wireless.

    На десктопе используем adb.exe , можно вместе AdbWinApi.dll закинуть в каталог с программой.

    Дальше конектимся к андроиду, скидываем список каталогов в текстовый файл, ну и читаем.

     

    В принципе ничего сложного, но может у кого-то есть описание функций AdbWinApi.dll или есть другой способ?

     

    Если использовать adb.exe - какой компонент лучше использовать для построения списка каталогов/файлов с иконками, хотя бы примитивными,

    а в идеале как прочитать иконку файла, если такова имеется? 

  9. Я в самом начале написал, что если будет необходимость - разобью на две темы - не проблема :)

    За ресурс Ефимова я знаю, читаю.

    По гуглу пока толком ничего не нашел.

    Разобью на две темы, а дальше будем общаться - если у кого-то будет желание :)

  10. ИМНО проще на уровне столбцов, если на уровне таблиц - надо в динамике корректировать квери

    а на уровне столбцов - добавляем одну табличку с идентификатором языка а дальше все просто

    select
    case 
          when (select LangName from userLang where userLangID=1)='UA' then TypeNameUA                                              
          when (select LangName from userLang where userLangID=1)='RU' then TypeNameRU                          
    end as TypeName
    from  
    sprOperType

    Но за ответ спасибо

  11. Хм. Походу не в тот раздел ты отписался, надо было в консультации.

    В целом тут скорее всего надо решить доступности файлов по локальной сети для начала. 

    Порывшись в сети вижу что без стороннего приложения это не решаемо, хотя могу и ошибаться.

     

    Мне кажется что ваш путь лежит через AppTethering. И написании промежуточного ПО для синхронизации которые будет стоять на ПК.

    А пересылка осуществляться обычным методом, т.е. приложение на ПК спрашивает сколько вообще записей в базе у андроид приложения, а потом начинает выгребает по частям, точнее андроид приложение берет часть строк из базы и передает их текстом в приложение на десктоп.

     

    В теории, конечно, может быть AppTethering позволит вам и сразу базу перекинуть с андроид на комп и там  уже синхронизировать всё и быстро. 

    Но наверняка не знаю.

     

    Если найдешь то решение которые хочешь ты в чистом виде, то выложи пожалуйста потом сюда. Я думаю многим рано или поздно в их бизнес моделях пригодится эта информация.

    Ну в локальной сети папку то я розшарю  - не проблема

    А вот как достучаться к базе на мобильном приложении,там приколы с разрешениями да и надо как-то получить путь к базе

    Если что-то найду - выложу ну и к тебе аналогичная просьба

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