Per dubbi, consigli o richieste, potete mandare un'e-mail ad Andrea Carolfi.
Ringraziamo Amiga Transactor Mailing List per questo tangibile contributo!
Procedure e funzioni sulle finestre Cominciamo a vedere quelle riguardanti alle finestre:
Quasi tutte queste funzioni, spiegano la loro funzione con il loro nome,
ma vediamole nel dettaglio: La SetWindowTitles, imposta il titolo della finestra e dello
schermo, quando questa finestra è selezionata. Se vogliamo modificare
solo uno dei due senza toccare l'altro è sufficente passare come
parametro -1, cioè: WindowToBack, WindowToFront e ActivateWindow, mi sembrano sufficentemente chiare e non credo necessitano di ulteriori spiegazioni. Un discorso a parte, meritano MoveWindow, SizeWindow e
ChangeWindowBox. Invece, la ChangeWindowBox, deve essere chiamata in questo modo
(ad esempio): La PrintIText, serve per visualizzare del testo su una finestra
(una specie di printf() grafica). Specificando un font già aperto da
usare (spiegheremo più avanti come fare per aprire un font) tramite la
struttura IntuiText visualizzerà il testo specificato alla
posizione specificata. struct IntuiText testo2 = {2,0,JAM1,NULL,10,NULL,"Testo di prova2",NULL}; struct IntuiText testo1 = {1,0,JAM1,NULL,NULL,NULL,"Testo di prova1",&testo2}; [...] PrintIText(win -> RPort,&testo1,10,30);
visualizzerà il primo testo con il colore 1, alla posizione 10, 30 ed
il secondo testo con il colore 2, alla posizione 10, 40. Infine, la MoveWindowInFrontOf è una versione un pò più flessibile di WindowToBack e WindowToFront. E' possibile posizionare la nostra finestra sopra un'altra avendo a disposizione il suo puntatore. Procedure sugli schermi Vediamo adesso alcune procedure aggiuntive sugli schermi:
Le varie ToBack e ToFront, servono per portare uno schermo o il Workbench in primo piano o sullo sfondo. Mentre la MoveScreen serve per posizionare lo schermo (dragging). A partire dalla versione 2.0 del SO, è possibile specificare anche l'ascissa, mentre le versioni precedenti richiedevano che il bordo sinistro dello schermo fosse sempre a zero. Anche quì, come nella MoveWindow le coordinate sono relative e non assolute. Requester Vediamo adesso come poter segnalare un errore o un messaggio all'utente
tramite un requester. LONG EasyRequestArgs( struct Window *window, struct EasyStruct *easyStruct, ULONG *idcmpPtr, APTR args ); LONG EasyRequest( struct Window *window, struct EasyStruct *easyStruct, ULONG *idcmpPtr, ... ); struct EasyStruct { ULONG es_StructSize; /* should be sizeof (struct EasyStruct )*/ ULONG es_Flags; /* should be 0 for now */ UBYTE *es_Title; /* title of requester window */ UBYTE *es_TextFormat; /* 'printf' style formatting string */ UBYTE *es_GadgetFormat; /* 'printf' style formatting string */ }; Questa funzione, restituisce il numero di bottone che l'utente ha premuto. Questi sono numerati a partire da 0 (che è l'ultimo a destra considerato come risposta negativa) fino ad n. Vediamo un esempio: struct EasyStruct ES = { sizeof(struct EasyStruct), 0, "Messaggio di errore" "Impossibile aprire il file %s!\n", "Ok" }; [...] EasyRequest(win,&ES,NULL,nomefile); Oltre ad una chiamata così semplice, è possibile impostare degli IDCMP che possano far cancellare il requester (ad esempio sulla richesta di un disco) e specificare più di un parametro e più di un bottone (separandoli da un |, cioè "Ok|Riprova|Annulla"). Sempre negli autodoc c'è un listato di esempio più alcuni riferimenti ad altre funzioni che possono compiere lo stesso compito. Quale la BuiltEasyRequest. A tal proposito, merita di essere mostrato in questa sede un sorgente di esempio che mostra come visualizzare un requester che non blocca l'applicazione che l'ha chiamata, tramite l'uso della funzione SysReqHandler. Vediamolo: window = BuildEasyRequest( ... ); // Rispetto alla EasyRequestArgs restituisce // il ptr alla finestra del requester. while((retval = SysReqHandler(window,idcmp_ptr,TRUE)) == -2) { / * loop */ } FreeSysRequest(window);
|