Newsgroup: it.comp.lang.visual-basic
Titolo: Creare un controllo personalizzato con le API

Secondo voi č possibile creare una finestra con le API (tipo la
CreateWindowEx) e farla vedere a vb come se fosse uno dei suoi controlli
integrati?
Infatti cosě com'č, sembra che VB non riesca ad accettare la finestra che
creo come parte dell'interfaccia. La cosa piů evidente č che non riesce a
gestirne bene il focus, questo causa una serie di problemi nel ciclo dei TAB
e non solo.
Allora ecco che mi chiedevo: forse esiste un modo per far sě che VB
consideri una finestra creata con le API come un semplice controllo
thunder... ho googlato un bel pň, ma ci ho cavato molto poco, se qualcuno ha
qualche idea...

 qualche idea...
Non so se può esserti utile: hai considerato la possibilità di creare la
finestra all'interno di uno usercontrol "vuoto"?
Io ad esempio con questa tecnica ho realizzato un controllo "IP Address".
Difatti in teoria farebbe parte dei common controls standard di Windows
(comctl32.dll dalla 4.71 in poi) ma in pratica non è esposto da nessun OCX
Microsoft Common Controls.
Bye
Raf

 finestra all'interno di uno usercontrol "vuoto"?
Potrebbe andare benissimo, però io avevo provato con un Frame e dava gli
stessi problemi (TAB e Invio gestiti male)... tu che user control hai usato
per farlo?

 ha scritto nel messaggio
news:7pM0g.86295$A83.2...@twister1.libero.it...

Forse mi sono spiegato male: per usercontrol intendevo proprio un controllo
custom, non un qualunque controllo che funga da container.
Poi naturalmente il controllo custom che incapsula la tua finestra lo dovrai
inserire nel form.
Raf

> user control
Mi viene un dubbio... scusami se la domanda č terra-terra, ma che cos'č
un'user control?

 custom, non un qualunque controllo che funga da container.
Infatti mi era venuto il dubbio... molto interessante comunque.

 ha scritto nel messaggio
news:zCM0g.85675$PR2.1...@twister2.libero.it...

Trovo un po' bizzarro il fatto che sembri avere abbastanza padronanza delle
API (CreateWindowEx non è proprio una delle più semplici) ma poi non hai
(forse) mai usato UserControls... =:)
Beh, lieto di averti fatto conoscere un mondo nuovo, allora!
Per curiosità, qual è il tuo scopo finale?
Raf

 inserire nel form.
Però non ho capito una cosa... per creare la mia finestra con la
CreateWindowEx, devo passarle necessariamente l'hWnd di una finestra parent,
che, nel mio caso, era il Form, volendo usare un user control, che, come
avrai capito, sto scoprendo solo adesso (mi cospargo il capo di cenere), non
trovo una simile proprietà, per cui non so cosa passare alla suddetta API...
mi sfugge qualcosa?

 ha scritto nel messaggio
news:tPM0g.86337$A83.2...@twister1.libero.it...

Come non la trovi? Perbacco se c'è UserControl.hWnd! ma naturalmente è
accessibile all'interno del modulo usercontrol, a meno che non decidi di
esporla "al resto del mondo" mediante un'opportuna property.
In ogni caso la creazione della finestra con CreateWindowEx andrebbe fatta
dentro l'usercontrol stesso.
Raf

 Per curiosità, qual è il tuo scopo finale?
In due parole... mi sono scontrato con la limitazione della TextBox che non
consente di contenere più di 32/64KB di dati, per cui sto cercando di creare
una classe che, tramite le sole API, implementi almeno i principali
metodi/proprietà/eventi della TextBox, in maniera da poterla utilizzare in
maniera trasparente nei vecchi progetti.
So che adesso dirai: per questo c'è la RTB, ok, però i programmi su cui
verrebbe utilizzata sono molto light e non hanno setup, per cui preferirei
evitare di utilizzare componenti esterni. Tra l'altro ho già fatto un lavoro
analogo per la ListView, per cui mi sembrava una buona idea. Però il
problema dei TAB non l'ho ancora risolto nè qui nè lì.

 dentro l'usercontrol stesso.
Quindi, se ho capito bene, in pratica l'usercontrol č una specie di
placeholder per far sě che vb lo possa vedere e identificare come uno dei
suoi controlli... ottimo!

 ha scritto nel messaggio
news:2YM0g.86352$A83.2...@twister1.libero.it...

In questo caso puoi fare a meno di CreateWindowEx e di usercontrol (se
vuoi), almeno sotto windows NT/2K/XP.
Infatti in questi SO il textbox semplice ha un limite ben più elevato dei
64K caratteri: circa 2GB (7FFFFFFE).
Il problema è che quando si imposta il contenuto mediante la proprietà Text
del controllo VB6 questo viene troncato a 65535 caratteri.
Lo stratagemma è usare invece la proprietà SelText.
Invece di
    Text1.Text = VeryLargeString
fai
    With Text1
        .SelStart = 0
        .SelLength = Len(.Text)
        .SelText = VeryLargeString
    End With
Provare per credere!
Con Win9x invece temo che non ci sia modo, neanche creando una finestra di
tipo "Edit" con la createwindowEx, in quanto è proprio il SO a supportare al
massimo 65535 caratteri. Devi usare un RTB o simulare l'edit box
graficamente (ma è tutt'altro che semplice).
Raf

 Provare per credere!
NOOOOOOOOOO!!!!!!!!!! Era cosě semplice!!!!!!!!!! Due giorni di lavoro
*completamente* inutile!!!!

 ha scritto nel messaggio
news:zyN0g.85726$PR2.1...@twister2.libero.it...

Non poi cosě inutile: considera che hai avuto modo di "scoprire" gli
usercontrols! ;-)
Bye
Raf

> Non poi cosģ inutile: considera che hai avuto modo di "scoprire" gli
usercontrols! ;-)
Infatti mi sto consolando con questo... Ormai il lavoro che ho fatto lo
tengo (anche se non serve a niente) e proverņ a farlo funzionare con un user
control cosģ ne approfitto per studiarmeli un pņ.
Addirittura, se non ho capito male, č inutile creare una classe e poi
utilizzare l'usercontrol come wrapper, tanto vale mettere tutto dentro
l'usercontrol... ottimo!

 l'usercontrol... ottimo!
Proprio così... un usercontrol *è* una classe, particolare poiché dotata di
interfaccia utente.
Con questi puoi crearti librerie (OCX) di controlli personalizzati, e non
solo usarli "internamente" ad un progetto exe standard.
Mi fermo qui, non vorrei "rovinarti" il piacere di ulteriori scoperte!
Ciao
Raf

 interfaccia utente.
E confermo che ora funziona tutto alla grande!!! :-)))