Mijn doel is uiteindelijk een webpagina te maken, die gegevens uit een database haalt (via REST) en deze presenteert op het scherm. Uiteindelijk zal het een webpagina zijn, waarvan ik een naam kan selecteren en een frame kan tonen in de browser. Zo kan elke gebruiker zelf een keuze maken wat hij/zij wilt zien (www.caviawatch.nl). Maar eerst een product leren gebruiken. Anders kom je niet ver.
Welk ontwikkeldialect gebruikt Smart Mobile? PASCAL! Dat is mooi. Ik werk al jaren met Delphi / Lazarus en kan dus wel wat programmeren om een redelijk programma te kunnen tonen. De installatie is simpel. Downloaden van de website, installeren en de demo-key invoeren. Deze key is 35 dagen geldig. Als je niets te doen hebt, heb je zat tijd om alles uit te vogelen. Programma opgestart en het eerste wat je ziet is de IDE. Deze is een beetje opgebouwd op basis van D7, maar ondanks alles neergezet als een single doc, waardoor het een look'n'feel krijgt van D2005+.
Als eerste ga je kijken naar de demo's. Dat zijn er best wel veel, maar 95% is gerelateerd op client niveau. Ik wil juist op client/server werken, zodat ik resultaat van tabel vanuit mijn databaseserver krijgt in mijn browser. Daar zijn geen demo's van. Een enkele, die een tabel vult vanuit een button, maar ik kan niet zien waar die gegevens staan. Ik zie in de debuggerscherm dat er wel records worden aangemaakt, maar waar geplaatst worden en ik geen idee van.
Maar het best leren doe je door eigen programma's te maken met behulp van de documentatie.
Een nieuw visual project opgestart. De IDE komt met een leegscherm wat tevens je formulier is. Geen border, want het is geen echt venster, maar een pagina in je browser. Een beetje gekeken naar welke componenten aanwezig zijn en viel mij een beetje tegen. De standaard (common) componenten zijn een beetje hetzelfde als in Delphi/Lazarus. Ik begrijp alleen niet waarom er een aparte tabblad is voor mobile componenten. De datatab valt een beetje tegen. Daar staat alleen een grid en een chart in. Eigenlijk had ik ook componenten verwacht, zoals TDatabase en TDataset en DBComponenten, die visueel een SQLite database direct kan benaderen. Is een visual IDE niet gemaakt, om de ontwikkelaar het laten vereenvoudigen om met simpele handelingen uit te kunnen voeren. Ik weet dat je een database als MySQL/MariaDB, SQLServer, Firebird/Interbase of Oracle zomaar kan benaderen, omdat deze achter een firewall zitten, maar SQLite is eigenlijk een local database. Maar wie weet.
Mijn eerste doelstelling: het tonen van een grid met data erin. Component W3Grid gepakt en deze op het formulier geplaatst. Dan zal je verwachten dat je, net zoals een TStringgrid, al een basis grid hebt. Maar het component is leeg. Sterker nog; je MOET zelf de bronbestand van de grid in de uses plaatsen. Vervolgens moet je het zelf declareren in de {private} sector van je formulier. Waarom doet de IDE dat niet voor je! Je moet de Grid zelf in runtime aanmaken. Ziet er dan zo uit:
procedure TForm1.InitializeForm; begin inherited; // this is a good place to initialize components MyGrid := TW3Grid.Create(Self); MyGrid.Visible := True; Mygrid.Top := 20; Mygrid.Left := 20; MyGrid.HeaderHeight := 26; MyGrid.RowHeight := 24; end;
procedure TForm1.InitializeForm; var MyTextColumn: TW3TextColumn; begin inherited; // this is a good place to initialize components FHttp := TW3HttpRequest.Create; FHttp.OnDataReady := HandleHttpDataReady; FHttp.OnReadyStateChange := HandleHttpReadyStateChanged; MyGrid := TW3Grid.Create(Self); MyGrid.Visible := True; Mygrid.Top := 20; Mygrid.Left := 20; MyGrid.HeaderHeight := 26; MyGrid.RowHeight := 24; MyTextColumn := TW3TextColumn.Create(MyGrid as IW3ColumnsControl); MyGrid.Columns.Add(MyTextColumn); MyTextColumn := TW3TextColumn.Create(MyGrid as IW3ColumnsControl); MyGrid.Columns.Add(MyTextColumn); MyGrid.Columns[0].Width := 100; MyGrid.Columns[0].Header.Caption := 'nick name'; MyGrid.Columns[1].Width := 120; MyGrid.Columns[1].Header.Caption := 'real name'; MyGrid.AddRow; MyGrid.Cell[0, MyGrid.LastAddedRow].Value := 'jkuiper'; MyGrid.Cell[1, MyGrid.LastAddedRow].Value := 'john'; end;
Volgende struikelblok: het ophalen van data via een phpscript op een webserver (REST). In de handleiding staat dat je gebruik moet maken van de class TW3Httprequest. Ook daarvan is geen component beschikbaar en moet dus worden gemaakt in runtime. Voorbeeld in de handleiding gevolgd en kwam op het resultaat dat ik een JSON file te zien kreeg in een memoveld in de browser. Oke. JSON is een standaard formaat voor javascript om met data om te gaan. Omdat ik in mijn chatbox applicatie gebruik maak van XML, moest ik even uitzoeken hoe ik dat met PHP in JSON formaat kon krijgen (PHP 5.2.6). Uiteindelijk is dit het resultaat geworden:
<?PHP $streamrow = mysql_fetch_array($CamResult, MYSQL_ASSOC)) { $link['nickname'] = $streamnow['nickname']; $link['realname'] = $streamnow['realname']; array_push($linklist,$link); } echo json_encode($linklist); ?>
Je kan in Smart Mobile een JSON request rechtstreeks uitvoeren. Ik krijg het niet voor elkaar. Er wordt gesproken over 'HandleClick(Sender:TObject)', maar die kan ik nergens vinden. Door de code in een Onclick event van een button te plaatsen, werkt het ook niet. Mis ik bepaalde info? Dan maar op de ouderwetse manier. Ik wil die data gewoon kunnen plaaten in mijn eigen DBGrid. Als je al een tijdje in Delphi/Lazarus programmeeert, kan je echt wel een string parsen naar data, die jij wilt zien. StringReplace() bestaat niet. Ik kon de '[' en ']' alleen verwijderen met copy(). Nadat dit te hebben uitgevoerd, laat ik de tekst parsn met een stringlist. Je zou zeggen dat deze bestaat (en volgens het SM forum wordt die ook gebruikt), maar de compiler gaf mij een foutmelding dat deze class helemaal niet bestaat. Vreemd. In Delphi/Lazarus staat deze in classes, maar in Smart Mobile kan ik deze nergens vinden. Ook de documentatie verteld niet waar.
Ik kan (op dit moment) niet verder. Kan geen JSON parser aan de praat krijgen en kan niet eens zelf parsen.
Conclusie.
De IDE ziet er best goed uit. Maar ondanks dat het in pascal taal staat (deze broncode wordt omgezet naar javascript, zodat een browser/smartphone kan begrijpen wat er moet worden getoond), moet je toch enige kennis hebben van deze ontwikkel taal. Een beginner gaat hiet helemaal niets van snappen.
De documentatie is geschreven voor versie 1. Heel erg lastig als je de voorbeelden wilt volgen met runtime componenten, die in versie 2 in een andere untit zijn gezet.
Aan deployen ben ik niet meer aan toe gekomen. Had graag een kleine demo voor dit forum willen maken en deze op mijn webserver willen zetten met mijn bevindingen, maar ik heb geen volledig programma.
Ik ben blij dat ik een werkende demo versie heb. Ik ben benieuwd wat de ervaringen van andere zijn.
vBulletin Message