Autore Topic: Aiuto user control  (Letto 2110 volte)

Offline zapp.branningan

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Aiuto user control
« il: 27 Aprile 2012, 21:04:12 »
Salve a tutti, questo è il mio primo post ed inizio subito con un domandone:

Sono appena arrivato a gambas dopo aver fatto anni con VB6, mi ci trovo decisamente bene e apprezzo la linearità e la coerenza del linguaggio, solo una cosa mi sembra estremamente macchinosa:
La creazione di controlli utente, ho seguito le due pagine del wiki ma purtroppo non ne esco vivo, ovvero riesco a relaizzare il componente frambox ma se parto da 0 con un mio componente ho questo problema:
Ho sempre utilizzato un componente che mi ero scritto in vb6 chiamato LabeledTextBox colto comodo per piazzare veocemente sui form delle caselle di testo con allegata una label, quando tento però di realizzare questo su gambas mi trovo con un controllo vuoto, ovvero realizzo il form contenete i due oggetti grafici (label + texbox) entrambi contenuti in una drawing area, ma una volta piazzato il controllo nel form di test non visualizzo che il contorno, e quando faccio partire il programma visualizzo un form vuoto, nonostante seguendone il flusso vedo che le proprietà vangono correttamente inizializzate ed il codice non da nessun errore, vi allego quel poco che ho scritto, con le due semplici proprietà che permettono di settare il testo della label e della texbox nella speranza che qualcuno mi indichi cosa stia sbagliando.:

questo è il file LabeledTextBox.class
Codice: [Seleziona]
Export
Inherits UserControl

Public Const _Properties As String = "*,Text,LabelText"
Public Const _Group As String = "Form"
Public Const _Size As String = "150,36"

Property Text As String
Property LabelText As String
Private Obs As Observer
Private F As FLabeledTextBox

Public Sub _new()
 
  Obs = New Observer(Me) As "Event"
  F = New FLabeledTextBox
  F.SetText(Me.Name)
End

Private Function Text_Read() As String
  Return F.GetText()
End

Private Sub Text_Write(Value As String)
  F.SetText(Value)
End

Private Function LabelText_Read() As String
  Return F.GetLabelText()
End

Private Sub LabelText_Write(Value As String)
  F.SetLabelText(Value)
End


Questo è il file FlabeledTextBox.class
Codice: [Seleziona]
Private $LabelText As String
Private $Text As String

Public Sub SetText(Value As String)
  $Text = Value
  Me.TextBox1.Text = Value
  Me.DrawingArea1.Refresh()
End

Public Function GetText() As String
  Return $Text
End

Public Sub SetLabelText(Value As String)
  $LabelText = Value
  Me.Label1.Text = Value
  Me.DrawingArea1.Refresh()
End

Public Function GetLabelText() As String
  Return $LabelText
End

Public Sub DrawingArea1_Draw()
  Me.Label1.Refresh
  Me.TextBox1.Refresh
  Paint.Begin(Me.DrawingArea1)
  Paint.End

End


ringrazio tutti anticipatamente.

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Aiuto user control
« Risposta #1 il: 27 Aprile 2012, 23:02:18 »
Ciao e benvenuto nella microcomunità... emmm nella comunità di Gambas-it... (qui siam tutti un po' su con l'età vedo :) )

Puoi postare i sorgenti dell'intero progetto del tuo componente?... volevo dare un'occhiata anche al form...

Offline zapp.branningan

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Aiuto user control
« Risposta #2 il: 27 Aprile 2012, 23:09:43 »
volentieri, ma come faccio a postare il sorgente del form? in vb6 era un file di testo leggibile ma in gambas non mi sembra, almeno credo..

PS: Grazie per il caloroso benvenuto!

Offline zapp.branningan

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Aiuto user control
« Risposta #3 il: 27 Aprile 2012, 23:12:54 »
Mi do del cretino da solo: non mi ero accorto che i files .form sono puro testo, ecco il codice del form:
Codice: [Seleziona]
# Gambas Form File 3.0

{ Form Form
  MoveScaled(0,0,64,12)
  Arrangement = Arrange.Fill
  { !DrawingArea1 DrawingArea
    MoveScaled(2,4,51,7)
    #Public = True
    Expand = True
    { !TextBox1 TextBox
      MoveScaled(8,1,38,5)
      #Public = True
    }
    { !Label1 Label
      MoveScaled(1,2,13,3)
      #Public = True
      AutoResize = True
    }
  }
}

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Aiuto user control
« Risposta #4 il: 27 Aprile 2012, 23:20:19 »
Mi do del cretino da solo: non mi ero accorto che i files .form sono puro testo, ecco il codice del form:

Potresti, invece, allegare al tuo messaggio il sorgente del programmino (come ha suggerito Milio):
1) clicca su "Risposta", come se volessi scrivere una risposta al messaggio;
2) quando sei nella pagina "Rispondi al messaggio" (dove appunto scrivi il tuo messaggio) clicca a sinistra su: "Opzioni aggiuntive";
3) clicca quindi sul tasto "Browse..."
« Ultima modifica: 27 Aprile 2012, 23:22:53 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 zapp.branningan

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Aiuto user control
« Risposta #5 il: 27 Aprile 2012, 23:25:38 »
Grazie del consiglio, ecco il file compresso dell'intera cartella, era questo quello che mi indicavi di fare, giusto?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Aiuto user control
« Risposta #6 il: 27 Aprile 2012, 23:27:25 »
Grazie del consiglio, ecco il file compresso dell'intera cartella, era questo quello che mi indicavi di fare, giusto?

Sì.
Ora gli utenti iscritti a questo forum possono scaricare il file del sorgente; quindi visionarlo e provarlo.

 :ciao:
« 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 milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Aiuto user control
« Risposta #7 il: 28 Aprile 2012, 00:44:26 »
Eccoci...

Guarda se e' questo che volevi ottenere...

Offline zapp.branningan

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Aiuto user control
« Risposta #8 il: 28 Aprile 2012, 11:27:18 »
SI MILIO, SI!!!!!!

domanda: non mi sembra di vedere differenze nel codice, mentre nel form hai eliminato la drawind area (ed il relativo codice ovviemente) cosa sbabliavo? quali sono le linee guida generali per un componente grafico che nasca dalla combinazione di vari componenti grafici esistenti?

GRAZIE 1k

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Aiuto user control
« Risposta #9 il: 28 Aprile 2012, 21:55:48 »
La DrawingArea l'ho eliminata semplicemente perche' non le hai fatto fare assolutamente nulla :)

Il componente era praticamente vuoto perche' avevi creato la Form FlabeledTextBox senza assegnargli il contenitore genitore (Option Parent As Control):

Property LabelText As String
Private Obs As Observer
Private F As FLabeledTextBox

Public Sub _new()
 
  Obs = New Observer(Me) As "Event"
  F = New FLabeledTextBox(Me)
  F.SetText(Me.Name)
End

Offline zapp.branningan

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Aiuto user control
« Risposta #10 il: 29 Aprile 2012, 11:40:47 »
MA OVVIO!!!!!

devi perdonarmi ma purtroppo debbo ancora scrollarmi di dosso tanti concetti del VB6 la cui gestione degli ogetti è quanto mai deficitaria!

Visto che ormai ho superato la vergogna di fare domande ne pongo un'altra sempre relativa agli usercontrol:
Quando disegno il form, piazzando il mio controllo custom, questo viene disegnato tramite il solo contorno, so che impostando la costante "_DrawWith" posso indicare un controllo "nativo" con su rappresentare il mio, ma in questo caso la tecnica è deficitaria in quanto il mio, come altri controlli composti, avrebbero bisogno di essere rappresentati correttamente per riuscire ad essere utilizzati, dove trovo la documentazione per quasta cosa?

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Aiuto user control
« Risposta #11 il: 29 Aprile 2012, 11:59:51 »
Documentazione? bho...  :rolleyes:

A parte gli scherzi, dando un'occhiata ai sorgenti di Gambas3, nella classe CControl, Function CreateControl sembrerebbe che se la collezione di oggetti che vai ha creare e' regolarmente installato come componente di gambas nel tuo sistema viene creato nell'Editor di Form come un normale oggetto nativo...

Bisogna provare pero'... :)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Aiuto user control
« Risposta #12 il: 30 Aprile 2012, 11:01:29 »
In effetti funziona, ma tutta la fase di installazione è alquanto fumosa e arzigogolata, almeno a mio avviso.

Nell doc ufficiale ci sono i passi da seguire...

Offline zapp.branningan

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Aiuto user control
« Risposta #13 il: 30 Aprile 2012, 18:24:09 »
allora, dai pochissimi test che ho potuto effettuatuare, la costante _DrawWith si può utilizzare esclusivamente con controlli "nativi" se la si lascia in bianco nell'editor non compare che il "contorno" del controllo.

mi sembra però di capire che se installo il controllo in modo che sia disponibile per gli altri progetti il tutto dovrebbe funzionare come vorrei, solo che non trovo traccia nella "documentazione" di come si installino i controlli, ora provo a googolare un po', che strazio però, Gambas è bellissimo ma la documentazione è assolutamente inadeguata, è un vero peccato perchè vista la platea di (ormai ex) programmatori VB6 il progetto potrebbe diventare veramente qualcosa di interessante!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Aiuto user control
« Risposta #14 il: 02 Maggio 2012, 10:41:13 »
Sulla documentazione a corredo ti dò perfettamente ragione, ed è stato il punto per molte discussioni anche qui nel forum.

Ad ogni modo, il forum stesso ti può dare una mano, alcuni di noi ci hanno sbattuto già le corna...

Riguardo alla visualizzazione dell'oggetto, in effetti la proprietà DrawWith definisce l'oggetto, preso appunto da quelli base di Gambas, e come viene visualizzato nell'editor. La cosa ovviamente lascia un pò basiti, perchè il tuo oggetto di solito presenta caratteristiche diverse e magari più specializzate.
Nel caso il tuo oggetto sia visibile come un insieme di classici oggetti gambas, la cosa può andare bene.
Ad ogni modo, il problema si presenta solo in fase di disegno, e la visualizzazione dell'oggetto serve solo per posizionarlo nel contesto grafico.
Probabilmente in futuro verrà implementata una logica più carina, ma al momento è così...   :-\