Autore Topic: scrollview  (Letto 275 volte)

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
scrollview
« il: 03 Ottobre 2016, 21:28:52 »
Ciao sono alle solite con una delle mie domande, non riesco a capire il comportamento della scrollview nel seguente codice creo una DrawingArea e viene numerata, ma quando le DrawingArea superano i margini della Scrollview tutte le DrawingArea cambiano numerazione.
Codice: [Seleziona]
Public Sub nuovo_pic()
Dim area As DrawingArea
  area = New DrawingArea(Scr) As "HPic"
  Pic.Add(area)
  Pic[Pic.Max].Move(40, 5 + (50 * Pic.Max), 595, 40)
  Pic[Pic.Max].X = (Scr.Width - Pic[Pic.Max].W) / 2
  Pic[Pic.Max].Background = &00FFFFFF 
  Pic[Pic.Max].Border = Border.Plain
  Pic[Pic.Max].Tag = Pic.Max
 
  page = Pic.Count
End

Public Sub HPic_Draw()
Paint.Begin(Last)

    Paint.Font.Name = "Arial"
    Paint.Font.Size = 16
    Paint.DrawText("Pagina N°" & page, 300, 20)

Paint.Fill()
Paint.End()

End


grazie  ;D ;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.262
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:scrollview
« Risposta #1 il: 04 Ottobre 2016, 02:16:59 »
Effettivamente si scatena l'evento HPic_Draw() non solo ogniqualvolta - come hai fatto notare tu - le DrawingArea superano i margini della Scrollview, ma anche quando viene manualmente modificata la dimensione del Form.
Non so perché accada ciò.    :-\

Poiché l'identificatore (HPic) del Gruppo di eventi è comune a tutte le DrawingArea, presenti nella variabile vettoriale di tipo DrawingArea, la sollevazione dell'evento HPic_Draw() coinvolge l'una dopo l'altra tutte le DrawingArea fino ad allora create. Questa è la circostanza che causa l'attribuzione del medesimo numero (dell'ultima DrawingArea generata) a tutte le DrawingArea presenti sul Form.


Puoi, comunque, ovviare al problema da te sollevato apportando queste due modifiche al codice:
1) assegnando il valore corrente di Pic.Count a Pic[Pic.Max].Tag:
 
Codice: [Seleziona]
Pic[Pic.Max].Tag = Pic.Count
Pertanto la riga page = Pic.Count può essere tolta (se tale assegnazione non serve in altra parte del codice);

2) sostituire la proprietà Last.Tag alla variabile page al primo argomento del Metodo .DrawText dell'oggetto Paint:
 
Codice: [Seleziona]
Paint.DrawText("Pagina N°" & Last.Tag, 300, 20)

La riga Paint.Begin(Last) non risulta indispensabile.


« Ultima modifica: 04 Ottobre 2016, 10:03:58 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.149
  • Tonno verde
    • Mostra profilo
Re:scrollview
« Risposta #2 il: 04 Ottobre 2016, 11:49:42 »
Guardando all'ottimo suggerimento di vuott, mi è venuto da pensare che in effetti la proprietà Tag può contenere qualunque dato (variant) e ne può contenere anche tanti ad esempio usando una matrice.
Quindi forse hai risolto, visto che penso dovrai inserirci dentro parecchie informazioni se non ti vorrai ritrovare con le ultime in tutte le pagine,.

Se l'esempio allegato è solo una spartana rappresentazione del problema ok, altrimenti ti consiglio di studiare bene il layout delle finestre, leggi il suggerimento datomi a suo tempo da sotema magari guarda come è costruita la finestra nell'esempio che ho postato sulla Software farm (DinamicMatrixExample in Esempi) dove ho cercato di tenere conto di quei suggerimenti.

 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:scrollview
« Risposta #3 il: 04 Ottobre 2016, 20:52:04 »
grazie Vuott per la dritta, e grazie a Gianluigi per il suggerimento che ha capito il mio problema ovvero scrivere una serie di dati in una DrawingArea
Codice: [Seleziona]

Public Sub nuovo_pic()
Dim area As DrawingArea
  area = New DrawingArea(Scr) As "HPic"
 
  Pic.Add(area)
  Pic[Pic.Max].Move(40, 5 + (850 * Pic.Max), 595, 840)
  Pic[Pic.Max].X = (Scr.Width - Pic[Pic.Max].W) / 2
  Pic[Pic.Max].Background = &00FFFFFF
  Pic[Pic.Max].Name = Pic.Count
  Pic[Pic.Max].Border = Border.Plain
  Pic[Pic.Max].Tag = Pic.Count
 
  Print Pic[Pic.Max].Name
 
End

Public Sub HPic_Draw()
Dim i As Integer

acapo = 0 

    Paint.Font.Name = "Arial"
    Paint.Font.Size = 8
    Paint.DrawText("Pagina N°" & Last.Tag, 300, 10)
   
 For i = b To 150
     
    Paint.DrawText("CIAO Linea " & i, 40, acapo)
 
    If acapo = 840 Then        ' viene creata nuova pagina quando sono arrivato al margine inferiore' 
      b = i
      nuovo_pic
      acapo = 0
     
    Endif
     
    acapo = acapo + 12

Next
Print b

Paint.Fill()
Paint.End()

End


infatti in questo codice viene visualizzato solo l'ultima parte del ciclo for/next   :D :D :ciao: :ciao:
« Ultima modifica: 04 Ottobre 2016, 20:57:19 da naderit »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.149
  • Tonno verde
    • Mostra profilo
Re:scrollview
« Risposta #4 il: 04 Ottobre 2016, 22:11:54 »
 :violent: Naderit,
sei un fenomeno.   :D :D
Ma come, sfruttando l'idea di vuott, ti ho appena suggerito di salvare in qualche modo i dati in Tag attraverso una matrice (dove magari memorizzi il path di un file di testo che contiene i dati veri e propri della pagina) e tu fai esattamente il contrario. :rotfl: :rotfl:
 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:scrollview
« Risposta #5 il: 05 Ottobre 2016, 20:28:21 »
eeh bhe mi impegno seriamente  ;D ;D ;D :2birre: