IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Janusz Chmiel:26.3.2018 15:04

Milí vývojáři,
Rád bych Vám ukázal knihovnu, díky níž je možné programovat s využitím Llazarus, Free compileru skvělé palikace pro Android. Knihovna dovoluje vytvořit aplikace bez využití C nativního kompilátoru, jak k programům přistupuje Lamw balík. pro Lazarus.
Já co by nevidomý bez zbytků zraku na knihovně oceňuji to, že nemusím nezbytně nutně zadávat údaje v pixelech při tvorbě GUI aplikace.

Zdrojový kód je možné získat zde.

https://sourceforge.net/…e/HEAD/tree/

 
Odpovědět
26.3.2018 15:04
Avatar
Odpovídá na Janusz Chmiel
Janusz Chmiel:26.3.2018 15:47

Mám v souvislosti s touto knihovnou problém. Nemohu přijít na to, proč mi příkazy pro vytváření souboru a ukládání textu nefungují. Soubor se nevytváří. Upravil jsem projekt Lovecalc. Poslal bych rád celý projekt, ale naneštěstí nemohu vkládat .zip soubory. Takže kdyby mi někdo chtěl pomoci, stačí mít nainstalován Lazarus nejnovější verzi, a do rozzipovaného adresáře s knihovnou vložit obsah zdrojového textu z mého příspěvku přepsat ve složce \javavcl-code-1007\lpr\andro­id\lovecalc\src\ma­inform.pas
V Lazarusu je nutné otevřít lpr soubor. Pak stisknout CTRL+SHIFT+F9 a je zahájena kompilace projektu.
unit MainForm;

{$mode objfpc}
{$H+}

interface

uses _System, Classes, Controls, Dialogs, Forms, GenChars, LCLIntf, Menus, StdCtrls, SysUtils;

type

TFormMain = class(TForm)
strict private
LEditName1, LEditName2: TEdit;
LButtonCalc: TButton;
protected
procedure ButtonClick(A: TObject);
public
constructor Create(A: TComponent); override;
end;
var
FormMain: TFormMain;
f: TextFile;
implementation

constructor TFormMain.Create(A: TComponent);
begin
inherited;
Caption := Application.Title;
LEditName1 := TEdit.Create(Self);
LEditName1.Cli­entWidget.set­BackgroundColor($8800000­0);
LEditName1.Align := alTop;
LEditName1.Parent := Self;
LEditName2 := TEdit.Create(Self);
LEditName2.Cli­entWidget.set­BackgroundColor($8800000­0);
LEditName2.Align := alTop;
LEditName2.Parent := Self;

LButtonCalc := TButton.Create(Sel­f);
LButtonCalc.Caption := 'Uložit text';
LButtonCalc.Align := alTop;
LButtonCalc.Parent := Self;
LButtonCalc.OnClick := @ButtonClick;
(*
)
(

*)
end;

procedure TFormMain.But­tonClick(A: TObject);
begin
if A is TMenuItem then begin
TMenuItem(A).Chec­ked := not TMenuItem(A).Chec­ked;
end;
if A = LButtonCalc then begin
AssignFile(F,LE­ditName2.Text);
rewrite(F);
writeln(F,LEdit­Name1.Text);
CloseFile(F);
end;
end;
end.

 
Nahoru Odpovědět
26.3.2018 15:47
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Janusz Chmiel
Martin Dráb:26.3.2018 18:12

Já co by nevidomý bez zbytků zraku na knihovně oceňuji to, že nemusím nezbytně nutně zadávat údaje v pixelech při tvorbě GUI aplikace.

Toho lze dosáhnout ve velké míře i u normálních VCL aplikací přes položku Align.

problém se souborem

Jakou dostáváte běhovou chybu? Nevidím nikde vypnutou kontrolu I/O operací, takže by volání rewrite mělo skončit výjimkou. Případně po volání Rewrite mrkněte ha nodnotu proměnné IOResult. Nula znamená úspěch, ostatní hodnoty jsou chyby udávající, co je za problém.

Jinak doporučuju zkusit uvést jméno souboru absolutně. Tenhle problém tedy není problémem oné knihovny, protože dané procedury pro práci se soubory jsou součástí jádra Delphi/Lazaru/FPC.

Nahoru Odpovědět
26.3.2018 18:12
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Martin Dráb
Janusz Chmiel:26.3.2018 19:22

Mnohokrát děkuji za dobrou radu. Pokusím se pomocí /sdcart/soubor.txt zkusit zadat jméno souboru přímo.
Ano, máš pravdu, jsou to interní příkazy Free Pascal kompilátoru. Já dal odkaz na celý projekt s knihovnou proto, aby to bylo možné případně vyzkoušet. Moc se mi líbí, že autor dodal celou řadu jednotek, které dovolují i detekovat stisk jednotlivých kláves, jak dlouho byla určitá klávesa podržená a na jak dlouho. Oceňuji i to, že výsledné aplikace jsou plně přístupné s odečítačem obrazovky Talkback. Navíc díky překladu programu do Dex formátu a bez využívání C knihoven je šance, že programy poběží na různých verzích Androidu svižněji. Škoda, že autor nevytvořil dokumentaci k funkcím a procedurám. Budu si muset pomoci sám a projít si funkce a procedurky a otestovat je. Moc děkuji za radu a pomoc.

 
Nahoru Odpovědět
26.3.2018 19:22
Avatar
Janusz Chmiel:27.3.2018 19:58

Mám na Vás laskavé specialisty jednu novou prosbičku. Pomohla mi rada ohledně ukládání souborů a už program pracuje jak má. Rád bych přišel na to, zda-li je možné nějakým příkazem v Pascalu v souvislosti s touto knihovnou přiřadit určitému editačnímu políčku návěští. Naneštěstí, Caption vkládá do editačního pole text, který je nutné smazat. Já bych ale toužil po funkci, která by editační pole pojmenovala, přiřadila by mu návěští, které by však nefungovalo tak, že se text názvu před připraví jako text dovnitř příslušného editačního pole. Caption se chová korektně u jiných prvků GUI aplikací, jakými jsou přepínače, zaškrtávací tlačítka, tlačítka. Nebo mám smůlu a Android něco takového u editačních polí principiálně nedovoluje? Nevidící právě mají nejraději, když je každý prvek opatřen návěštím. Jsem si vědom, že se problém dá řešit i jinak, například použitím třídy Textview, jejíž hodnota bude obsahovat návěští prvku. Přiznám se, že mé znalosti nitra Androidu nejsou natolik profesionální, abych si troufl smysluplně zasahovat do .inc a .pas souborů, které jsou součástí knihovny JavaVcl, abych případně Caption vylepšil, je-li to vůbec možné.

 
Nahoru Odpovědět
27.3.2018 19:58
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Janusz Chmiel
Martin Dráb:27.3.2018 21:50

Co si přesně představujete pod pojmem návěští? Pokud potřebujete textové pole (edit), před kterým bude napsáno ono návěští (podobně jako třeba je za zaškrtávacím políčkem), tak něco takového textové pole (TEdit) obecně neumí. U textového pole se obvykle tato vlastnost (jeho obsah) ani nejmenuje Caption, ale Text.

V "novějších" Delphi pro tyto účely je k dispozici komponenta TLabelledEdit, která kombinuje schopnosti TLabel (Capton) s testovým polem (TEdit, Text). Nějak mi ale nikdy nepřirostla moc k srdci. Obvykle se prostě uchyluji k manuálnímu pozicování TLabel a TEdit tak, aby vypydaly, že patří k sobě.

Je pravda, že pak musím pozicovat přímo na pixely, aby vše nějak vypadalo, což nechcete. Dalo by se to obejít, ale vyžadovalo by to každou dvojici TLabel a TEdit umístit do jednoho kontenerového prvku (například TPanel, TGroupBox...), na což jsem dost líný :-).

Nahoru Odpovědět
27.3.2018 21:50
2 + 2 = 5 for extremely large values of 2
Avatar
Janusz Chmiel:29.3.2018 11:05

Vážený pane Drábe,
Prosím prosím, nevíte, jak používat procedury a funkce uvnitř .inc souborů, které jsou součástí této knihovny?
Ačkoli jsem příslušnou programovou jednotku uvedl v příkazu uses v mainform.pas, dostávám od kompilátoru chybové hlášení, že identifikátor neexistuje, když jí zkouším volat.
uses _System, Classes, Controls, Dialogs, Forms, GenChars, LCLIntf, Menus, StdCtrls, SysUtils, androidr22;

Třeba procedura
procedure play(); overload; virtual; // throws java.lang.Ille­galStateExcep­tion
když jí volám
play ('http://icecas­t8.play.cz/cro1-128.mp3');
Tak se to kompilátoru nezamlouvá.
Je mi smutno, že nedovedu pochopit, jak třeba začít přehrávat live stream. Ten Pascal mě tak přitahuje, ale pochopit volání těch procedurek a funkcí v programových jednotkách, to není jen tak.
Jednotka se nalézá v tomto souboru.
C:\javavcl-code-1007\javavcl-code-1007\fpc\units\jvm-android\rtl\an­droidr22.inc
Je mi i jasné, že do Androidmanifest.xml pro poslech Internetového rádia musím přidat oprávnění pro přístup k Internetu, to si doplním do manifestu. Pořád přemýšlím, které knížky by bylo dobré si prostudovat, abych programové jednotky pochopil a uměl funkce a procedury samostatně volat a zkoušet.
Moc děkuji za Vaši trpělivost. Jste jediný, kdo mi ochotně a účinně pomohl.

 
Nahoru Odpovědět
29.3.2018 11:05
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Janusz Chmiel
Martin Dráb:29.3.2018 14:06

Zkusím se na to podívat zítra či během víkendu. Stáhnu si tu knihovnu a prozkoumám ji (nevím, zda se mi podaří vyzkoušet na Androidu, neb mám s ním jen jedno zařízení, které jsem naposledy použil před lety). Nicméně, alespoň mrknu do zdrojáků té knihovny.

Co se týče .inc souborů, těch byste si neměl všímat. Do jednotek (.pas) se obvykle vkládají direktivou $I, například pro vložení souboru example.inc na určité místo se na tomto místě použije:

{$I example.inc}

Je to prostě pascalová obdoba Cčkového

#include "example.inc"

Počítám, že ty .inc sioubory jsou již vloženy do příslušných jednotek té knihovny, takže byste se o ně neměl starat (překladač je bude vidět tam, kde jsou vloženy).

Každopádně to zkusím prozkoumat (Lazarus občas používám, takže s tím není problém).

Nahoru Odpovědět
29.3.2018 14:06
2 + 2 = 5 for extremely large values of 2
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Janusz Chmiel
Martin Dráb:4.4.2018 23:17

jestli se dobře dívám na tu proceduru play, jedná se o toto:

procedure play(); overload; virtual; // throws java.lang.Ille­galStateExcep­tion
Jestli se dobře dívám, tak tato procedura je vlastně metodou třídy AMAudioTrack, což je důvod, proč překladač tvrdí, že neexistuje. Ale jelikož ta třída je dosti dlouhá, tak se nedivím, že vás to zmátlo.

Koukám, že ty třídy jsou vlastně jenom importy z Javy, a proto tam není žádná dokumentace. Dokumentaci lze nalézt pro jejich javové protějšky (obvykle za jménem třídy po slově class je napsán +- název toho protějšku). U této třídy to zjevně je android.media­.AudioTrack.

Takže pro zavolání té metody play bude potřeba vytvořit a inicializovat instanci třídy AMAudioTrack.

Nahoru Odpovědět
4.4.2018 23:17
2 + 2 = 5 for extremely large values of 2
Avatar
Janusz Chmiel:4.4.2018 23:31

Á, děkuji za podporu a za vysvětlení. Já za to nemohu, že mi ten Pascal tak přirostl k srdci.

 
Nahoru Odpovědět
4.4.2018 23:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.