Gambas Linux projekt

Gambas je razvojno okruženje koje se distribuira pod GNU GPL licencomS ovim možemo reći da to nije samo programski jezik izveden iz osnovnog jezika, već je i vrlo koristan alat pri izgradnji vizualnih aplikacija za gotovo sve distribucije GNU / Linuxa.

U Gambasu programer ima mogućnost grafičkog oblikovanja prozora, povlačenjem objekata iz okvira s alatima i zatim pisanjem koda za svaki objekt.

Kao što smo vidjeli ranije, Gambas se temelji na osnovnom tumaču s proširenjima objekata, slično Visual Basicu. No prednost koju imamo s Gambasom je ta što možete brzo dizajnirati svoju grafičku aplikaciju s QT ili GTK +, pristupiti bazama podataka MySQL, PostgreSQL, Firebird, ODBC i SQLite, upravljati aplikacijama s DBUS -om, izgraditi prednje naredbe Linuxa, raditi 3D OpenGL aplikacije , izraditi CGI web aplikacije, između ostalog generirati instalacijske pakete za različite distribucije.

Iz tog razloga možemo tada reći da u Gambasu nije kopija ili klon Visual Basica, budući da je unatoč tome što je baziran na alternativi za stvaranje programa i aplikacija za GNU okruženja. Ako pogledamo povijest kozica, ustanovit ćemo da je prvu verziju kozica 1999. godine objavio Francuz Benoît Minisini, stvarajući okruženje koje bi nam omogućilo jednostavno programiranje i razvoj aplikacija s grafičkim korisničkim sučeljem.

U početku je programski oblik u Gambasu bio sličan onom u Gimpu, s nekoliko prozora i orijentiran na upotrebu Qt -a i KDE -a. Kada je 2008. prešao na verzije 2.x, uključivao je potpuno redizajniranje grafičkog programskog sučelja, integrirajući sve u jednom prozoru i dopuštajući upotrebu GTK +. 2011. skočio je na verziju 3.x.

Počnimo s Gambas3 instalacija.

1. Kako instalirati Gambas3


Jednostavnost Gambasa olakšava upotrebu pa nije potrebno poznavati nijedan programski jezik. Vi samo trebate imati besplatni priručnik i potrošiti neko vrijeme na njega. Iz tog razloga, savršen je za učenje ako tek počinjete. Pa, naučimo kako ga instalirati na naš Linux operativni sustav:

Prvo moramo otvoriti naredbeni terminal i unijeti ove naredbe jednu po jednu:

 sudo add-apt-repository ppa: gambas-team / gambas-daily sudo apt-get update sudo apt-get install gambas3 
Naredbe za instalaciju Gambasa

Pomoću ove naredbene linije možemo dobiti najnoviju objavljenu verziju Gambasa. Trenutno idu na 3.8.1, iako preporučujem da imate najstabilniju verziju koju možemo dobiti pomoću ovih drugih naredbi, ali moramo imati na umu da nikada ne možemo dodati dva PPA -a istovremeno, možemo imati samo jedan od ova dva, to je zato što bismo mogli uzrokovati pogrešku i morali bismo početi s čišćenjem prethodnih instalacija.

2. Izradite Gambas projekt s bazom podataka i izvjestite


Prvo što moramo učiniti je dizajnirati bazu podataka koja nam je potrebna za pohranu naših podataka. Ona koju ja predlažem zvat će se "studenti" i imat će dva stola (studente i predmete).
 Tablica učenika: ID, ID, imena, prezimena, adresa, telefon i e -mail. Tablica subjekata: id, subject_name 
Za to koristimo vrlo jednostavan upravitelj za dizajn baze podataka, tzv SQLite preglednik podataka, otvaramo je i stvaramo bazu podataka klikom na novi gumb. Lociramo gdje ćemo ga spremiti i izrađujemo tablice prema prethodnom dizajnu.

Nakon stvaranja izgledalo bi ovako:

Polje ID ostavit ćemo kao primarni ključ u obje tablice. Prije zatvaranja mini-upravitelja, dodajemo mu neke podatke kako bismo provjerili njegovo funkcioniranje prilikom projektiranja obrazaca u programu. Sada, ako možemo kliknuti gumb spremi i zatvoriti mini upravitelj preglednika podataka.

3. Izvođenje programa Gambas


Otvaramo Gambas i stvaramo novi projekt koji mu daje ime i odgovarajući put:

POVEĆAJTE

Zbog veće udobnosti, bazu podataka stvorenu u mapu stvorenu za projekt, u ovom slučaju u mapu pod nazivom GestionEstudiantes, bit će lako pronaći njezinu putanju u programu.

 ‘Konfiguriramo gumb za izlaz. Javni pod btnCerrar_Click () Napusti kraj 
Izradili smo dva nova obrasca, za upis studenata i za predmete.

Sada konfiguriramo gumb za unos učenika:

 Javni Sub btnNuevoEstudiante_Click () FMain.Hide FormEstudiantes.Show End 
Također konfiguriramo gumb za dodavanje teme:
 Javni Sub btnNuevaAsignatura_Click () FMain.Skrij FormCourses.Show End 
Pa ćemo ga dodijeliti.

4. Dizajn obrasca za upis učenika


Za početak stavljamo a columnview i dva gumba na koja ćemo staviti novi tekst i izaći (Svojstvo teksta).

Ako želimo, svakom gumbu možemo dodati ikonu kroz svojstvo slike. Prema columnview nazvat ćemo to jednostavno "stol" (Na ime nekretnine) vrlo je sličan bilo kojoj tablici i pokušavamo ovaj prvi projekt baze podataka učiniti što jednostavnijim.

Nazvat ćemo gumbe: btnnew Y izaći.

Obrazac bi izgledao ovako:

Konfiguriramo gumb za zatvaranje obrasca.

 Javni pod btnExit_Click () Me.Zatvori kraj 
Sada prelazimo na kodiranje.

5. Počeli smo kodirati Gambas


Počet ćemo stavljati neki kôd u naš program, pa ćemo ga komentirati. Prva stvar u bazi podataka je veza s njom. Za to nam Gambas pruža Objekt veze.

Sve što se pojavi s jednim apostrofom u kodu komentar je koji program neće protumačiti.

Primjer:

 Varijabla 'Project Test Private hconn As Connection' za uspostavljanje veze Privatna funkcija ConnectBase () Kao Boolean 'varijabla za vezu, vraća istinitu ili lažnu vrijednost. Ako hconn Null Zatim vrati False' provjeravamo da veza nije otvorena hconn = New Veza 'Pokrećemo vezu novom metodom, a zatim joj prosljeđujemo parametre s parametrom hconn' za putanju baze podataka hconn.Host = " / home / test" hconn.Name = "students" 'ime baze podataka hconn.Type = " sqlite3 "'vrsta baze podataka Pokušajte hconn.Open ()' pokušavamo otvoriti vezu ako ne uspijemo, šaljemo poruku o pogrešci i dajemo joj vrijednost null Ako greška Zatim hconn = Null Message.Error (" Neuspješno povezivanje s baza podataka ") Return True Endif Return False End 
Nakon što ste kopirali gornji kôd, kliknite na opciju Run iz izbornika Debug. Ako sve prođe dobro, ne bi se trebala pojaviti pogreška i zaslon našeg projekta će se ponovno pojaviti. Što znači da je veza s našom Bazom podataka uspostavljena na zadovoljavajući način.

U slučaju pogreške mogući su uzroci:

Uzroci greškePogledajmo vrste uzroka:

1. Prilikom kopiranja i lijepljenja koda morate uzeti u obzir navodnike koji se često mijenjaju pri kopiranju i lijepljenju pa ih aplikacija ne prepoznaje. U tom slučaju, poželjno je izbrisati navodnike i postaviti ih ručno. Kôd unutar navodnika mora biti u fuksiji kako bi se znalo da je točan.

2. Druga moguća pogreška nije označavanje odgovarajućih opcija na kartici Svojstva projekta, što se može pronaći klikom na izbornik Projekt, zatim Svojstva i tamo na kartici Komponente provjerite jesu li označene sljedeće opcije:

  • bg
  • gb.db
  • gb.db.sqlite3
  • gb.form
  • gb.db.mysql (Ovo ne bi trebalo biti potrebno za bazu podataka koju izrađujemo, ali svejedno je označavamo)

3. Druga vrlo česta pogreška je put na kojem imamo i projekt i bazu podataka, gdje se istaknuti redovi nalaze u kodu koji se kopira i zalijepi.

Nakon ispravljanja mogućih pogrešaka i provjere radi li naša aplikacija, nastavljamo zatvaranje veze postavljanjem sljedećeg koda na kraj.

 PUBLIC SUB close connection () IF hconn = NULL THEN RETURN hconn.Close () hconn = NULL END 
Prvo vidimo da više nije zatvoren, ako ne, zatvaramo ga .Zatvoriti

6. Prikaz pohranjenih podataka


Otvaramo obrazac i unutar Proces formiranja i stavili smo sljedeći kod:

(Ne zaboravite provjeriti navodnike koji su se kod lijepljenja mogli promijeniti).

 Javni podobrazac Forma_Open () 'prvo deklariramo varijable i brišemo prikaz stupca Dim hresul kao rezultat Dim tipka Kao filtar zatamnjenja niza Kao tablica nizova Očisti Ako ConnectBase () Zatim vrati' potvrđujemo vezu s bazom podataka 'definiramo svojstva za prikaz stupca 'count for number of columns' tekst za naslov stupaca width za širinu poravnanja stupaca za poravnanje polja. table.Columns.Count = 6 table.Columns [0] .Text = "Cedula" table.Columns [0] .Alignment = Align.Center table.Columns [0] .Width = 100 table.Columns [1] .Text = Tablica "Imena". Stupci [1]. Poravnanje = Poravnaj.Center tablicu. Stupce [1]. Širinu = 120 tablicu. Stupce [2] .Text = "Prezime" tablicu. Stupce [2]. Poravnanje = Poravnaj. Tablicu u centru. . Stupci [2]. Širina = 120 tablica. Stupci [3] .Text = "Adresna" tablica. Stupci [3]. Poravnanje = Poravnaj.Centarna tablica. Stupci [3]. Širina = 120 tablica. Stupci [4]. Tekst = Tablica "Telefon". Stupci [4]. Poravnanje = Poravnaj. Tablica centra. Stupci [4]. Širina = 120 tablica. Stupci [5] .Text = "Pošta" tablica. Stupci [5]. Poravnanje = Poravnanje. Središnja tablica. Stupci [5]. Širina = 120 hresul = hconn.Exec ("odaberi * od učenika") 'Ova uputa pretražuje bazu podataka, ako pronađe podatke čini varijablu hresul istinitom i stoga dostupnom (Dostupno) Učinite Dok hresul .Dostupno 'tada će proći kroz tablicu s do while petljom na temelju ključa (Cedula) i ispunit će tablicu podacima. key = hresul ["ID"] 'polje ID činimo primarnim za pretraživanje tablica. Dodaj (lozinka, lozinka)' dodajemo podatke koji se nalaze u bazi podataka. tablica [ključ] [1] = hresul ["imena"] tablica [ključ] [2] = hresul ["prezime"] tablica [ključ] [3] = hresul ["adresa"] tablica [ključ] [4] = hresul ["phone"] tablica [key] [5] = hresul ["mail"] hresul.MoveNext () 'ova uputa unaprjeđuje pretraživanje na sljedeću petlju podataka' Ponovno izvršava upute unutar petlje sve dok više nema podatke za prikaz. CloseConnection () 'zatvara vezu Kraj 
Proces formiranja

Na kraju ga pokrećemo i provjeravamo njegov rad, što će vratiti sljedeći rezultat:

POVEĆAJTE

7. Izradite obrazac za unos podataka učenika


Sada ćemo stvoriti novi obrazac koji nam omogućuje unos podataka za nove studente, a predloženi naziv za to su edata.

Imat će sljedeće objekte: 6 oznaka naljepnica, 6 okvira za tekst i dva gumba.

Predloženi raspored je sljedeći:

Da vidimo je li sve u redu, idemo na obrazac koji prikazuje popis učenika i konfiguriramo novi gumb na sljedeći način:

POVEĆAJTE

Ako nema pogrešaka i sve ide dobro, idemo dalje s konfiguriranjem novonastalog obrasca za unos novih podataka učenika. Ovaj će obrazac primiti referencu na objekt tipa veza, u našem slučaju hconn stoga ga stavljamo na početak našeg oblika.

 'Datoteka klase Gambas' prvo konfiguriramo vezu Private hconn As Connection 'stvaramo runnew metodu koja će se pozvati iz obrasca koji navodi studente Public Sub runnew (data As Connection) hconn = data' referencu za prethodni obrazac Me. ShowModal () 'prisiljava interakciju s obrascem prije zatvaranja. Kraj Konfiguriramo gumb za otkazivanje: Javni pod btnCancelar_Click () Me.Zatvori (0) Kraj Za unos novih podataka upotrijebit ćemo sljedeću uputu: TRY hconn.EXEC (“ umetni u moje tablice vrijednosti (& 1, & 2, & 3, & 4, & 5. & 6) ”, txtid, txtname, txlastname, txtphone, txtmobile, txtcumple) exec Polja će se pozivati ​​znakom & odgovarajući indeks kao što je prikazano u nastavku. (& 1, & 2, & 3, & 4, & 5. & 6) 
Vratimo se na prethodni obrazac i konfiguriramo gumb za prihvaćanje na sljedeći način:

POVEĆAJTE

Prvo se pokušavamo povezati s našom bazom podataka, ako ne uspijemo, odlazimo. Nakon što je veza uspostavljena, nazvali smo runnewde fdata metoda. Kako je ovaj obrazac prikazan u modalnom obliku, ovaj kôd čeka da unesemo podatke u fdata ili ga jednostavno zatvorimo.

Zatim zatvara vezu i poziva metodu form_open koja ponovno učitava podatke kako bi pokazala izvršene promjene. Sada ćemo vidjeti kako ćemo izmijeniti zapis, na primjer ako prijatelj promijeni mobitel, samo uredite to polje.

Iskoristit ćemo događaj aktiviranja naše kontrole colunmview (tablica) za dodavanje ove funkcionalnosti. Ovaj događaj pokreće se dvostrukim klikom na bilo koji stupac u tablici.

 Public Sub table_Activate () Dim hresul Kao rezultat If table.Current = Null Zatim vrati If ConnectBase () Zatim vrati hresul = hconn.Edit ("studenti", "ID = & 1", table.Current.Key) edata.runedit ( hresul) 'Pozovite runeedit metodu tablice obrazaca edata.Current [0] = hresul ["ID"] table.Current [1] = hresul ["first names"] table.Current [2] = hresul ["prezimena "] tablica. Trenutna [3] = hresul [" adresa "] tablica. Trenutna [4] = hresul [" telefonska "] tablica. Trenutna [5] = hresul [" pošta "] closeConnection () Kraj 
Aktivirajte događaj

Podebljana linija naziva se edata runedit metoda. Budući da ovu metodu još nismo stvorili, ako je pokušamo pokrenuti sada, neće uspjeti.

Vratimo se stoga na dob i postavimo sljedeće varijable na početak obrasca tako da budu dostupne iz cijelog obrasca.

 Privatni hconn kao veza Privatni hresul Kao rezultat Privatno uređivanje Kao Booleov 
Zatim stvorimo novu metodu tzv runedit:
 Javni pod runedit (podaci kao rezultat) hresul = uređivanje podataka = Istina txtCedula.Text = hresul ["ID"] txtName.Text = hresul ["ime"] txtName.Text = hresul ["prezime"] txtAddress.Text = hresul ["adresa"] txtTelephone.Text = hresul ["telefon"] txtEmail.Text = hresul ["pošta"] Me.ShowModal End 
To nam prikazuje podatke s podacima odabranog zapisa kako bismo ih mogli uređivati ​​i postavlja varijablu za uređivanje s vrijednošću true. To je potrebno kako bi se upotrebom uvjetne naredbe prilikom klika btna prihvatiti Razlikovati novo i mijenjati.

Možemo ga testirati iako još uvijek neće raditi, još uvijek nedostaje gumb za prihvaćanje postavi, ali možemo provjeriti vodi li nas do traženog obrasca.

Konfigurirajmo gumb za prihvaćanje za spremanje promjena:

 Javni pod btnAccept_Click () Ako uređujete Zatim pokušajte hresul ["cedula"] = txtCedula.Text Pokušajte hresul ["imena"] = txtNames.Text Pokušajte hresul ["prezimena"] = txtSurname.Text Pokušajte hresul ["adresa"] = txtAddress .Text Pokušajte s hresul ["phone"] = txtTelephone.Text Pokušajte s hresul ["mail"] = txtEmail.Text Pokušajte s hresul.Update Else Pokušajte s hconn.Exec ("umetnite u vrijednosti učenika (& 1, & 2, & 3 , & 4, & 5, & 6) ", txtCedula.Text, txtName.Text, txtSurname.Text, txtAddress.Text, txtTelephone.Text, txtEmail.Text) 's ovim unosimo podatke poslane Endif Me.Close () Uhvati poruku.Error ("Nemoguće je unijeti poslane podatke") Kraj 
Sada možemo spremiti promjene.

8. Konfigurirajte pretraživanje podataka


U obrazac dodajmo gumb za pretraživanje i tekstualni okvir. Ovo je novi izgled obrasca:

POVEĆAJTE

Gumb za pretraživanje konfiguriramo na sličan način kao novi gumb, ovo je kod:

 Javni pod btnBuscar_Click () Dim hresul Kao rezultat Dim tipka Kao Filter Dim Filter Kao String table.Clear If ConnectBase () Zatim vratite table.Columns.Count = 6 table.Columns [0] .Text = "Cedula" table.Columns [0 . 120 tablica. Stupci [2] .Text = "Prezime" tablica. Stupci [2]. Poravnanje = Poravnaj.Centarna tablica. Stupci [2]. Širina = 120 tablica. Stupci [3] .Text = "Adresa" tablica. Stupci [3]. Poravnanje = Poravnaj.Centarna tablica. Stupci [3]. Širina = 120 tablica. Stupci [4] .Text = "Telefonska" tablica. Stupci [4]. Poravnanje = Poravnanje. Tablica centara. Stupci [4] . Širina = 120 tablica. Stupci [5] .Text = "Mail" tablica. Stupci [5]. Poravnanje = Poravnaj.Center tablicu. Stupci [5]. Širina = 120 filter = txtBuscar.Text hresul = hconn.Exec (" odaberite * od učenika gdje imena poput '"& filter &"' ") Do While hresul.Dostupni ključ = hresul [" ID "] tablica. Dodajte (ključ, ključ) tablicu [ključ] [1] = hresul [" naziv res "] tablica [lozinka] [2] = hresul [" prezime "] tablica [lozinka] [3] = hresul [" adresa "] tablica [lozinka] [4] = hresul [" telefon "] tablica [lozinka] [ 5] = hresul ["mail"] hresul.MoveNext () Petlja closeConexion () Kraj 
S onim što smo učinili, već možemo biti jasni u vezi procesa, sada ćemo učiniti isto s obrascem za predmete. The predloženi raspored je sljedeće:

Kao i uvijek, prvo što ćemo programirati je gumb za izlaz:

 Javni pod btnExit_Click () Me.Zatvori kraj 
Sada ćemo uspostaviti vezu s bazom podataka:
 Privatni hconn kao veza Privatna funkcija connectbase () Kao logičko Ako hconn Null Zatim vrati False hconn = Nova veza hconn.Host = " / home / test" hconn.Name = "students" 'baza podataka hconn.Type = "sqlite3"' baza podataka upišite Try hconn.Open () If Error Then hconn = Null Message.Error ("Pogreška pri povezivanju baze podataka") Return True Endif Return False End 
Događaj zakazujemo kako bismo prekinuli vezu:
 Javni pod close closeConexion () Ako je hconn = Null Zatim vratite hconn.Close () hconn = Null End 
Sada vizualiziramo podatke u columnview, u otvorenom slučaju obrasca.

Kôd je sljedeći:

 Javni podobrazac Forma_Open () Dim hresul Kao rezultat Ključ zatamnjivanja Kao Filtar zatamnjenja filtera Kao tablica nizova2.Očisti ako je vezana baza () Zatim vrati tablicu2.Kolumni.Broj = 2 tablice2.Stavci [0] .Text = "id" tablica2.Stolovi [0 ] .Alignment = Align.Right table2.Columns [1] .Text = "Naziv predmeta ili predmeta" hresul = hconn.Exec ("odaberite * iz predmeta") Učinite Dok hresul.Dostupan ključ = hresul ["id"] table2.Add (key, key) table2 [key] [1] = hresul ["matter_name"] hresul.MoveNext () Loop closeConnection () End 
Sada stvaramo obrazac za dodavanje i / ili uređivanje podataka tablice, predmeta ili kolegija. Predloženi naziv je adata. (subjekti podataka).

9. Programiramo gumb za zatvaranje

 Javni pod btnCerrar_Click () Me.Zatvori kraj 
Mi stvaramo referencu na objekt tipa veze, u našem slučaju hconn, stoga ćemo na početak našeg adata obrasca postaviti sljedeći kod:
 Privatni hconn kao veza 
Osim toga, stvaramo runnew metodu koja će se pozvati iz glavnog obrasca. Sintaksa je sljedeća:
 Public Sub runnew (podaci kao veza) hconn = podaci Me.ShowModal () Kraj 
Sada idemo na obrazac za unos podataka o subjektima i u btnnuevo klik događaj stavljamo sljedeći kod:
 Javni pod btnNuevo_Click () If connectbase () Zatim vrati adata.runnew (hconn) closeConexion () Form_Open () End 
Sad možemo probaj novo dugme navedenog oblika.

Nastavljajući s istim obrascem, kodiramo metodu za izmjenu zapisa na sljedeći način. Iskoristit ćemo naš aktivacijski događaj kontrola colunmview (tablica) za dodavanje ove funkcionalnosti. Ovaj događaj pokreće se dvostrukim klikom na bilo koji stupac u tablici.

 Javna podtablica2_Activate () Dim hresul Kao rezultat If table2.Current = Null Then Return If connectbase () Then Return hresul = hconn.Edit ("subjekti", "id = & 1", table2.Current.Key) adata.runedit ( hresul) table2.Current [0] = hresul ["id"] table2.Current [1] = hresul ["matter_name"] closeConnection () Kraj 
Upamtite da neće funkcionirati dok ne stvorimo ovaj događaj u adata obliku. Vratimo se stoga na fdata i postavimo sljedeće varijable na početak obrasca tako da budu dostupne iz cijelog obrasca.
 PRIVATE hconn AS Connection PRIVATE hresul AS Rezultat PRIVATNO uređivanje AS Boolean 
Izrađujemo runedit metodu čiji je kod sljedeći:
 Javni podrunedit (podaci kao rezultat) hresul = uređivanje podataka = True txtAsignaturas.Text = hresul ["subject_name"] Me.ShowModal Kraj 
Ne zaboravite testirati kako biste provjerili je li sve u redu. Sada programiramo gumb za prihvaćanje kako slijedi:
 Javni pod btnAceptar_Click () Ako uređujete Zatim pokušajte hresul ["subject_name"] = txtAsignaturas.Text Pokušajte hresul.Update Inače Pokušajte hconn.Exec ("umetnite u vrijednosti imena_predmeta (& 1)", txtAsignaturas.Text) Endif Me.Close () Catch Message.Error ("Nije moguće unijeti poslane podatke") Kraj 
Sada programiramo rutinu pretraživanja predmeta:
 Javni pod btnBuscar_Click () Dim hresul Kao rezultat Dim tipka Kao Filter Dim Filter Kao String table2.Clear If connectbase () Zatim vratite table2.Columns.Count = 2 table2.Columns [0] .Text = "id" table2.Columns [0 ] .Alignment = Align.Right table2.Columns [1] .Text = "Naziv predmeta ili predmeta" filter = txtBuscar.Text hresul = hconn.Exec ("odaberite * iz predmeta u kojima je naziv_predmeta poput '" & filter & "' ") Do While hresul.Available key = hresul [" id "] table2.Add (key, key) table2 [key] [1] = hresul [" matter_name "] hresul.MoveNext () Petlja closeConexion () Kraj 
Imat ćemo to spremno.

Zaključci o kozicama
Za ljude koji su podnijeli aplikaciju u Visual Basicu, a zanima ih programiranje, ovo je jedan od alata koji će vas nedvojbeno zanimati i jasna je opcija koju biste trebali razmotriti.

Zahvaljujući testovima koje možemo vidjeti u ovom vodiču, možemo vidjeti da je lako raditi i stvarno ne treba puno vremena za izradu neke druge jednostavne aplikacije za Linux.

Kao što vidimo, automatsko dovršavanje koje sadrži kozice ograničeno je na objekt s kojim radite, a ne kao u slučaju Geanyja, koji vam može staviti bilo što. Moramo mu dati bodove jer radi kao Java i Netbeans i bez daljnjih komplikacija.

Stoga onima koji žele naučiti programirati jednostavne aplikacije u Linuxu i znatiželjni smo, preporučujemo da isprobate Gambas3.

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave