Italian community of Lazarus and Free Pascal

Programmazione => LCL => Topic aperto da: CortelliStefano - Settembre 04, 2012, 12:02:13 am

Titolo: [RISOLTO] TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Settembre 04, 2012, 12:02:13 am
Un saluto a tutto il forum. Volevo chiedervi se qualcuno di voi ha modo di verificare la presenza di problemi utilizzando Alt + Tab per passare da una form all'altra dello stesso programma scritto con Lazarus.

In pratica, passando da una form all'altra con Alt+Tab e ritornando poi sempre con Alt+Tab alla form originaria noto che:
-Se il focus era su un DbEdit, le modifiche apportate sul campo vengono perse;
-Le DbGrid presentano problemi (le celle non sono più bordate di rosso e presentano problemi al momento dell'inserimento, ogni carattere inserito si mangia l'altro, così che risulta problematico inserire testo nelle celle).

Questo almeno con Linux con le GTK2.

Se invece mi sposto tra le forms usando il mouse e la TaskBar tutto funziona perfettamente.

Anche se mi sposto con Alt+Tab tra applicazioni diverse (non tra le form di uno stesso programma) non ci sono problemi.

Inizialmente avevo "attribuito" il problema alla DbGrid, ma invece credo che dipenda da TForms, perché sembra proprio che l'Alt+Tab inneschi qualcosa che poi crea i problemi descritti.

Anche mettendo ShowInTaskBar = stNever, la semplice pressione di Alt+Tab, che in questo caso porta sulla MainForm, è sufficiente a generare il problema.

Il problema è per quanto mi riguarda molto grave e mi costringe a rimanere ancora alla versione 0.9.28.2 di Lazarus che funziona egregiamente.

Tutte le versioni successive presentano questo problema, troppo grave per applicazioni complesse che richiedono continuamente di spostarsi da una form all'altra: la 0.9.30, la 0.9.30.2, la 0.9.30.4 ed anche la nuovissima 1.0 presentano tutte il fastidioso problema.

Ho anche segnalato il problema sul bugtracker ufficiale, ma senza ricevere ancora alcun riscontro:
http://bugs.freepascal.org/view.php?id=22475

Se qualcuno avesse modo di verificare il problema, o magari qualche consiglio per poterlo in qualche modo bypassare... ne sarei estremamente grato.

Trovo penalizzante dovere rimanere su una versione di Lazarus vecchia ormai di tre anni... oppure di utilizzare versioni diversa a seconda del Widget/S.O. su cui devo compilare.

Qualcun altro si è imbattuto nello stesso problema?

Grazie infinite per qualsiasi consiglio.

Buona serata a tutti,

Stefano
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: nomorelogic - Settembre 04, 2012, 09:34:54 am
ciao, ora non riesco a fare delle prove ma potresti provare con l'evento OnDeactivate della form.
Ad esempio, nel caso del DbEdit, potresti spostare il focus ad un altro controllo e poi ripristinarlo nel DbEdit.
So che è una pezza ma intanto potrebbe dare qualche risposta.

ciao
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Settembre 04, 2012, 10:23:46 am
Ciao e prima di tutto grazie per la risposta.

Per quello che riguarda il DbEdit la tua soluzione è sicuramente valida, magari anziché spostare il focus bastarebbe fare un post:

Codice: [Seleziona]
if (MyDataSet.State in [dsEdit, dsInsert]) then MyDataSet.Post; 

Con una piccola implementazione su tutti i moduli il problema del DbEdit verrebbe bypassato in maniera eccellente.

Il problema più grave si verifica tuttavia con la DbGrid, e qui non riesco proprio a venirne a capo, perché il problema si verifica anche se al momento dell'Alt+Tab l'utente non è sulla griglia (ovviamente si rende conto del problema quando prova a digitare qualcosa sulla griglia).

Hai qualche idea per riuscire in qualche modo a bypassare il problema con la DbGrid?

Ancora grazie e buona giornata,

Stefano
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: nomorelogic - Settembre 04, 2012, 11:37:10 am
ciao Stefano,
dalla descrizine che fai è come se i controlli non avessero coscienza che l'input da parte dell'utente sia terminato. E' per questo che un post sistema: forza ai datacontrols il termine della fase di input.

Volendo utilizzare la soluzione del post, potresti implementare un metodo "PostAllTables" direttamente nel datamodule.
In questo modo se si rendono necessari post su più tabelle con un'unica chiamata a DataModule.PostAllTables hai sistemato tutte le tabelle necessarie e, di riflesso, tutti i datacontrol collegati.

Potrebbe anche essere una soluzione al problema della grid; non sono però sicuro che, quando l'utente tornerà alla finestra, si troverà davanti a quello che si aspetta (magari il cursore s'è spostato o no si è più sulla stessa colonna e poi, è possibile impostare a true  l'autoedit?).

Secondo me se il cambio focus funziona, soprattutto per le griglie, si tratta di un intervento preferibile in quanto meno invasivo.
Potresi anche provare ad abbinare il cambio focus con un Invalidate, al rientro (OnActivate), del controllo con il focus.

Se dovesse funzionare, questo potrebbe essere un comportamento da codificare in un form da cui tutte le form del progetto ereditano al posto di TForm.

Edit:
facci sapere come risolvi che la cosa sarà utile a molti :)
ciao
nomorelogic
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Settembre 04, 2012, 12:34:33 pm
Grazie ancora della risposta. Il problema è che con la DbGrid né il Focus né il Post risolvono il problema.

Addirittura con la DbGrid il problema si verifica anche se l'utente non è sulla griglia al momento dell'Alt+Tab (ed il focus è quindi su un altro campo), appena l'utente va sulla griglia il problema purtroppo si presenta e finora non sono ancora riuscito in nessun modo a trovare un modo per bypassarlo.

La cosa strana è che con la 1.0 (e qui mi sembra esserci forse una differenza rispetto alla 0.9.30.X) quando si ritorna sulla form con Alt+Tab la prima cella su cui ci si posiziona sembrerebbe funzionare correttamente, poi all'uscita della cella la griglia perde il bordo rosso ed il problema si presenta fintanto che non mi sposto con il mouse sulla TaskBar e cambio ancora form e ritorno sempre con la TaskBar, allora la griglia sembra ritornare a funzionare.

Quando si verifica il problema, anche cliccando con il mouse sulla cella, questa non prende il bordo rosso.

Ho fatto una serie di tentativi, soprattutto sull'evento Activate, senza successo.

Lo stesso codice che utilizzo per selezionare una finestra (e che funziona correttamente):

Codice: [Seleziona]
  Application.ProcessMessages;
  with Sender as TMenuItem do begin
    if (Screen.FormCount < 1) then exit;
    for k := (Screen.FormCount - 1) downto 0 do begin
      if Trim(Screen.Forms[k].Caption) = Trim(Caption) then begin
        try
          if (MyOs <> 0) then Screen.Forms[k].Show; 
          Screen.Forms[k].WindowState := wsNormal;
          Screen.Forms[k].SetFocus;
        finally
        end;
      end;
    end;
  end;

se copiato (nelle istruzioni necessarie) nell'evento Activate (ossia se setto il WindowsState ed SetFocus sulla form nell'evento Activate), il problema rimane. È solo con l'Alt+Tab che si verifica il problema, e non al momento di lasciare la form, ma solo al momento di ritornarci (se mi sposto con la TaskBar e ritorno con Alt+Tab il problema rimane, mentre se mi sposto con Alt+Tab e torno con la TaskBar no).

Hai qualche suggerimento da tentare con la DbGrid per bypassare in qualche modo il problema?

Ancora grazie per l'aiuto.

Buona giornata a tutti,

Stefano
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: nomorelogic - Settembre 04, 2012, 01:43:07 pm
il problema è quindi relativo ai 2 diversi modi di tornare nel form
bisognerebbe sapere cosa (caspita) c'è di diverso nelle 2 modalità...

hai provato con
Codice: [Seleziona]
DbGrid1.EndUpdate(TRUE);
messo in OnDeactivate del form ad esempio?

Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Settembre 04, 2012, 02:13:31 pm
Sì, il problema sembra proprio relativo al come ci si sposta tra le foms, e solo ritornando sulla form con Alt+Tab si verifica. Per questo pensavo che fosse un bug di TForms.

