Forum > Mobile

Trinomio Eclipse-Pascal-Android

(1/2) > >>

Microges2000:
Ciao ragazzi...

Allora ho provato ad usare il plug-in freepascal per eclipse come spiegato qui http://www.tuicool.com/articles/vqQfq2 ma, dato che uso l'ultima versione di Eclipse ho dovuto modificare leggermente il parser pba.exe in maniera da generare i file esatti (lo potete trovare qui www.biotecnicainstruments.com/File/Temp/(Pascal builder).zip è sia in sorgente che precompilato).
Comunque la generazione del file va bene ma non capisco come accedere ai controlli inseriti con il designer (sia che siano bottoni che altro).
Qualcuno ci vuole provare e, magari, darmi qualche dritta? Credo che questo binomio (Eclipse-FreePascal) sia il migliore fin'ora

nomorelogic:
io non ci ho ancora messo mano ma penso proprio che a breve dovrò provare anche questa soluzione

xinyiman:
diteci di piu' al riguardo  :)

Microges2000:

--- Citazione da: xinyiman - Dicembre 18, 2012, 10:47:58 am ---diteci di piu' al riguardo  :)

--- Termina citazione ---
Praticamente è un plug-in per Eclipse che permette di scrivere codice pascal invece del Java classico.
Se lo attivi (e lo metti in testa ai compilatori) verdrai che sarà presente una directory supplementare nel progetto chiamata pas e contenente i sorgenti pascal del progetto stesso.
Praticamente il sorgente classico Java


--- Codice: ---
package com.example.test;

import com.prove.Test.R;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

}

--- Termina codice ---

verrà trasformato in


--- Codice: ---
unit MainActivity;

{$mode delphi}
{$modeswitch unicodestrings}
{$namespace primo.Test}

interface

uses androidr14, Rjava;

type
  MainActivity = class(AAActivity)
    procedure onCreate(savedInstanceState: AOBundle); override;
    function onCreateOptionsMenu(menu: AVMenu): jboolean; override;
  end;


implementation

procedure MainActivity.onCreate(savedInstanceState: AOBundle);
begin
  inherited onCreate(savedInstanceState);
  setContentView(R.layout.me);
end;

function MainActivity.onCreateOptionsMenu(menu: AVMenu): jboolean;
begin
  getMenuInflater().inflate(R.menu.me, menu);
  Result := True;
end;

end.

--- Termina codice ---

Più semplice per noi no?  ;)

Microges2000:
Allora sto' andando avanti negli "studi" (cavolo senza documentazione è un casino). Comunque sono arrivato a poter adoperare i componenti messi sulla form principale (pardon attività principale in android)

Praticamente ho messo un bottone sulla form principale chiamato button1 ed ho inserito 3 stringhe (sempre in maniera visuale) chiamate:

titolo_main -> 'Questo è il titolo della finestra principale'
id_premuto -> 'Bottone premuto'
id_rilasciato -> 'Bottone rilasciato'

vabbè comunque onCreate dell'attività principale diventa


--- Codice: ---
procedure MainActivity.onCreate(savedInstanceState: AOBundle);
begin
  inherited onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  // Metto il titolo alla finestra
  SetTitle(R.Strings.titolo_main);
 
  // Prendo il bottone chiamato button1
  Bottone := AWButton(findViewById(R.id.button1));

  // Cambio il caption del bottone
  Bottone.Settext(R.Strings.id_rilasciato);
end;
--- Termina codice ---

dove Button1 è una variabile della classe MainActivity di tipo AWButton (qui' aiuta il file android14.inc).

Quindi riesco tranquillamente a modificare i vari controlli

Ora ho la necessità di risponere all'evento onclick e qui' iniziano i casini.... sulla documentazione android una risposta si ha generando una procedura chiamata onClick sull'evento OnClickListener, girovagando sul file android14.inc ho trovato questa dichiarazione inglobata nella classe AVView che è la classe genitore di tutti i controlli visuali


--- Codice: ---
InnerOnClickListener = interface external 'android.view' name 'OnClickListener'
  procedure onClick(para1: AVView); overload;
end;

--- Termina codice ---

qundi ho dichiarato, all'interno dell'oggetto MainActivity un tipo derivante da InneronClickListner


--- Codice: ---
TClicca = class (AVView.InnerOnClickListener)
public
    Procedure onClick(para1: AVView); Overload;
end;

--- Termina codice ---

ho scritto la procedura OnClick in maniera da cambiare il testo al bottone, hoi dichiarato una variabile di tipo TClicca ed ho settato 'OnClickListener del bottone al mio ogggetto ma non succede nulla sul click.

Il codice completo è

--- Codice: ---
unit MainActivity;

{$mode delphi}
{$modeswitch unicodestrings}
{$namespace com.example.test}

interface

uses androidr14, Rjava;

type
  MainActivity = class(AAActivity)
  Type
    TClicca = class (AVView.InnerOnClickListener)
    public
      Procedure onClick(para1: AVView); Overload;
    end;
  Var
    Clicca  : TClicca;
    Bottone : AWButton; 
  public
    procedure onCreate(savedInstanceState: AOBundle); Override;
function onCreateOptionsMenu(menu: AVMenu): boolean; Override;
  end;

implementation

procedure MainActivity.onCreate(savedInstanceState: AOBundle);
begin
  inherited onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  SetTitle(R.Strings.titolo_main);
 
  Bottone := AWButton(findViewById(R.id.button1));
  Bottone.Settext(R.Strings.id_rilasciato);
   
  Bottone.setOnClickListener(Clicca);
end;

function MainActivity.onCreateOptionsMenu(menu: AVMenu): boolean;
begin
  getMenuInflater().inflate(R.menu.activity_main, menu);
  Result := True;
end;

procedure MainActivity.TClicca.OnClick(para1: AVView);
Begin
  Bottone.SetText(R.Strings.id_premuto);
End;

end.

--- Termina codice ---

sinceramente non capisco dove possa essere l'errore dato che la compilazione va a buon fine e l'esecuzione non si incasina con errori vari.

Quanche anima pia mi puo' aiutare? Dai su che se si risolve questo il trinomio Eclipse-FreePascal-Android è praticamente fatto e saremmo i primi a scrivere qualcosa a riguardo


Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa