Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto su Help

Ciao a tutti,
spero di non essere un po' OT: ho scoperto che sul cd di VB5 c'e' un
programma per sviluppare e compilare file di help (Microsoft Help WorkShop);
pero' sto avendo un sacco di difficolta' ad usarlo, perche' i file con il
testo dell'help sonon richiesti in formato RTF, con all'interno una sacco di
tag per indicare parole chiave, sommario dei contenuti, etc.. e utilizzando
Word (che supporta il RTF) non riesco ad inserirli.
Se qualcuno ha gia' scritto dei file di help, cosa mi consiglia? Devo
imparare la sintassi del RTF e scrivere i miei file con il notepad? O esiste
un editor RTF apposta per i file di help?
Grazie a chi mi aiutera' e ciao,
Alberto


Prova ad usare il Wordpad e' in grado di emettere file in formato RTF e
non rompe come Word.
Ha il difetto pero' di non supportare tutto lo standard RTF sopratutto
per la parte che riguarda i disegni.
Attento pero' che se lavori di cut e paste puo' aggiungere di suo un po'
di comandi di formattazione non voluti, anche all'interno dei tag.
Ti conviene dopo aver preparato il file di verificarlo con un editor di
testo DOS.
Io lo uso per preparare dei file di prototipo per le stampe e in genere
funziona.

funziona.
Grazie per la risposta,
effettivamente l'unico modo con cui sono riuscito a fare quello che volevo
e' stato scrivere i testi con il WordPad, e poi lavorare a mano con il
notepad per sitemare i vari tag.
Adesso pero' ho un altro problema (mi spiace essere pedante, ma non sono
molto esperto di programmazione visuale per windows): sono riuscito a
compilare il mio file di help (.hlp) e i relativi contenuti (.hlp), ma come
faccio a lanciarlo dalla mia applicazione VB? Ho trovato che una volta
impostato HelpFile, premendo F1 l'help viene aperto automaticamente (e ho
trovato anche come farlo context-sensitive), ma non so come farlo partire
dal codice, cioe': ho la voce "guida" in un menu, ma nell'evento on click
cosa devo fare?
Grazie ancora e ciao,
Alberto

Forse ho trovato la soluzione (scusate, potevo pensarci un po' di più prima
di postare la domanda).
Eseguo WinHelp mediante il comando Shell, e gli passo come parametro la path
che ho inserito in app.HelpFile. Cosi' e' giusto? O c'e' un metodo piu'
diretto? E a proposito, WinHelp.exe si trova sempre in c:\window o devo
scrivere una routine che controlli ed eventualmente cerchi tale file?


Se qualcuno ha gia' scritto dei file di help, cosa mi consiglia?
Io finora ho fatto solo piccoli Help ma sempre con Word (2, 6, 97).
Attento:  mi sembra che la versione di Help WorkShop fornita con VB5 ha dei
problemi a lavorare con Word97.
Verifica che sia la versione 4.02.0060 o successive (se ce ne sono).
RTF viene modificato da M$ ad ogni nuova versione di Word (alla faccia dello
standard).
Inoltre, prima di imparare l' RTF, ti consiglio di scaricare il nuovo HTML
Help Workshop, che permette di inserire anche gif animate e sfondi alle
finestre + facilmente.
Ormai con HTML M$ ci fa di tutto (e pensare che non glie ne fregava niente
di internet).
L'indirizzo per il download è in uno dei miei precedenti messaggi.
Ciao
--
-
MIX (VB5SP3)
post...@yahoo.com
80 links ai siti VB
http://space.tin.it/computer/gaais
http://www.tempolibero.com/user/mix/
 (alternativo)
-

finestre + facilmente.
Grazie, andrò a cercare.
Grazie di tutto e ciao,
Alberto

guardati la funzione api WinHelp!
Ringraziando per l'aiuto, approfitto della vostra gentilezza ancora con
alcune domande.
Premetto che non sono molto esperto di progammazione in windows, e non ho
mai utilizzato prima ora le API di Win32. Ho trovato che per utilizzarle
devo recuperare le informazioni da un file allegato con VB5, e dichiarare il
collegamento alla DLL con l'API, nel mio caso:
Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Long,
ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData As Long) As
Long
Ma come faccio a sapere cosa sono i parametri che vuole la funzione
(intuisco solo cosa sia lpHelpFile)?
E a proposito di API: mi era stato detto che la documentazione su di esse
non esiste in forma totalmente completa perchè la MS preferisce tenere
alcune informazioni "segrete"; è vero?
Se non fosse vero, esiste una guida alle API di win32? E' conveniente
studiare ed utilizzare le API (tenendo conto che non sono un programmatore
esperto) e offrono molte più potenzialità delle funzioni di VB?
Grazie a tutti,
Alberto

(intuisco solo cosa sia lpHelpFile)?
Guarda che la cosa più semplice è spararsi un bel F1 utilizzando
SendKeys.
Ciao
--------------------------------------------------------------------
Fulvio Senore
Eliminate "zz" dall'indirizzo e-mail per scrivermi (spammers...)
Remove "zz" from e-mail address to write me (spammers...)
--------------------------------------------------------------------


Sono nuovo del NG, e non conosco tutti gli aspetti della programmazione VB e
Windows, ma posso darti qualche informazione a riguardo delle API (SE HAI
VOGLIA DI LEGGERE TUTTO QUELLO CHE SEGUE che è un po' palloso, ma mi piace
essere il più preciso possibile nel rispondere ad un problema...).
Nell'ultimo anno di programmazione VB ho avuto modo di lavorare parecchio
con le API e spesso mi hanno permesso di trovare gabolare per poter fare
TUTTO quello VB puro non mi consente.
* Le potenzialità delle API espandono il limitato linguaggio VB (soprattutto
dalla ver. 5 in poi, grazie all'operatore AddressOf) quasi ai livelli del
C++, consentendoti di rivoltare windows come più ti pare, quindi incoraggio
vivamente l'utilizzo delle API se si lavora esclusivamente sotto Win (anzi
sono aperto a qualsiasi nuova scoperta sul loro utilizzo).
* Come fare a sapere quali sono le API che fanno al caso tuo è tutta
un'altra storia.
La risposta è: te lo devono dire o lo devi scoprire per caso.
Le dichiarazioni sono reperibili nel file allegato a VB Win32Api.txt (questo
per vb4, ma mi  sembra sia lo stesso anche per le successive ver. a 32bit).
Ve ne sono alcune (ma sono pochissime) di intuibile significato come ad es.
GetCursorPos(pt as PointApi) che assegna alla struttura pt la posizione del
mouse sullo schermo, ma la maggior parte sono piuttosto criptate.
* Libri
Mi hanno suggerito alcuni libri a riguardo, ma anche quelli reputati i
migliori si sono rivelati (nonostante il loro costo non indifferente)
piuttosto incompleti, daltra parte l'argomento è immenso.
La soluzione migliore sarebbe aquistare l'MSDN (MicroSoft Developper
NetWork) una guida su CD a tutte le problematiche Win32 e con una chiara e
dettagliata descrizione di TUTTE le API ufficiali + molte risposte a
problemi e bug dei diversi ambienti di sviluppo.
Attenzione: in MSDN le API sono dichiarate secondo lo standard C, quindi
niente paura se anzichè
------------
    Declare Function DrawEdge Lib "user32" (ByVal hdc As Long, qrc As RECT,
ByVal edge As Long, ByVal grfFlags As Long) As Boolean
------------
vi si trova scritto
    BOOL DrawEdge ( HDC hdc, LPRECT qrc, UINT edge, UINT grfFlags);
------------
Quello che ci interessa è solo la spiegazione dei parametri.
Viene venduto tre formati: "Library subscription", "Professional
Subscription" e "Universal Subscription".
I prezzi delle ultime due versioni sono proibitivi, mentre è quasi
accessibile il primo.
Non so di preciso dove si trovino in vendita, ma prova a guardare
all'indirizzo 
www.eu.microsoft.com/italy/msdn
oppure ad un negozio di rivendita software.
In alternativa ti puoi abbonare ad una rivista di programmazione Win32 o
addirittura una esclusiva per VB (che io sappia ne esiste una sola e solo su
abbonamento) dove l'argomento è largamente trattato.
Non so se posso farne i nomi poichè sarebbe bubblicità, quindi se
seiinteressato ti posso dare ulteriori informazioni per via personale.
* Per iniziare ti posso dire a grandi linee qual'è la filosofia con cui è
steso il file Win32Api.txt
In genere è suddiviso in sezioni in base alla funzione delle Api in essa
contenute
-Vengono prima dichiarate le costanti e le Type usate dalle API descritte da
quel punto in poi, quindi se un'API     richiede un parametro di tipo
specifico, questo è dichiarato più in alto.
- di solito le/(igruppi di) costanti, se sono specifiche di un'API, sono
precedute dal nome (commentato) della funzione che le richiede e se sei
fortunato nel caso in cui la funzione sia ad Es: ShowWindow() le sue
costanti sono SW_xxx.
In genere questo permette di capire a cosa serve il parametro lParam/wParam
di tantissime API.
La denominazione dei parametri delle Api rispecchiano spesso un vecchio ma
pratico modo di programmazione C: il prefisso identifica il tipo del
parametro.
Esempi:
wParam            => w = word;
lParam              => l = longint;
lpszReturned    => lpsz = puntatore ad una stringa;
hWnd                => h =handle;
La convenzione di conversione C/C++ a VB più comuni sono le seguenti:
bool    = boolean (2 bytes);
byte    = byte (1 byte);
dword = long (4 bytes)  - dword sta per double-word;
handle= long (4 bytes); - handle in realtà è una struttura che punta e
descrive ad una zona di memoria.
int        = integer (2 bytes);
longint = long (4 bytes);
lp???? = puntatori ad una struttura o stringa o al primo elemento di un
array.
uint      = integer (2 bytes); - uint sta per unsigned-integer
word    = integer (2 bytes);
float    = non mi ricordo se single o double, propendo per il double.
* Attenzione:    questo aiuta a capira a colpo d'occhio di cosa si sta
parlando, ma occorre attenersi ai typi dichiarati nelle "Declare", quindi
non chiederti perchè wParam è As Long: è così e basta.
* Attenzione:
- Qualche volta viene richiesta come parametro una stringa. Dato che non
esistono API che ritornano una stringa,  valori stringa vengono passati
attraverso i parametri.
Però (e questa scoperta mi è costata parecchi GPF) anche se una stringa è
passata ByVal spesso all'uscita della funzione è cambiata di valore come se
fosse stata passata ByRef, questo perchè (penso) all'interno l'API gioca un
po' con i puntatori alla memoria come piace fare a tutte le funzioni scritte
in C (Windows è scritto prevalentemente in C).
- Se un'API accetta una stringa che deve essere il valore di ritorno, spesso
questa stringa deve essere inizializzata, prima di venire data in pasto alla
funzione e riaccorciata dopo
Esempio:
     'riempio la stringa di caratteri nulli, di una lunghezza sufficente a
contenere il valore di ritorno
    S = String$(MAX_STRING_LENGTH, Chr$(0))
    SLength = APIFunc(S)
    S = Left$(S, SLength)
Questo perchè l'API da brava funzione C richiede una stringa già
dimensionata, l'Api ritorna la sua lunghezza effettivamente impostata, ma
ancora secondo C la stringa è in formato ASCIIZ, cioè Null-terminated, il
che significa che dove il valore della stringa finisce (NON dove finisce
effettivamente la stringa allocata!) c'è un carattere "0" (zero - "/0" in
scritto in C).
Ho usato $ dopo le funzioni Stringa del VB perchè se non esplicitamente
richiesto VB mi torna in realtà un Variant contenente una stringa, con
relativi problemi di tipo e di velocità del codice.
* Attenzione: alcune dichiarazioni sono sbagliate:
Se accettano stringhe come parametri a volte occorre eliminare l'alias o
aggiungerlo ponendo il nome della funzione seguita da una A o una W a
seconda che funzioni secondo le conversioni ANSI o UNICODE.
Esempio: se "Declare lib "user32" StrFunc()" non viene trovata prova con
"Declare lib "user32" Alias"StrFuncA" StrFunc()" o "Declare lib "user32"
Alias "StrFuncW" StrFunc() "
A volte invecie è sbagliata la "Lib": in questo caso prova a sostituirla con
le più comuni che sono "User32", "Gdi32", "Kernel32" e "Shell32".
Sperando di essere stato utile a qualcuno saluto tutti.

Cavolo, hai scritto un libro : )
Grazie tanto dell'aiuto (anche agli altri che mi hanno risposto), mi č stato
molto utile.



In aggiunta a quanto scrive Franco Stefanelli:
M$ ha il vizio di tenere "non documentate" (Undocumented) alcune chiamate ai
propri sistemi operativi.
Ai tempi del DOS le chiamate Undocumented agli interrupt di sistema
(soprattutto al 0x21) erano parecchie, anche se poi si venivano a sapere
(es. la mitica documentazione sugli interrupt di Ralph Brown).
Anche in Windows pare esistano alcune funzioni API non documentate, ma in
numero decisamente inferiore ed, in genere, vengono scoperte in fretta.
Comunque M$ pare (si spera) stia smettendo di usare questi trucchetti idioti
per avere un vantaggio competitivo nelle proprie applicazioni.
--
Roal Zanazzi
z...@iol.it

Sennò non è + programmazione, ma una caccia al tesoro!
Abbastanza d'accordo solo per le notizie nei vari Knowledge Base, ma per
quanto riguarda msdn, ribadisco che non sono d'accordo: msdn è la
documenatzione ufficiale per TUTTI i programmatori Windows. Il fatto che gli
esempi siano in C o C++ non significa nulla: in qualche linguaggio devono
pur essere fatti gli esempi.
Ciao,
Domenico