Citazione
hai provato con

DbGrid1.EndUpdate(TRUE);

Ho provato velocemente, a la griglia perde la visualizzazione, rimane la scrollbar verticale, ma senza le celle visualizzate.

Magari riprovo a fare qualche tentativo in più, ho anche provato a fare un DisabledControl e poi l'EnabledControl sul Deactivate, senza risolvere nulla.

Se hai qualche consiglio, anche tenativi da poter fare, ti ringrazio davvero molto, perché non riesco a venirne a capo (ed è la quarta versione consecutiva di Lazarus con lo stesso problema... solo che inizialmente pensavo riguardasse solo la DbGrid, ed avevo segnalato il bug http://bugs.freepascal.org/view.php?id=19993, ma adesso direi che invece sia un problema (anche) di TForms).

Ciao e ancora grazie,

Stefano
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: nomorelogic - Settembre 04, 2012, 03:10:21 pm
visto che hai più versioni di lazarus tra le mani...
Potresti comparare i sorgenti di TCustomForm tra la versione funzionante e quella che non va, magari sul metodo OnActivate ci sono delle differenze.
Se così non fosse bisognerebbe andare all'indietro nella gerarchia: se dipende dalla versione di lazarus da qualche parte una difference ci dovrà pur essere.
So che non è una cosa facile e ci vuole tempo ma se alla tua segnalazione non risponde nessuno...

ciao
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Settembre 05, 2012, 03:44:22 pm
Grazie della risposta, al momento ho provato a postare il problema nel forum ufficiale:
http://lazarus.freepascal.org/index.php/topic,18085.0.html

Spero che qualcuno possa darmi una mano.

Nel frattempo ho identificato meglio il problema, che probabilmente va a sommarsi ad alcuni problemi della DbGrid, sempre dalla versione 0.9.30.

In pratica:
-a) La DbGrid perde il focus quando dalla griglia ci si muove nel dataset (pure con i controlli disabilitati), ad esempio per aggiornare i totali;
-b) Per bypassare questo problema avevo aggiunto un SetFocus nell'evento KeyDown in caso di tasti di spostamento;
-c) Questo SetFocus, a prescindere dallo spostarsi o meno nel dataset, crea problemi con l'Alt+Tab;
-d) Se tolgo il SetFocus si risovono i problemi con l'Alt+Tab se non ci si sposta nel dataset;
-e) Anche senza il SetFocus comunque, in caso di navigazione nel dataset (p.es. per calcolo totali), il problema con Alt+Tab si ripropone;
-f) Il problema sembra riguardare i campi Currency: se dopo l'Alt+Tab si va su un campo testo, sembra funzionare fintanto che non ci si posiziona su un campo Currency dove compare il problema e, una volta comparso, rimane anche sui campi di testo;
-g) Il problema sembra risolversi spostandosi di form con la TaskBar e ritornando sempre con la TaskBar.

Qualcuno ha modo di riscontrare il problema e capire se riguarda solo Linux con le GTK2 o più in generali tutte le situazioni?

Con Lazarus 0.9.28.2 funzionava tutto perfettamente che era una meraviglia...

Nel frattempo una soluzione per bypassare il problema sembra essere:
-Fare un Post al Deactivate, oppure spostare il focus (e magari memorizzare il campo, da reimpostare come Self.ActiveControl all'Activate) per risolvere i problemi dei DbEdit;
-Per la DbGrid, spostare tutti i codici che implicano lo spostarsi tra i record del dataset attivati nell'evento KeyDown: questo può essere fatto utilizzando gli eventi del DataSet (p.es. AfterPost), memorizzando i dati da utilizzare (al bisogno) nell'evento KeyDown, p.es. per visualizzare a richiesta un totale, in modo da non dovere mai navigare nel dataset dal KeyDown.

Per il momento altre soluzioni non ne vedo.

Nel forum ufficiale ho anche postato un progetto test di esempio, che tuttavia richiede Firebird (anche se potrebbe essere facilmente adattato ad altre basi dati).

Ogni aiuto o impressione al riguardo è chiaramente sempre bene accetto.

Un saluto a tutto il forum,

Stefano
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: Stilgar - Settembre 10, 2012, 11:06:22 am
Ciao Stefano,
 dal tuo post sembra che il currency venga gestito in "malo modo".
Hai provato a cambiare il formato del dato in "double" ... o in ogni caso in virgola mobile (impostando a 4 i numeri decimali come precisione).
Se è veramente il currency e non la virgola mobile (il testo non ha virgola, quindi non possiamo escludere i dati numerici a priori), dovrebbe essere un work around accettabile. In ogni caso oltre la quarta cifra decimale non fanno menneno transazioni internazionali ;) Quindi sei abbondantemente sopra le richieste minime di sistema .... :D
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Settembre 11, 2012, 12:11:39 am
Ciao Stilgar,

e prima di tutto grazie della rispota. Ho provato a modificare la gestione del dato da Currency a Double, settando nella procedura di calcolo totali la variabile C come Double e leggendo il campo come .AsFloat anziché come .AsCurrency, ma il problema rimane identico.

Il campo, sul database, è di tipo Numeric (18,2) e gli oggetti Fields sono già di tipo TFloatField qualora impostati a design-time (FBDataSet gestisce di default i campi Currency a design time sempre come TFloatField).

Nel progetto di test per questione di rapidità non ho creato campi a design time sul file LFM, ma il problema rimane comunque identico.

Per ora l'unica soluzione che ho trovato è stata quella di evitare di navigare nel dataset nell'evento KeyDown. Anche se, da quanto sto verificando, il problema sembrerebbe verificarsi sempre con i tasti di spostamento (freccia su, freccia giu, ecc.), mentre premendo un tasto funzione che calcola il totale il problema sembrerebbe non verificarsi.

È vero che il più delle volte tutte queste operazioni che richiedono la navigazione si gestiscono nel Before/AfterPost, ma talvolta può essere anche necessario/utile navigare nel dataset dal KeyDown.

Ho visto con piacere che da pochi giorni i bug che ho segnalato sul bugtracker sono stati passati ad "assigned"... Quindi incrociamo le dita...  :)

Nel frattempo cercherò sicuramente di adattare il codice per bypassare il problema, ma resto scettico ad abbandonare la 0.9.28.2, che finora ha sempre funzionato molto bene, per la 1.0, che presenta sicuramente molte novità, ma da quanto pare offre anche meno stabilità...

Per il tipo di applicazioni che sviluppo la prima priorità è la stabilità, l'upgrade alla versione corrente di Lazarus mi sarebbe peraltro utile soprattutto sotto Mac dove la 0.9.28.2 presenta qualche problema di più rispetto alle versioni per Linux/Windows, e soprattutto l'uscita di Mountain Lion che non supporta più l'interfaccia Carbon (predefinita Lazarus per Mac) sta creando qualche problema e preferirei utilizzare la stessa versione di Lazarus per tutti i sistemi operativi, se possibile.

Se hai qualche altro consiglio, o tentativo da fare, è sicuramente bene accetto...  ;)

Ancora grazie e buona serata, un saluto a tutto il forum,

Stefano
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: Stilgar - Settembre 11, 2012, 10:06:07 am
A questo punto rimane da giocare la carte dell'inviarsi i "tasti" via software... cerca un'implementazione di sendKey che sia completa....
In questo modo puoi mandare alle form tutte le sequanze di caratteri (simulando la tastiera) che ti servono....
Più work around di questo ... ;)
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Settembre 13, 2012, 12:04:06 pm
Ciao e grazie della risposta. Direi di riuscire a risolvere spostando il codice nell'AfterPost ove possibile, o comunque evitando di navigare nella DbGrid nell'evento KeyDown.

Con qualche cambiamento di codice mi sembra una soluzione tutto sommato praticabile, insieme a quella dell'evento Deactivate per quanto riguarda il DbEdit.

Dagli ultimi test sembra anche che il problema nel KeyDown della griglia si verifica solo quando si gestiscono freccie o tasti di spostamento, mentre i tasti funzione sembrerebbero non creare problemi.

Questa mattina ho però scoperto la "chicca" finale: anche senza navigare nel dataset dall'evento KeyDown della DbGrid, spostandosi dalla form principale del progetto alla form con la DbGrid con Alt+Tab, il problema si verifica sempre e comunque, dulcius in fundo anche con campi non Currency e quindi anche StringField.

Hai qualche idea per riuscire a disabilitare l'Alt+Tab dalla form principale (in cui c'è solo il menu, per cui potrei settare anche KeyPreview a True), in modo da bypassare il problema?

Purtroppo con gli eventi KeyDown non sembra possibile, e vorrei evitare l'utilizzo di API per non complicare a dismisura la portabilità del codice che è per me essenziale.

Ho già aggiunto una nota nel bugtracker ufficiale, ed allego anche qui il progetto di test (che si appoggia ad un Db Firebird e richiede  le SQLDB o le UIB/FbDataSet, ma che potrebbe essere facilmente adattato a qualsiasi altra base dati).

Qualcuno ha voglia di provare a riprodurre il problema, per vedere se riguarda anche altri Widgset o altri S.O.?

Mi sembra impossibile che un  bug così grave sia rimasto per 4 versioni successive... Non credo che sia così strano spostarsi con Alt+Tab... Per questo non riesco a capire se riguarda solo le GTK2/Linux o in generale tutte le piattaforme.

Grazie e buona giornata a tutti,

Stefano
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Settembre 23, 2012, 07:44:25 pm
Un saluto a tutti, nel frattempo ho aggiornato il programma di test sul bugtracker, semplificando il più possibile il codice, commentando quanto non serve per riprodurre il problema ed unendo in un unico progetto i vari problemi riscontrati dalla versione 0.9.30 e tuttora rimasti nella 1.0.

A chi dovesse interessare, il (semplice) progetto riguarda i bugs 0019993 e 0022475.

Il progetto utilizza un database Firebird con le UIB/FBDataSet, ma per la sua semplicità potrebbe essere facilmente adattato a qualsiasi altra base dati.

Ho anche realizzato un brevissimo video in formato AVI (meno di un minuto) che evidenzia i problemi e che è temporaneamente disponibile a questo link:
http://www.studiocortelli.com/index.php?mod=28_Download&downloadfile=Software/ForExperts_Lazarus_TestDbGrid_20120923_Video.avi&mode=go

Qualcuno ha voglia di riprodurre il problema per vedere se ci sono eventualmente altre anomalie da segnalare e soprattutto per verificare quali sono i widgetset che presentano il problema?

Attualmente ho potuto verificare solamente con Linux e GTK2.

Buona serata a tutto il forum,

Stefano
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Aprile 15, 2013, 07:44:33 pm
Un saluto a tutti. Ho constatato che il problema persiste ancora anche con la nuova versione 1.0.8 di Lazarus, del resto il bug rimane in effetti ancora in stato "assigned":
http://bugs.freepascal.org/view.php?id=22475

Poiché questo mi costringe a rimanere sotto Linux/GTK2 alla versione 0.9.28.2 di Lazarus -  ormai sono due anni ed 8 releases di Lazarus in cui il problema persiste - volevo sapere se qualcuno aveva trovato qualche soluzione per bypassare in qualche modo il problema sotto Linux.

C'è qualcuno che compila sotto Linux/GTK2 ed ha trovato il modo in qualche modo di venirne a capo?

Ho provato ad intervenire negli eventi Activate e Deactivate, ma senza successo, intercettare il tasto Tab con il KeyDown non è possibile in quanto gestito prima dal sistema operativo.

Non c'è nessuno con il mio stesso problema?

