PBToolboxAI v4 ← Site

commandpalette — n_pbt_commandpalette #

← Riferimento dei componenti · Sommario della guida

Palette dei comandi: l'utente preme una combinazione, digita tre lettere e raggiunge qualsiasi azione della sua applicazione — senza cercarla nei menu.

▶ Vederlo dal vivo — Applicazione dimostrativa, riquadro Command palette: l'anteprima, il codice che lo produce e questa pagina, affiancati.


In breve #

Oggetton_pbt_commandpalette — non visuale: niente da posare nella finestra
Serve aRendere ogni azione dell'applicazione raggiungibile da tastiera, in tre lettere
RitornoNon bloccante: of_open() restituisce subito il controllo; la scelta torna come evento

La palette è una finestra staccata, tutta sua: fluttua sopra l'applicazione, prende il fuoco per il tempo in cui l'utente digita e lo restituisce chiudendosi.


Avvio rapido #

// Una volta, all'avvio : le azioni della sua applicazione
inv_palette.ipo_owner = this
inv_palette.of_add_command(/*key*/ "new",  /*label*/ "N", /*group*/ "F")
inv_palette.of_add_command(/*key*/ "open", /*label*/ "O", /*group*/ "F")
inv_palette.of_add_command(/*key*/ "save", /*label*/ "S", /*group*/ "F")
inv_palette.of_register_shortcut()
// event ue_command_selected : (string as_key)
choose case as_key
	case "new";  of_new()
	case "open"; of_open()
	case "save"; of_save()
end choose

Il collegamento: la finestra ospite #

La palette è un oggetto non visuale, ma non hai alcun ricevitore né messaggio da collegare: imposta ipo_owner sulla tua finestra, e la palette preleva da sola i suoi eventi e li solleva su quell'oggetto.

Due righe, una volta sola, all'apertura della finestra:

// La finestra a cui la palette appartiene
inv_palette.ipo_owner = this

// La palette deve rispondere al suo tasto
inv_palette.of_register_shortcut()

È tutto ciò che c'è da collegare. La scelta dell'utente, l'apertura e la chiusura le tornano poi come semplici eventi su ipo_owner — nessun ricevitore, nessun messaggio da mappare, nessun timer.


La combinazione: è la DLL a sentirla #

La combinazione che apre la palette non è ascoltata dalla pagina: è registrata presso la DLL, la sola a vedere i tasti premuti mentre il fuoco è su un altro controllo. È tutta la differenza fra una palette che si trova e una che risponde solo dopo averci cliccato sopra.

La DLL sente la combinazione, ma non apre nulla da sé: la avverte con ue_shortcut, e decide lei. Una palette che si apre sopra una finestra modale non aiuterebbe nessuno.

// event ue_shortcut : il tasto e caduto
if not ib_dialog_open then inv_palette.of_open()

is_shortcut sceglie la combinazione; of_register_shortcut() la consegna. La chiami una volta all'apertura della finestra — altrimenti la palette risponde al suo tasto solo dopo essere già stata aperta una volta. of_open la riconsegna al passaggio, quindi una combinazione cambiata dopo non richiede altro.

// La combinazione dell'abitudine, quella degli editor di codice
inv_palette.is_shortcut = inv_palette.SHORTCUT_DEFAULT

// Oppure la sua
inv_palette.is_shortcut = "ctrl+shift+p"

// Oppure nessuna : la palette si apre solo con of_open()
inv_palette.is_shortcut = inv_palette.SHORTCUT_NONE

La combinazione della palette viene consultata solo dopo le scorciatoie degli altri componenti della finestra, con o senza fuoco: un pulsante di barra degli strumenti sulla stessa combinazione vince. La combinazione di questa finestra passa prima di una registrata senza ipo_owner (tutta l'applicazione). Sono accettati solo i tasti che l'hook sa nominare — lettere, cifre, da F1 a F24, Invio, Esc, Canc, Ins, Home, Fine, PgSu, PgGiù e, con Ctrl o Alt, le frecce, Spazio, Tab, Backspace, + - , .; ogni altro restituisce -5. Il capitolo tastiera lo dettaglia.


Dove appare la palette #

is_position dice dove si posa la finestra. Viene sempre riportata dentro lo schermo: una palette ancorata sotto un campo in fondo alla finestra non sparisce dietro la barra delle applicazioni.

CostanteDove
POSITION_WINDOW_CENTERCentrata su ipo_owner — il valore predefinito, e ciò che l'occhio si aspetta
POSITION_SCREEN_CENTERCentrata sullo schermo, qualunque sia la finestra
POSITION_ABSOLUTEA il_x / il_y, in pixel schermo

PowerBuilder lavora in PBU, e la posizione di un controllo è relativa alla sua finestra: per ancorare la palette sotto un controllo, of_anchor_under(controllo) fa la conversione e imposta le tre proprietà. Su due schermi, si apre sullo schermo del punto richiesto.

La sua altezza segue il numero di comandi mostrati e si riduce man mano che si filtra — senza che l'angolo superiore si sposti, altrimenti la casella di ricerca scivolerebbe via sotto le dita. È limitata a metà schermo: oltre, la lista scorre all'interno e la casella di ricerca resta in alto.

Un clic altrove nell'applicazione chiude la palette, e quel clic raggiunge comunque il suo bersaglio — come uscendo da un menu. Non c'è nulla da fare.


Proprietà #

ProprietàTipoPredefinitoRuolo
ipo_ownerpowerobject—La finestra a cui la palette appartiene: possiede la finestra popup e le fa da ancora, la sua combinazione risponde in quella finestra, e gli eventi della palette vengono sollevati su di essa. Da impostare prima di of_open — è l'unico collegamento da fare. Lasciata vuota, la combinazione risponde in tutte le finestre dell'applicazione. Due oggetti palette sulla stessa finestra mantengono ciascuno la propria combinazione e i propri eventi: nessuno riceve quelli dell'altro
ipo_receiverpowerobject—Opzionale, retaggio: un oggetto visuale distinto su cui consegnare gli eventi, al posto di ipo_owner — è anche l'unica finestra il cui pbm_custom02 viene suonato a ogni evento. Lo lasci vuoto — la palette ora consegna i suoi eventi da sola tramite ipo_owner
is_shortcutstring"ctrl+k"Combinazione che apre la palette, da ovunque nella finestra. Costanti SHORTCUT_DEFAULT (ctrl+k) e SHORTCUT_NONE (nessuna). Ha effetto con of_register_shortcut
is_positionstringwindow-centerDove si posa la finestra (costanti POSITION_*)
il_x · il_ylong0Posizione in pixel schermo, letta solo da POSITION_ABSOLUTE
is_placeholderstring""Testo grigio nella casella di ricerca finché non si digita nulla
is_recentstring""Memoria d'uso: gli id lanciati più di recente, dal più recente, separati da virgole. La palette li porta in cima, e la recenza dirime i pari merito durante il filtraggio — non ribalta mai la pertinenza. Rileggetela dopo l'uso e conservatela, rimettetela all'avvio. Una palette che riparte vuota ogni mattina non impara nulla
il_max_recentlong8Quante ne tiene il blocco « Usati di recente ». 8 per impostazione predefinita. 0 lo spegne: un'applicazione i cui utenti preferiscono vedere i gruppi intatti può dirlo. Una voce del blocco resta nel suo gruppo e ne porta il nome — una scorciatoia non sposta ciò che abbrevia

Metodi #

MetodoRuolo
of_add_command (string as_key, string as_label, string as_group)Dichiara un'azione: il suo identificatore, la sua etichetta e il gruppo sotto cui appare. Restituisce 0 una volta aggiunta, -5 se la chiave è vuota, contiene /, ` o una virgola (is_recent` è un elenco separato da virgole), o è già presa. Decine di migliaia di comandi restano fluidi: la palette disegna solo le righe visibili
of_add_command (string as_key, string as_label, string as_group, string as_hint, string as_shortcut, string as_keywords)Lo stesso, con la spiegazione a destra, la combinazione da mostrare, che lancia il suo comando finché la palette è aperta — è così che la si impara ; fuori, la sua applicazione conserva i propri acceleratori, e durante la digitazione Ctrl+C, Ctrl+V, Ctrl+Z e Ctrl+A restano alla casella di ricerca — e parole chiave che la ricerca legge senza mostrarle. Restituisce 0 una volta aggiunta, -5 se la chiave è vuota, contiene /, ` o una virgola (is_recent` è un elenco separato da virgole), o è già presa
of_insert_command (string as_key, string as_label, string as_group, integer ai_index)Dichiara un'azione a un rango scelto (1 = in testa) invece che alla fine: un modulo condiviso mette i suoi comandi dove devono stare. 0 o meno, o oltre la fine, aggiunge in coda. Spiegazione, combinazione, parole chiave e icona si impostano poi con of_command. Restituisce 0 una volta aggiunta, -5 per le stesse chiavi di of_add_command
of_remove_command (string as_key)Toglie un'azione; le altre restano. Restituisce 0 una volta tolta, -5 se nessun comando ha quella chiave
of_command (string as_key) → n_pbt_commandpalette_commandL'handle di un comando, per rinominarlo, cambiarne la combinazione, ingrigirlo o nasconderlo tramite le sue proprietà. Ingrigire invece di togliere: togliere ciò che l'utente non può fare ora gli toglie anche ogni possibilità di scoprire che esiste. Lo stato viaggia con i comandi: una modifica fatta a palette aperta si vede all'apertura successiva
of_key ( ) → stringSull'handle che of_command restituisce: la chiave del comando che designa — ciò che of_command ha ricevuto per ottenerlo, e ciò che si conserva quando l'handle passa di mano in mano
of_clear_commands ( )Svuota la palette. Restituisce 0
of_count ( ) → longRestituisce il numero di comandi che porta la palette
of_keys_at ( long al_index ) → stringL'identificatore del comando di rango al_index (a partire da 1), oppure "" oltre l'uno o l'altro estremo. Con of_count, è ciò che permette di percorrere una palette che non si è riempita da sé — un modulo condiviso vi aggiunge i propri
of_has ( string as_key ) → booleanEsiste un comando sotto questo identificatore? Chiedere è meglio che indovinare: of_add_command rifiuta (-5) un identificatore già preso
of_anchor_under ( dragobject ado_control )Ancora la palette sotto un controllo — un campo, un pulsante: imposta is_position a POSITION_ABSOLUTE e il_x / il_y sull'angolo in basso a sinistra del controllo, in pixel schermo. Da chiamare prima di of_open; la palette resta riportata dentro lo schermo. Restituisce 0, o -5 se il controllo non è valido
of_open ( )Apre la palette: una finestra tutta sua, posseduta da ipo_owner, posta da is_position. Prende il fuoco e lo restituisce chiudendosi. Restituisce 0 una volta richiesta — segue sempre ue_opened (a schermo) o ue_closed (con il motivo per cui non è apparsa) —, -6 se manca il runtime WebView2, -4 se la sua finestra non ha potuto essere creata
of_is_open ( )VERO finché la palette è a schermo. È questo che permette alla combinazione di commutare: premuta una seconda volta una palette si chiude — richiamare of_open distruggerebbe la finestra per ricostruirla identica, il che si vede come uno sfarfallio, non come una chiusura. La DLL continua a non decidere nulla: informa. Una volta aperta, la palette tiene il fuoco nella propria finestra: la combinazione premuta lì la richiude da sola. Risponde per la palette di questo oggetto: quando un altro oggetto palette apre la propria, sostituisce questa e of_is_open risponde FALSO qui
of_close ( )Richiude la palette aperta da questo oggetto — mai quella aperta nel frattempo da un altro oggetto palette. Anche perdere il fuoco la chiude, come un menu. Restituisce 0
of_register_shortcut ( )Consegna la combinazione di is_shortcut alla DLL. Da chiamare una volta all'apertura della finestra. Una sola combinazione per oggetto palette: richiamarla dopo aver cambiato is_shortcut sostituisce la precedente, che smette subito di rispondere — non c'è mai nulla da togliere prima. Restituisce 0 se posata, 1 se ne ha sostituita una, 2 se un is_shortcut vuoto non lascia alcuna combinazione (tolta, o non ce n'era), -5 se il tasto è uno di quelli che l'hook non vede (vedi sopra) — la combinazione precedente resta allora in vigore. Senza ipo_owner, la combinazione risponde in tutte le finestre dell'applicazione. Due oggetti palette di una stessa finestra mantengono ciascuno la propria; la stessa combinazione registrata da un secondo oggetto passa a quest'ultimo (1). Distruggere l'oggetto toglie la sua combinazione — mai quella tenuta da un altro oggetto palette
of_process_events ( )Preleva gli eventi in attesa e li solleva su ipo_owner. Il componente la chiama da solo finché la palette vive: normalmente non devi farlo
of_reset ( )Svuota i comandi e la memoria d'uso (is_recent), riporta le proprietà ai valori predefiniti, richiude una palette aperta e riporta una combinazione registrata a SHORTCUT_DEFAULT. ipo_owner e ipo_receiver restano intatti: sono il cablaggio, non il contenuto

Proprietà di un comando — n_pbt_commandpalette_command #

Ottenuta con of_command(chiave). La palette ricostruisce la sua finestra dalla sua lista a ogni of_open: una proprietà cambiata mentre è aperta si vede all'apertura successiva.

ProprietàTipoPredefinitoRuolo
is_labelstring—Il testo della riga
is_shortcutstring""La combinazione mostrata a destra della riga, valida finché la palette è aperta (Ctrl+Shift+S)
is_groupstring—Il gruppo sotto cui il comando è elencato; cambiarlo lo sposta senza toglierlo (conserva il suo rango tra i comandi)
is_hintstring""La piccola riga sotto l'etichetta
is_keywordsstring""Le parole che la ricerca legge senza mostrarle — le parole dell'utente
is_iconstring""Un'icona a sinistra della riga: un file, un'immagine di libreria, o mono: / tint: per una che segue il tema
ib_enabledbooleantrueComando ingrigito: visibile, cercabile e inerte — né clic, né Invio, né la sua combinazione
ib_visiblebooleantrueComando nascosto: fuori dalla lista e dalle combinazioni, senza essere rimosso; torna com'era

Eventi #

EventoScatta quando
ue_command_selected (string as_key)L'utente ha scelto un'azione. La palette si è già chiusa: fare ciò che annuncia spetta a lei
ue_shortcut ( )La combinazione è stata premuta. La DLL riferisce, PB decide. Una palette commuta sul proprio tasto: if of_is_open() then of_close() else of_open() — premuta nella palette aperta, la combinazione la richiude da sola. Può anche rifiutare
ue_opened ( )La palette è a schermo — tramite of_open
ue_closed (string as_reason)Si è appena chiusa, con o senza scelta. Segue ogni of_open che ha restituito 0: as_reason è vuoto per una palette che era a schermo, cancelled se è stata chiusa — o sostituita da un'altra palette — prima di apparire, failed se la sua finestra non ha potuto nascere, blocked sotto debug remoto senza licenza

La palette non fa nulla da sé. Riporta l'identificatore scelto e si chiude. È l'applicazione ad agire — la stessa azione, avviata da un menu o dalla palette, passa quindi per lo stesso codice.


Da tastiera #

TastoEffetto
La combinazione di is_shortcutAvverte il suo codice con ue_shortcut; è lui ad aprire
DigitazioneFiltra mentre si scrive: le lettere non devono susseguirsi, nvf trova « Nuovo file », e gli accenti non contano (preferences trova « Préférences »)
Frecce su / giùSpostano la selezione nell'elenco
InvioSceglie l'azione selezionata (ue_command_selected)
La combinazione mostrata su una rigaLancia quel comando, senza doverlo selezionare
EscChiude senza scegliere nulla

Esempi #

Alimentare la palette dal proprio menu #

// Le parole chiave non si vedono, ma la ricerca le legge :
// digitare "pdf" trova l'esportazione anche se l'etichetta non lo dice
inv_palette.of_add_command(/*key*/ "export", /*label*/ "E", /*group*/ "F", /*hint*/ "H", /*shortcut*/ "Ctrl+E", /*keywords*/ "pdf csv xlsx")

Scegliere un'altra combinazione #

// Ctrl+K gia occupato dalla sua applicazione ? Ne scelga un altro.
// of_register_shortcut la consegna, la precedente se ne va da sola.
inv_palette.is_shortcut = "ctrl+shift+p"
inv_palette.of_register_shortcut()

Ancorarla sotto un campo #

// Ancorata sotto un campo, in pixel schermo
// La palette viene riportata dentro lo schermo se sporgeva
inv_palette.of_anchor_under(/*control*/ sle_1)
inv_palette.is_placeholder = "P"
inv_palette.of_open()
// Remove one command, empty the list, close the palette
inv_palette.of_remove_command(/*key*/ "print")
inv_palette.of_clear_commands()
inv_palette.of_close()

Buone pratiche #


← Riferimento dei componenti · Sommario della guida