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?
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.
dokładnie - problem jest w tym, że na androidzie nie ma okien modalnych
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
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.
Macie może jakiś kurs albo strony z pomocą do laz4android w języku polskim.
abrakadaber napisał(a):
dokładnie - problem jest w tym, że na androidzie nie ma okien modalnych
Bzdura. Na Androidzie są okna modalne.
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 ?
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');
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).
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