Dziwne zjawisko w Lazarusie 4android

0

Mam zainstalowanego Lazarusa4android 1.4.4. SDK jdk FPC3 Lazarus się uruchamia kompiluje instaluje aplikację na wirtualnym Androidzie, tylko działa "od tyłu" mianowicie wstawiam na formę przycisk i pod nim wpisuje prosty kod np. Showmessage(' krok 1'); potem np kolejne Showmessage(' krok 2');
i po uruchomieniu aplikacji najpierw pokazuje się komunikat "krok 2"
Czy jakiś parametr w opcjach Lazarusa jest źle ustawiony?

1

Nie ma takiego parametru i nie ma innej możliwości, aby aplikacja działała od tyłu, niż zapisanie kodu na odwrót;

Ewentaulnie ShowMessage nie wyświetla okien modalnie, przez co najpierw pojawia się pierwsze, następnie od razu drugie (ponad pierwszym) co wygląda jak działanie na odwrót; Sprwadź jeszcze raz ten kod i przesuń to drugie okno modalne, w celu sprawdzenia, czy pod spodem jest to pierwsze; Jeśli tak to działa - widać zapomnieli tego zdefiniować (lub jest to celowe zachowanie);

Co i tak nie zmieniałoby faktu, iż aplikacja działa normalnie, choć niestandardowo.

0

dokładnie - problem jest w tym, że na androidzie nie ma okien modalnych

0

Wobec tego kod wykonywany jest po kolei procedura za procedurą funkcja za funkcją tylko komunikaty pojawiają się od tyłu. Same komunikaty wykonywać pisząc pierwszy na końcu ale jeśli mam jakiś warunek wewnątrz procedury który objawia sie komunikatem to kiedy się pojawi.
W jaki sposób sobie z tym radzicie

0

Wobec tego kod wykonywany jest po kolei procedura za procedurą funkcja za funkcją tylko komunikaty pojawiają się od tyłu.

Powtarzam - nic nie wykonuje się od tyłu, po prostu tak jak @abrakadaber potwierdził, ShowMessage w tym przypadku (na Androidzie) nie wyświetla okien modalnie, więc intrukcja ta nie blokuje dalszego wykonywania kodu jak np. Sleep; To nie jest to samo co na desktopach, więc musisz skorzystać z czegoś innego lub inaczej zapisać kod.

0

Macie może jakiś kurs albo strony z pomocą do laz4android w języku polskim.

0
abrakadaber napisał(a):

dokładnie - problem jest w tym, że na androidzie nie ma okien modalnych

Bzdura. Na Androidzie są okna modalne.

0

Prosiłbym o pomoc mam prosty program do wykonania pod Androida ( pod windowsem działa a po Androida już problemy z prostymi sprawami)
gdzie jest błąd

ForceDirectories('/mnt/sdcard/auta/auto1');

jest ok tworzy katalogii na karcie ale już zapisać do pliku jest problem program się wyłącza

memo1.Lines.SaveToFile('/mnt/sdcard/auta/auto1/'+edit1.text);

kolejną instrukcje potrzebuje pograć plik z internetu i zapisać go do na kartę , ewentualnie skasował dany plik jakieś propozycje ?

0

już problem rozwiązany błąd w edit.txt
ale kolejne pytanie co trzeba doinstalować aby pobieranie plików zadziałało pod androida pod win działa ok a pod laz4android błędy

hSession, hURL : HINTERNET; 

procedure TForm1.Download(const URL: String; FileName: String);
var
  Buffer : array[1..1024] of Byte; // bufor zawierający pobrany fragment pliku
  hSession, hURL : HINTERNET;
  dwRead : DWORD; // ilość odczytanych danych
  dwSize : DWORD;  // rozmiar pliku
  F : File;
  pBuf : Pointer;
  dwBufLen : DWORD;
  dwIndex : DWORD;
  TotalRead : Integer;
begin
{ otwieranie połączenia }
  hSession := InternetOpen('Fast Download',
                           INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  Application.ProcessMessages;
  lblProgress.Caption := 'Łączenie z serwerem...';
  btnDownload.Enabled := False;

  try
  { otwarcie podanego adresu URL }
    hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0);
    Application.ProcessMessages;
    lblProgress.Caption := 'Czekanie na odpowiedź...';

    dwBufLen := 1024;
    dwIndex := 0;
    GetMem(pBuf, dwBufLen);

    { pobranie informacji na temat wielkości pliku }
    HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH,
                              pBuf, dwBufLen, dwIndex);
    dwSize := StrToInt(StrPas(pBuf));
    label18.Caption:='Wielkość pobieranego pliku = '+StrPas(pBuf);

    ProgressBar.Max := (dwSize div 1024);

    FreeMem(pBuf, dwBufLen);

    try

      AssignFile(F, FileName);
      try
       TotalRead := 0; // inicjowanie zerem. Jeżeli tego nie zrobimy zmienna będzie zawierać przypadkową liczbę, co będzie powodem błędnego obliczania postępu.
        Rewrite(F, 1);
        repeat
          if stop then Break;

        { pobieranie kolejnych fragmentów pliku }
          InternetReadFile(hURL, @Buffer, SizeOf(Buffer), dwRead);
          BlockWrite(F, Buffer, dwRead); // zapisanie buforu w pliku
          TotalRead := TotalRead + dwRead;

          Application.ProcessMessages;
          { wyświetlenie postępu }
          lblProgress.Caption := 'Ściągam ' + IntToStr(TotalRead div 1024) + ' kB z ' + IntToStr(dwSize div 1024) + ' kB';
          ProgressBar.Position := TotalRead div 1024;
        until dwRead = 0;
      finally
        CloseFile(F);
      end;
    finally
      //internetsavefile('infosmms.exe');
      InternetCloseHandle(hSession);
    end;
  finally
    InternetCloseHandle(hURL);
    btnDownload.Enabled := False;
  end;
  lblProgress.Caption := 'Pobrano';
  //beep;
end;

wywołujemy

Download('http://..../film.avi', '/mnt/sdcard/filmy/film.avi');
1

To nie zadziała w androidzie bo używasz API Windowsa (dokładnie to WinINet). Pobieranie pliku w bardzo prosty sposób można zrobić w Indy (Indy działa na Androidzie przynajmniej wersja dla Delphi).

0

Niestety problem z instalacją Indy. Laz4android używam 1.4 bez Eclipsa w jaki sposób mogę porać plik z internetu proszę o pomoc ma może ktoś jakiś pomysł? oczywiście pod Androidem

1 użytkowników online, w tym zalogowanych: 0, gości: 1