L'unica sarebbe compilare con le QT, ho fatto un test piuttosto approfondito l'anno scorso con la versione 1di Lazarus, incontrando però ben 17 bachi di Lazarus, soprattutto con la DbGrid, alcuni potenzialmente molto pericolosi, in quanto uno di questi bachi p.es. al Post sposta talvolta il dataset al primo record (devo disassociare la griglia al datasource prima del post e poi riassociarla  >:( ).

Anche se alla fine con le QT questi bachi dovrei averli bypassati tutti, vista la situazione "a rischio" vorrei comunque attendere che Lazarus con le QT maturi un po'.

Il baco dell'Alt+Tab con le GTK2 non riesco invece a bypassarlo in nessun modo.

Grazie per qualsiasi suggerimento, buona serata a tutti,

Stefano
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: Stilgar - Aprile 16, 2013, 09:50:39 am
Dalla versione 1.0.8 di Lazarus:
Codice: [Seleziona]
TKeyEvent = procedure(Sender: TObject; var Key: Word; Shift: TShiftState) of Object; 
....
procedure AddOnKeyDownBeforeHandler(Handler: TKeyEvent;AsFirst: Boolean=true); 
...
procedure TApplication.NotifyKeyDownBeforeHandler(Sender: TObject;
  var Key: Word; Shift: TShiftState);
var
  i: Integer;
begin
  i:=FApplicationHandlers[ahtKeyDownBefore].Count;
  while FApplicationHandlers[ahtKeyDownBefore].NextDownIndex(i) do
    TKeyEvent(FApplicationHandlers[ahtKeyDownBefore][i])(Sender,Key,Shift);
end;

procedure TApplication.NotifyKeyDownHandler(Sender: TObject;
  var Key: Word; Shift: TShiftState);
var
  i: Integer;
begin
  i := FApplicationHandlers[ahtKeyDownAfter].Count;
  while FApplicationHandlers[ahtKeyDownAfter].NextDownIndex(i) do
    TKeyEvent(FApplicationHandlers[ahtKeyDownAfter][i])(Sender, Key, Shift);
  if WidgetSet.IsHelpKey(Key, Shift) and
     (Widgetset.GetLCLCapability(lcLMHelpSupport) = LCL_CAPABILITY_NO) then
    ShowHelpForObject(Sender);
end;


Mi viene in mente di applicare un Handler di preprocess alla gestione dei tasti ... in prima battuta per mettere solo sotto controllo cosa passa effettivamente ai componenti "alti".
Per poi procedere alla comprensione su come interferire con il normale processo dei messaggi.

Stilgar
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Aprile 16, 2013, 11:44:01 pm
Ciao e grazie della risposta.

Hai per caso un semplice esempio di codice che potrei utilizzare per "mettere sotto controllo" il problema?

Ancora grazie, buona serata,

Stefano
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: Stilgar - Aprile 17, 2013, 11:33:29 am
Non capisco di cosa tu abbia bisogno ...
Basta che tu metta un metodo che non faccia nulla che ti possa aiutare in ottica debug ....


Stilgar
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Luglio 03, 2013, 06:49:44 pm
Un saluto a tutti,

purtroppo il problema è rimasto anche con la versione 1.0.10 di Lazarus. Il bug è ancora, ormai da un anno, in stato "assigned".  >:( E non lo vedo indicato neppure nella roadmap per la versione 1.2.

Purtroppo è la nona versione di Lazarus che presenta questo grave problema. Ho provato a postare anche sul forum ufficiale di Lazarus, ma per ora senza successo.

Nel frattempo ho semplificato al massimo il progetto di esempio, basato su un semplice DB SQLite, in modo che non richieda di installare nulla e posssa essere provato da chiunque.

Qualcuno potrebbe magari provare l'esempio allegato e riprodurre il problema? Almeno per circoscrivere meglio le piattaforme "affette".

Visto il perdurare del problema, se qualcuno avesse un'idea di come riuscirlo in qualche modo a bypassare, glene sarei estremamente grato.

Un grazie infinite per ogni possibile aiuto.

Un saluto a tutti,

Stefano
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: xinyiman - Luglio 13, 2013, 04:41:45 pm
test fatto su ubuntu 13.04 con lazarus 1.0.8 e non funge.

Provato con virtualbox e winzoz e purtroppo la combinazione alt-tab mi cambia da macchina virtuale a reale, quindi non posso testarlo.

Qualche anima pia che ha winzoz e che fa una prova?
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: Legolas - Luglio 13, 2013, 07:17:40 pm
Ho provato io qualche tempo fa: a me sembra funzionare in modo corretto, anche  perché in windows Alt+Tab muove da un'applicazione all'altra, ed è esattamente quello che fa. Altri problemi non mi pare di riscontrarne (Lazarus 1.0.8 su Windows XP)
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: Stilgar - Luglio 13, 2013, 09:03:56 pm
In effetti su Seven ho notato che questo comportamento è presente.
Con la griglia non inserisce i dati.
Per ovviare questo inconveniente, io avevo optato per l'inserimento diretto via SQL ;)
Anche senza fare alt-tab, basta che la finestra perda il focus.
Non ho trovato un workaround ...
Stilgar
Titolo: Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Luglio 15, 2013, 11:22:50 pm
Grazie mille a tutti per le risposte.

Purtroppo ho un progetto molto complesso che fa largo uso di componenti data-aware, DbGrid in primis, e non posso permettermi di riscrivere il codice...  :(

Spero davvero in un intervento dello staff di Lazarus, perché ancora non ho trovato nessun modo per bypassare il problema.

Quello che fatico a capire è come mai sembro essere stato l'unico ad avere evidenziato il problema, quando si tratta di un baco che affligge tutti i progetti multipiattaforma che fanno uso di DbGrid.

Sto tentando di lavorare sulla possibilità di settare la proprietà Visible = False della Form al deactivate, in modo che proprio "scompaia" dalla Taskbar (la proprietà ShowInTaskBar = stNever da sola non basta ad evitare il problema), ma dai primi test sembra che comunque l'Alt+Tab inneschi qualcosa che produce sempre il problema.

L'unica cosa che mi sembra di avere notato è che il problema si presenta solo quando la form viene coperta da un'altra form (sempre dello stesso progetto), mentre in caso di due piccole forms che non si sovrappongono, spontandosi con Alt+Tab il problema sembra non presentarsi.

Sembrano affette quindi le piattaforme Linux/GTK2 e Windows.

Con Linux/QT avevo provato ed il problema sembra non presentarsi, infatti la gestione delle finestre sotto QT è molto diversa, rimangono aperte senza che quelle in secondo piano vengano minimizzate come succede con le GTK2 o WIN32.

Purtroppo con le QT ho poi riscontrato altri bugs della DbGrid, questi bypassati tutti, ma molto gravi tali da suggerire di attendere una maturazione della DbGrid con le QT (del tipo che il Post sposta il record del dataset al primo record...).

Qualsiasi aiuto per potere trovare anche una (piccola) soluzione è sicuramente (molto) bene accetto!

Buona serata a tutti ed ancora grazie di avere provato l'esempio, ora almeno siamo in grado di circoscrivere meglio le piattaforme affette,

Stefano
Titolo: [RISOLTO] Re:TForms: Problemi con Alt + Tab
Inserito da: CortelliStefano - Settembre 24, 2013, 11:33:17 pm
Un saluto a tutti. Bella, bellissima, notizia: oggi il problema è stato risolto dallo staff di Lazarus ed incluso nella r42924 della trunk.  :) :) :)

Un grande grazie in particolare a Jesus Reyes dello staff di Lazarus, che ha risolto il problema: allego la patch per chi (come me) volesse applicarla alla sua versione di Lazarus senza dovere necessariamente installare la svn/trunk.

La patch serve sotto GTk2, l'ho testata sotto Linux/GTK2 con Lazarus 1.0.10 e funziona perfettamente.

Per Windows, con l'interfaccia standard (win32) la patch non serve (il problema riguardava quindi solo la GTK2), ho testato la 1.0.12 di Lazarus (senza patch) su Windows XP, e tutto sembra funzionare correttamente.

In caso di GTK2 su altri sistemi (p.es. GTK2-Windows, ecc.) la patch è invece, presumbilmente, necessaria.

Un saluto a tutta la comunità,

Stefano
Titolo: Re:[RISOLTO] TForms: Problemi con Alt + Tab
Inserito da: Stilgar - Settembre 25, 2013, 04:05:31 pm
Bene
Titolo: Re:[RISOLTO] TForms: Problemi con Alt + Tab
Inserito da: xinyiman - Settembre 25, 2013, 07:46:05 pm
Finalmente :)