scheduler — u_pbt_scheduler #
← Riferimento dei componenti · Sommario della guida
Un calendario alla maniera di Outlook: viste giorno, settimana lavorativa, settimana, mese e agenda, fascia « giornata intera », trascinamento per spostare e ridimensionare, risorse affiancate, categorie di colore, e schede e tooltip scritti da modelli. Si riempie appuntamento per appuntamento, o con una sola chiamata da un DataStore — e ogni gesto dell'utente Le restituisce la riga da aggiornare.
▶ Vederlo dal vivo — Applicazione dimostrativa, riquadro Scheduler: l'anteprima, il codice che lo produce e questa pagina, affiancati.
In breve #
| Userobject | u_pbt_scheduler |
| Classi degli item | n_pbt_scheduler_appointment (un appuntamento, of_appointment) · n_pbt_scheduler_resource (una risorsa, of_resource) · n_pbt_scheduler_category (una categoria, of_category) |
| Serve per | Pianificazione di un team, prenotazione di sale o macchine, agenda di un commerciale, appuntamenti di pazienti — tutto ciò che si posa su giorni e ore |
| Limite in modalità demo | I primi 12 appuntamenti dell'intervallo a schermo, per ora di inizio; gli altri restano in memoria senza essere visualizzati — vedere la modalità demo |
Avvio rapido #
// open event of the window : a few appointments of the week, in one repaint
uo_sched.of_set_redraw(/*on*/ false)
uo_sched.is_date = "2026-09-21"
// A colour category, then the appointments : a key, a subject, a start and an end
uo_sched.of_add_category(/*key*/ "customer", /*label*/ "Customer", /*color*/ RGB(216, 90, 48))
uo_sched.of_add_appointment(/*key*/ "a1", /*subject*/ "Weekly meeting", /*start*/ "2026-09-21 09:00", /*end*/ "2026-09-21 10:00")
uo_sched.of_appointment(/*key*/ "a1").is_location = "Room 3"
uo_sched.of_add_appointment(/*key*/ "a2", /*subject*/ "ACME visit", /*start*/ "2026-09-23 14:00", /*end*/ "2026-09-23 16:30")
uo_sched.of_appointment(/*key*/ "a2").is_category = "customer"
// Dates only : an all-day appointment, both days included
uo_sched.of_add_appointment(/*key*/ "a3", /*subject*/ "Trade fair", /*start*/ "2026-09-24", /*end*/ "2026-09-25")
uo_sched.of_appointment(/*key*/ "a3").ib_all_day = true
uo_sched.of_set_redraw(/*on*/ true)
// ue_appointment_opened event of uo_sched : (string as_key)
// A double-click, or Enter on the selected appointment : open YOUR editor
wf_edit_appointment(as_key)
Capire il calendario #
Le viste #
is_view sceglie la vista, is_date il giorno attorno al quale si costruisce: la sua settimana, il suo mese. L'utente cambia l'una e l'altro dalla barra degli strumenti del componente (Oggi, precedente, successivo, menu delle viste) — le due proprietà si rileggono dal vivo, e ue_view_changed / ue_date_changed lo segnalano, che il cambiamento venga dall'utente o dal vostro codice.
| Vista | Cosa mostra |
|---|---|
VIEW_DAY | Un giorno su una griglia oraria |
VIEW_WORK_WEEK | I giorni lavorativi della settimana (is_work_days) — la vista predefinita |
VIEW_WEEK | I sette giorni, a partire da ii_first_day_of_week |
VIEW_MONTH | Sei settimane; un appuntamento di più giorni si estende come barra sui suoi giorni |
VIEW_AGENDA | Un elenco, giorno per giorno, su ii_agenda_days giorni |
Le date #
Una data viaggia come testo, "yyyy-mm-dd hh:mm" — nei metodi, nelle proprietà e negli event. È un'ora locale fluttuante: né fuso orario, né ora legale; "2026-09-22 09:00" si visualizza alle 09:00, su tutte le postazioni.
- La fine è esclusiva. Un appuntamento dalle 09:00 alle 10:00 finisce alle 10:00: il successivo, che inizia alle 10:00, non si sovrappone. Senza fine, un appuntamento dura 30 minuti.
- Una data senza ora include i suoi due giorni.
"2026-09-24"→"2026-09-25"conib_all_day = trueè il 24 e il 25. Per una giornata intera l'ora è ignorata: una colonna datetime di DataWindow, che porta00:00:00, dà dei giorni, l'ultimo incluso. - Ciò che il calendario accetta anche:
"2026-09-22T09:30", i secondi, e il testo di una colonna datetime di DataWindow.of_add_appointmentha un overload che prende duedatetime. - Ciò che gli event restituiscono: le date nella forma in cui le avete scritte —
"yyyy-mm-dd hh:mm", fine esclusiva, per un appuntamento con orario; solo date, entrambi i giorni inclusi, per una giornata intera. È anche ciò cheis_starteis_endrileggono sull'handle.
// Local variables
datetime ldt_start
// A "yyyy-mm-dd hh:mm" text back into a PowerBuilder datetime
ldt_start = DateTime(Date(Left(as_start, 10)), Time(Mid(as_start, 12)))
La fascia « giornata intera » #
Sopra la griglia oraria delle viste giorno e settimana, una fascia riceve gli appuntamenti ib_all_day e quelli che durano 24 ore o più: un seminario di tre giorni vi sta in una barra invece di schiacciare tre colonne. ib_all_day_band = false la rimuove. Nella vista mese, questi appuntamenti sono barre che attraversano i loro giorni; gli altri, una riga scritta da is_month_template.
Gli appuntamenti di un DataStore #
of_from_datastore(ids) carica il calendario con una sola chiamata: una riga = un appuntamento, e la sua chiave è il suo numero di riga — è lei che ogni event Le restituisce, pronta per SetItem. Una colonna svolge un ruolo quando ne porta il nome, o quando of_map glielo assegna:
| Ruolo | Nomi riconosciuti senza of_map |
|---|---|
ROLE_SUBJECT | subject, title |
ROLE_START · ROLE_END | start, start_date, starts · end, end_date, ends |
ROLE_ALL_DAY · ROLE_READ_ONLY | all_day, allday · read_only, readonly |
ROLE_KEY · ROLE_LOCATION · ROLE_ORGANIZER · ROLE_DESCRIPTION · ROLE_RESOURCE · ROLE_CATEGORY · ROLE_STATUS · ROLE_RECURRING · ROLE_PRIVATE · ROLE_REMINDER · ROLE_CANCELLED | il nome del ruolo: key, location, organizer, description, resource, category, status, recurring, private, reminder, cancelled |
- Una colonna booleana vale vero per
1,true,Yoyes. Una colonnastatusporta i valori diSTATUS_*(busy,tentative,free,oof,elsewhere). Ogni nome è riconosciuto anche con il prefissois_: is_private, poichéprivateè una parola riservata di PowerScript. - Tutte le colonne, con ruolo o no, sono campi dei modelli: una colonna
customersi scrive{customer}sulla scheda, e si legge conof_get_field. - Una colonna che svolge
ROLE_KEYsostituisce il numero di riga come chiave: da riservare ai dati che non ricarica da quel DataStore. I suoi valori devono essere unici e non vuoti: una riga che non lo rispetta (o il cui valore contiene/o|) tiene il suo numero di riga come chiave, eue_script_errorlo segnala una volta. - Per impostazione predefinita il calendario non modifica il DataStore: Le dice cosa ha fatto l'utente (
ue_appointment_moved,ue_appointment_resized), Lei esegueSetItem, poiUpdate()quando la Sua applicazione lo decide. - Con
ib_write_back = truescrive da sé il nuovo inizio, la nuova fine e la nuova risorsa nella riga — unSetItemtipizzato dalla colonna — prima dell'event; un valore che il DataStore rifiuta rimette l'appuntamento al suo posto e sollevaue_write_back_failed. L'Update()resta Suo. - Dopo che il Suo codice ha modificato una riga (
SetItem, la Sua finestra di modifica),of_reload_rowla rilegge sul posto: ciò che ha impostato sull'appuntamento e la selezione restano.of_appointment("k").of_row()dà la riga di un appuntamento, qualunque sia la sua chiave. of_from_datastoreaccetta anche una DataWindow o una DataWindowChild:ib_write_backscrive allora in quella che l'utente vede. Date e decimali si leggono qualunque siano le impostazioni regionali, e unCHARperde il suo riempimento.- La colonna che svolge
ROLE_KEYnon si cambia conof_set_field(-5): una chiave cambia ricaricando. - Dopo un
InsertRow, unDeleteRow, unSorto unFilter, i numeri di riga cambiano: richiamiof_from_datastore. Un appuntamento selezionato che sparisce così sollevaue_selection_changed("").
Risorse e raggruppamento #
Una risorsa è ciò che si prenota: una persona, una sala, una macchina (of_add_resource). Un appuntamento la nomina con is_resource. Con is_group_by = GROUP_RESOURCE, ogni giorno delle viste giorno e settimana si divide in una colonna per risorsa, e trascinare una scheda in un'altra colonna ne cambia la risorsa — ue_appointment_moved la restituisce in as_resource. ib_visible = false su una risorsa nasconde la sua colonna e i suoi appuntamenti, come togliere la spunta a un calendario in Outlook.
Colori, categorie e stato #
Il colore di una scheda si decide in quest'ordine: l'il_accent impostato su questo appuntamento, poi il colore della sua categoria (of_add_category, is_category), poi quello della sua risorsa, poi l'accento del tema. La striscia a sinistra indica lo stato (is_status, il « Mostra come » di Outlook: occupato, provvisorio, libero, fuori sede, altrove); un appuntamento ib_cancelled è disegnato vuoto, e ib_recurring, ib_private, ib_reminder pongono un piccolo segno sulla scheda.
Proprietà #
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_view | string | VIEW_WORK_WEEK | La vista visualizzata (VIEW_*). Riletta dal vivo: l'utente la cambia dalla barra degli strumenti. Impostarla solleva ue_view_changed, come il menu delle viste (nulla se la vista non cambia) |
is_date | string | oggi | Il giorno visualizzato, "yyyy-mm-dd": la vista si costruisce attorno (la sua settimana, il suo mese). Riletto dal vivo: le frecce lo spostano. Una volta impostato, is_now non lo sposta più; "" riporta la vista a oggi |
is_now | string | "" | « Adesso », per la linea dell'ora corrente e il pulsante Oggi: "" = l'orologio della postazione; "yyyy-mm-dd hh:mm" lo fissa (dimostrazione, test, riproduzione). Finché né is_date né una navigazione (frecce, Oggi, of_show_appointment) ha fissato la data, la vista va al suo giorno |
ii_first_day_of_week | integer | 1 | Primo giorno della settimana, in numeri ISO come is_work_days: 1 = lunedì … 7 = domenica; 0 è accettato per domenica |
is_work_days | string | "1|2|3|4|5" | I giorni lavorativi, numeri ISO uniti da | (1 = lunedì … 7 = domenica, 0 accettato per domenica): formano la settimana lavorativa, gli altri sono ombreggiati |
is_work_start · is_work_end | string | "08:00" · "17:00" | L'orario di lavoro, "hh:mm": il resto della giornata è ombreggiato |
is_day_start · is_day_end | string | "00:00" · "24:00" | Le ore che la griglia oraria mostra; ciò che cade fuori è contato al bordo della sua colonna (« ▲ 1 prima », « ▼ 1 dopo »), con ciò che lo scorrimento nasconde sopra o sotto la vista; un clic sul segno porta in vista l'appuntamento nascosto più vicino |
ii_slot_minutes | integer | 30 | Il passo della griglia in minuti: 5, 10, 15, 20, 30 o 60. Un trascinamento vi si allinea |
ii_hour_height | integer | 48 | L'altezza di un'ora, in pixel |
is_scroll_time | string | "08:00" | L'ora a cui la griglia scorre all'apertura di una vista |
ib_show_now | boolean | true | La linea rossa dell'ora corrente |
ib_toolbar | boolean | true | La barra degli strumenti: Oggi, precedente, successivo, il titolo, il menu delle viste |
ib_week_numbers | boolean | false | I numeri di settimana ISO, nell'angolo della griglia oraria e davanti a ogni riga del mese |
ib_read_only | boolean | false | Niente si sposta, si ridimensiona né si crea con il mouse; Canc non chiede più nulla |
ib_all_day_band | boolean | true | La fascia « giornata intera » sopra la griglia oraria |
ib_tooltips | boolean | true | Il tooltip di ogni appuntamento, scritto dai modelli di tooltip |
ib_veto_changes | boolean | false | Chiede prima di applicare uno spostamento o un ridimensionamento: solleva ue_appointment_changing, che può rifiutare; as_kind dice quale dei due |
ib_write_back | boolean | false | Un calendario caricato da of_from_datastore: un appuntamento che l'utente sposta o ridimensiona scrive inizio, fine e risorsa nella sua riga (un SetItem tipizzato dalla colonna) prima di ue_appointment_moved / ue_appointment_resized; un valore rifiutato lo rimette al suo posto e solleva ue_write_back_failed. L'Update() resta Suo |
is_card_template | string | "[b]{subject}[/b]{?location}; {location}{/location}" | Il modello della scheda: viste giorno e settimana, agenda, barre del mese — vedere I modelli |
is_month_template | string | "{!all_day}{start} {/all_day}{subject}" | Una riga della vista mese, per un appuntamento contenuto in un giorno |
is_tooltip_title_template | string | "{subject}" | Il titolo del tooltip di un appuntamento |
is_tooltip_template | string | l'ora, il luogo, l'organizzatore | Il testo del tooltip di un appuntamento — vedere I modelli |
is_group_by | string | GROUP_NONE | GROUP_RESOURCE: una colonna per risorsa sotto ogni giorno, più una colonna (nessuna) alla fine quando un appuntamento non ha una risorsa nota al calendario |
is_filter | string | "" | Mostra solo gli appuntamenti che contengono questo testo (oggetto, luogo, organizzatore, descrizione, campi); "" li mostra tutti |
is_time_format | string | "hh:mm" | Come si scrive un'ora: "hh:mm", "h:mm AM/PM"… (token di I modelli) |
ii_agenda_days | integer | 7 | Quanti giorni elenca la vista agenda |
is_theme_style | string | "" | Stile visivo del componente (costanti THEME_STYLE_*); vuoto = quello dell'applicazione, seguito a ogni cambio |
is_theme_mode | string | "" | Variante chiara o scura (costanti THEME_MODE_*); vuoto = quella dell'applicazione, seguita a ogni cambio |
il_theme_accent | long | -1 | Colore d'accento di questo componente (-1 = accento dell'applicazione, o quello del tema) |
is_tooltip | string | "" | Tooltip semplice del componente (un appuntamento ha il suo, scritto dai modelli) |
is_super_tooltip_title | string | "" | Titolo del tooltip arricchito (ha la precedenza su is_tooltip) |
is_super_tooltip_text | string | "" | Testo del tooltip arricchito (formattazione con tag accettata) |
is_super_tooltip_image | string | "" | Immagine del tooltip arricchito |
Proprietà di un appuntamento #
Un appuntamento si pilota tramite il suo handle, of_appointment("chiave") — creato al primo accesso, resta valido in seguito. Una proprietà letta chiede al componente quanto vale adesso: dopo un trascinamento, is_start e is_end dicono già dove l'utente l'ha rilasciato.
// A handle used once fits on one line
uo_sched.of_appointment(/*key*/ "a1").is_status = n_pbt_scheduler_appointment.STATUS_TENTATIVE
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_subject | string | quello di of_add_appointment | L'oggetto, ciò che la scheda mostra per primo ({subject}) |
is_start · is_end | string | quelli di of_add_appointment | Inizio e fine, "yyyy-mm-dd hh:mm", fine esclusiva; per una giornata intera, date "yyyy-mm-dd", entrambi i giorni inclusi. Qualsiasi altra scrittura (22/09/2026 09:00) è conservata ma mai disegnata |
ib_all_day | boolean | false | Occupa giornate intere: disegnato nella fascia « giornata intera » |
is_location · is_organizer · is_description | string | "" | Il luogo ({location}), l'organizzatore ({organizer}), un testo più lungo ({description}) |
is_resource | string | "" | La chiave della sua risorsa: la sua colonna quando il calendario raggruppa per risorsa, il suo colore quando non ha categoria |
is_category | string | "" | La chiave della sua categoria: il colore della scheda |
is_status | string | STATUS_BUSY | Il « Mostra come » di Outlook (STATUS_*), disegnato dalla striscia a sinistra |
ib_recurring · ib_private · ib_reminder | boolean | false | Piccoli segni sulla scheda: una ricorrenza, un appuntamento privato, un promemoria |
ib_cancelled | boolean | false | Un appuntamento annullato è disegnato vuoto |
ib_read_only | boolean | false | L'utente non può né spostarlo, né ridimensionarlo, né chiederne l'eliminazione |
ib_visible | boolean | true | Lo nasconde senza rimuoverlo |
of_row ( ) → long | — | — | Sola lettura. Il numero della riga del DataStore di of_from_datastore da cui è stato letto l'appuntamento, qualunque sia la sua chiave (ROLE_KEY); 0 per un appuntamento aggiunto a mano. Una riga inserita o eliminata da allora sposta i numeri: ricarichi |
Come ogni item, un appuntamento porta anche il tooltip comune (is_tooltip, is_super_tooltip_title, is_super_tooltip_text, is_super_tooltip_image) — che allora sostituisce quello dei modelli — e i colori dell'item: il_accent ricolora la scheda e la sua striscia, il_back_color, il_text_color, il_back_color_hover e il_text_color_hover la dipingono a riposo e al passaggio del mouse.
Proprietà di una risorsa e di una categoria #
| Proprietà | Handle | Ruolo |
|---|---|---|
is_label | n_pbt_scheduler_resource | Il nome visualizzato sopra la sua colonna quando il calendario raggruppa per risorsa ({resource_label}) |
il_color | n_pbt_scheduler_resource | Il colore dei suoi appuntamenti che non hanno categoria; -1 = l'accento |
ib_visible | n_pbt_scheduler_resource | false nasconde la sua colonna e i suoi appuntamenti |
is_label | n_pbt_scheduler_category | Il suo nome ({category_label}) |
il_color | n_pbt_scheduler_category | Il colore dei suoi appuntamenti; -1 = l'accento. Una categoria non è disegnata per sé: il tooltip e i cinque colori di elemento che eredita vengono conservati e riletti, senza effetto visibile |
Una risorsa porta anche, come ogni elemento, il tooltip comune (is_tooltip, is_super_tooltip_title…) e i colori di elemento (il_accent, il_back_color…): vestono l'intestazione della sua colonna quando il calendario raggruppa per risorsa.
Costanti #
| Famiglia | Costanti | Portate da |
|---|---|---|
| Vista | VIEW_DAY, VIEW_WORK_WEEK, VIEW_WEEK, VIEW_MONTH, VIEW_AGENDA | il componente (is_view) |
| Raggruppamento | GROUP_NONE, GROUP_RESOURCE | il componente (is_group_by) |
| Ruolo di una colonna | ROLE_KEY, ROLE_SUBJECT, ROLE_START, ROLE_END, ROLE_ALL_DAY, ROLE_LOCATION, ROLE_ORGANIZER, ROLE_DESCRIPTION, ROLE_RESOURCE, ROLE_CATEGORY, ROLE_STATUS, ROLE_RECURRING, ROLE_PRIVATE, ROLE_REMINDER, ROLE_CANCELLED, ROLE_READ_ONLY | il componente (of_map) |
| Stato | STATUS_BUSY, STATUS_TENTATIVE, STATUS_FREE, STATUS_OOF, STATUS_ELSEWHERE | l'handle dell'appuntamento (is_status) |
| Modifica | CHANGE_MOVE, CHANGE_RESIZE | il componente (as_kind di ue_appointment_changing) |
Le costanti si leggono sull'oggetto che le porta:
u_pbt_scheduler.VIEW_MONTHper una proprietà del componente,n_pbt_scheduler_appointment.STATUS_OOFper una proprietà di un appuntamento.
Metodi #
Appuntamenti #
| Metodo | Ruolo | |
|---|---|---|
of_add_appointment (string as_key, string as_subject, string as_start, string as_end) | Aggiunge un appuntamento: la sua chiave (unica), il suo oggetto, inizio e fine "yyyy-mm-dd hh:mm". Tutto il resto passa dal suo handle. Restituisce 0 una volta aggiunto, -5 quando la chiave è vuota, contiene / o ` | , o è **già presa** (un appuntamento non si aggiorna così: lo fa il suo handle), o quando l'inizio — o una fine indicata — non è scritto yyyy-mm-dd o yyyy-mm-dd hh:mm (String(ldt) scrive 22/09/2026 su una postazione francese: usi l'overload datetime), o quando la fine viene **prima** dell'inizio (una data sola come fine è quel giorno intero, incluso) — of_get_last_error dice quale, -2` quando il componente non è creato |
of_add_appointment (string as_key, string as_subject, datetime adt_start, datetime adt_end) | Lo stesso, da due datetime; una fine nulla vale l'inizio. Per una giornata intera, la fine è l'ultimo giorno stesso, incluso: due volte la stessa data = un giorno. Restituisce 0 una volta aggiunto, -5 quando la chiave è vuota, contiene / o ` | o è già presa, o quando l'inizio è nullo, -2` quando il componente non è creato |
of_appointment (string as_key) | L'handle di un appuntamento (n_pbt_scheduler_appointment), creato al primo accesso — vedere Proprietà di un appuntamento | |
of_remove_appointment (string as_key) | Rimuove un appuntamento. Restituisce 0 una volta rimosso, -5 quando il calendario non ha alcun appuntamento con questa chiave, -2 quando il componente non è creato | |
of_clear_appointments ( ) | Rimuove tutti gli appuntamenti; risorse, categorie e opzioni restano. Il DataStore di of_from_datastore è dimenticato con le sue righe: of_map accetta le colonne del successivo, of_reload_row attende un nuovo of_from_datastore. Un appuntamento selezionato che sparisce solleva ue_selection_changed(""). Restituisce 0 una volta inviato, -2 quando il componente non è creato | |
of_set_field (string as_key, string as_field, string as_value) | Dà a un appuntamento un campo Suo, per i modelli: dopo of_set_field("a1", "customer", "ACME"), {customer} scrive ACME sulla sua scheda. Restituisce 0 una volta impostato, -5 quando il campo è vuoto o il calendario non ha alcun appuntamento con questa chiave, o quando il campo è la colonna che svolge ROLE_KEY (una chiave cambia ricaricando), -2 quando il componente non è creato | |
of_get_field (string as_key, string as_field) | Legge dal vivo un campo di un appuntamento: uno dei Suoi (of_set_field) o una colonna del DataStore da cui proviene; "" quando non ne ha | |
of_get_last_error ( ) | Perché l'ultima chiamata ha restituito -5: una fine prima dell'inizio, un'ora che non lo è, la colonna chiave data a of_set_field, un appuntamento che non può essere visto, un DataStore illeggibile, una riga che non esiste; altrimenti l'ultimo errore della libreria |
DataStore #
| Metodo | Ruolo |
|---|---|
of_from_datastore (datastore ads) | Il ponte DataStore: una riga = un appuntamento, la sua chiave = il suo numero di riga, ogni colonna = un campo dei modelli. Sostituisce gli appuntamenti visualizzati. Date e decimali si leggono qualunque siano le impostazioni regionali, un CHAR perde il suo riempimento; un appuntamento selezionato che sparisce solleva ue_selection_changed(""). Restituisce 0 una volta caricato, -5 quando il DataStore non è valido o non ha colonne, -2 quando il componente non è creato |
of_from_datastore (datawindow adw) | Lo stesso dalle righe di una DataWindow — quella che l'utente vede accanto: ib_write_back scrive in questa DataWindow. Una DataWindow che non può condividere i suoi dati è rifiutata (-5, of_get_last_error dice perché). Restituisce 0 una volta caricato, -5 quando non è valida o non ha colonne, -2 quando il componente non è creato |
of_from_datastore (datawindowchild adwc) | Lo stesso dalle righe di una DataWindowChild (una DataWindow a discesa, un report annidato), dove ib_write_back scrive. Restituisce 0 una volta caricato, -5 quando non è valida, non ha colonne o non può condividere i suoi dati, -2 quando il componente non è creato |
of_map (string as_role, string as_column) | Dà un ruolo (ROLE_*) a una colonna il cui nome non lo dice: of_map(ROLE_SUBJECT, "title_text"). Prima o dopo of_from_datastore: dopo, ogni riga viene riletta com'è ora — un appuntamento rimosso resta rimosso, uno trascinato resta dove è stato rilasciato, i campi di of_set_field e gli appuntamenti aggiunti a mano restano. La colonna è verificata sul DataStore dell'ultimo of_from_datastore: per un NUOVO DataStore con altre colonne, chiami of_map dopo averlo caricato, o dopo of_clear_appointments, che dimentica le vecchie colonne. Restituisce 0 una volta impostato, -5 quando il ruolo non è una delle costanti ROLE_* o quando la colonna non è una di quelle del DataStore dell'ultimo of_from_datastore; un nuovo ROLE_KEY dà a ogni riga una nuova chiave, e gli handle delle vecchie vengono liberati, -2 quando il componente non è creato |
of_reload_row (long al_row) | Rilegge una riga del DataStore di of_from_datastore, com'è ora — dopo che il Suo codice l'ha modificata (SetItem, la Sua finestra di modifica). L'appuntamento di quella riga segue sul posto: ciò che vi è stato impostato (campi, colori, visibilità) e la selezione restano, nulla viene sollevato. Una riga che il calendario non ha ancora (InsertRow alla fine) arriva come un nuovo appuntamento; una riga inserita o eliminata in mezzo sposta i numeri: ricarichi tutto. Restituisce 0 una volta inviato, -5 quando nessun DataStore è collegato, il calendario non ha più righe da of_clear_appointments o la riga non esiste (of_get_last_error dice quale), -2 quando il componente non è creato |
Risorse e categorie #
| Metodo | Ruolo | |
|---|---|---|
of_add_resource (string as_key, string as_label) | Aggiunge una risorsa — una persona, una sala, una macchina; il suo colore e la sua visibilità passano da of_resource. Restituisce 0 una volta aggiunta, -5 quando la chiave è vuota, contiene / o ` | , o è già presa, -2` quando il componente non è creato |
of_resource (string as_key) | L'handle di una risorsa (n_pbt_scheduler_resource), creato al primo accesso | |
of_remove_resource (string as_key) | Rimuove una risorsa; i suoi appuntamenti restano — raggruppati per risorsa, nella colonna (nessuna). Restituisce 0 una volta rimossa, -5 quando il calendario non ha alcuna risorsa con questa chiave, -2 quando il componente non è creato | |
of_clear_resources ( ) | Rimuove tutte le risorse. Restituisce 0 una volta inviato, -2 quando il componente non è creato | |
of_add_category (string as_key, string as_label, long al_color) | Aggiunge una categoria di colore: gli appuntamenti il cui is_category la nomina ne prendono il colore (-1 = l'accento). Restituisce 0 una volta aggiunta, -5 quando la chiave è vuota, contiene / o ` | , o è già presa, -2` quando il componente non è creato |
of_category (string as_key) | L'handle di una categoria (n_pbt_scheduler_category), creato al primo accesso | |
of_remove_category (string as_key) | Rimuove una categoria; i suoi appuntamenti tornano all'accento. Restituisce 0 una volta rimossa, -5 quando il calendario non ha alcuna categoria con questa chiave, -2 quando il componente non è creato | |
of_clear_categories ( ) | Rimuove tutte le categorie. Restituisce 0 una volta inviato, -2 quando il componente non è creato |
Navigazione e selezione #
| Metodo | Ruolo |
|---|---|
of_next ( ) | Il giorno, la settimana o il mese successivo — la freccia della barra degli strumenti. Restituisce 0 una volta inviato, -2 quando il componente non è creato |
of_previous ( ) | Il giorno, la settimana o il mese precedente. Restituisce 0 una volta inviato, -2 quando il componente non è creato |
of_go_to_today ( ) | Torna a oggi — il pulsante Oggi. Restituisce 0 una volta inviato, -2 quando il componente non è creato |
of_select_appointment (string as_key) | Seleziona un appuntamento ("" = nessuno), come un clic: solleva ue_selection_changed (nulla se è già la selezione). Un appuntamento che non è a schermo (nascosto, filtrato, fuori dalle ore mostrate, dietro un « +N ») può essere selezionato, ma Invio e Canc non lo raggiungono. Restituisce 0 una volta selezionato, -5 quando il calendario non ha alcun appuntamento con questa chiave, -2 quando il componente non è creato |
of_selected_key ( ) | La chiave dell'appuntamento selezionato, "" quando nessuno — letta dal vivo |
of_show_appointment (string as_key) | Porta un appuntamento in vista: va al suo giorno, scorre fino alla sua ora e lo seleziona, come un clic: solleva ue_selection_changed. Un giorno che la settimana lavorativa non mostra (un sabato) fa passare la vista alla settimana intera, e ue_view_changed lo segnala. Restituisce 0 una volta mostrato, -5 quando il calendario non ha alcun appuntamento con questa chiave, o quando non può essere visto — nascosto (ib_visible), filtrato (is_filter) o su una risorsa nascosta: nulla si muove allora, of_get_last_error lo dice, -2 quando il componente non è creato |
of_scroll_to_time (string as_time) | Fa scorrere la griglia oraria fino a un'ora, "hh:mm". Restituisce 0 una volta inviato, -5 quando l'ora è vuota o non è un'ora (hh:mm, da 00:00 a 24:00), -2 quando il componente non è creato |
of_first_visible_date ( ) · of_last_visible_date ( ) | Il primo e l'ultimo giorno che la vista mostra, "yyyy-mm-dd" — letti dal vivo |
of_shown_count ( ) | Restituisce il numero di appuntamenti visualizzati nell'intervallo a schermo: dopo is_filter, quelli nascosti, le risorse nascoste e il limite della modalità demo (i primi 12 di quell'intervallo); of_count conta tutto il calendario |
Event #
| Event | Sollevato quando |
|---|---|
ue_appointment_clicked (string as_key) | Un appuntamento è stato cliccato (e selezionato) |
ue_appointment_opened (string as_key) | Doppio clic su un appuntamento, o Invio su quello selezionato: apra il Suo editor |
ue_appointment_rclicked (string as_key, long al_x, long al_y) | Clic destro su un appuntamento. al_x / al_y sono pixel dello schermo |
ue_appointment_changing (string as_key, string as_kind, string as_start, string as_end, string as_resource) | Prima che uno spostamento o un ridimensionamento sia applicato, solo se ib_veto_changes è vero: as_kind dice quale (CHANGE_MOVE, CHANGE_RESIZE), i valori sono quelli che prenderebbe. Restituisca false per rimettere l'appuntamento dov'era; true per impostazione predefinita. Un appuntamento la cui domanda attende la risposta non si afferra una seconda volta |
ue_appointment_moved (string as_key, string as_start, string as_end, string as_resource, string as_old_start, string as_old_end, string as_old_resource) | L'utente ha trascinato un appuntamento: il suo nuovo inizio, la sua nuova fine e la sua risorsa, poi quelli che aveva (per un registro, un annullamento, una conferma). Il calendario lo mostra già lì; lo salvi (una riga di DataStore: SetItem sulla riga Long(as_key), o ib_write_back, che l'ha già fatto quando arriva l'event) |
ue_appointment_resized (string as_key, string as_start, string as_end, string as_old_start, string as_old_end) | L'utente ha trascinato un bordo di un appuntamento: il suo nuovo inizio e la sua nuova fine, poi quelli che aveva. Con ib_write_back, la riga è già scritta |
ue_write_back_failed (string as_key, string as_col, string as_value, string as_reason) | ib_write_back: il DataStore ha rifiutato il nuovo posto di un appuntamento (as_col nomina la colonna, as_value il valore, as_reason perché). L'appuntamento è tornato dov'era, e anche ciò che era già scritto; né ue_appointment_moved né ue_appointment_resized seguono |
ue_range_selected (string as_start, string as_end, boolean ab_all_day, string as_resource) | L'utente ha percorso delle caselle vuote con il mouse: l'intervallo, per crearvi un appuntamento. Percorso nella fascia « giornata intera » o nella vista mese, sono giorni interi: ab_all_day vale true, solo date, l'ultima inclusa |
ue_new_requested (string as_start, string as_end, boolean ab_all_day, string as_resource) | L'utente chiede un nuovo appuntamento: doppio clic su una casella o un giorno vuoto, o il + di un'intestazione di giorno (raggruppato per risorsa: di un'intestazione di risorsa). Un giorno intero arriva come sole date, la fine inclusa: due volte la stessa data = un giorno |
ue_delete_requested (string as_key) | Canc è stato premuto sull'appuntamento selezionato. Lo rimuova (of_remove_appointment) una volta che la Sua applicazione è d'accordo |
ue_slot_rclicked (string as_start, boolean ab_all_day, string as_resource, long al_x, long al_y) | Clic destro su una casella o un giorno vuoto; per un giorno, as_start è la sua sola data. al_x / al_y sono pixel dello schermo |
ue_selection_changed (string as_key) | L'appuntamento selezionato è cambiato ("" = nessuno): un clic, o of_select_appointment / of_show_appointment dal vostro codice — e quando il Suo codice rimuove, svuota o ricarica l'appuntamento selezionato ("" allora); of_reset resta muto |
ue_view_changed (string as_view) | La vista è cambiata: l'utente ne ha scelta un'altra nella barra degli strumenti o ha aperto un giorno con il suo « +N », il vostro codice ha impostato is_view, o of_show_appointment ha fatto passare la settimana lavorativa alla settimana intera per mostrare un giorno festivo |
ue_date_changed (string as_first, string as_last) | L'intervallo visibile è cambiato (navigazione, vista, data): il suo primo e ultimo giorno, "yyyy-mm-dd", inclusi. Sollevato anche alla prima visualizzazione (sull'intervallo di oggi), poi di nuovo quando il Suo codice imposta is_date o is_view: una finestra che li imposta all'apertura ne riceve due; e dopo ogni of_reset, che svuota il calendario: è una richiesta di dati, non un gesto. È qui che si caricano gli appuntamenti dell'intervallo |
ue_ready ( ) | Il componente ha finito di caricarsi; tutto ciò che era stato inviato prima è stato riprodotto |
ue_runtime_missing ( ) | Il runtime WebView2 è assente: il componente resta vuoto |
ue_bg_color (long al_color) | Il componente ha calcolato il suo colore di sfondo del tema; l'userobject l'ha già adottato (backcolor) |
I modelli #
Ciò che una scheda, una riga del mese e un tooltip dicono non è fisso: è un modello che scrive Lei, in testo formattato ([b], [br], [color=…], [symbol=…]…) con dei campi tra graffe. Quattro proprietà li portano: is_card_template (schede delle viste giorno e settimana, agenda, barre del mese), is_month_template (una riga della vista mese), is_tooltip_title_template e is_tooltip_template (il tooltip). Il modello di tooltip predefinito è:
[symbol=clock] {when}{?location}[br][symbol=location] {location}{/location}{?organizer}[br][symbol=person] {organizer}{/organizer}
La sintassi #
| Scrittura | Effetto |
|---|---|
{subject} | Il valore del campo, con escape: una [ nell'oggetto si visualizza, non apre un tag |
{start:dddd d mmmm} | Un campo data in un formato (token qui sotto) |
{?location}…{/location} | Scrive il blocco solo se il campo dice qualcosa che non è un NO: né vuoto, né 0, N, no o false |
{!all_day}…{/all_day} | Scrive il blocco solo se il campo è vuoto (o falso) |
{description:raw} | Inserisce il valore come formattazione, senza escape — per un campo che contiene già dei tag |
{{ · }} | Una graffa letterale |
I formati di data #
I token sono quelli di PowerBuilder; i nomi dei giorni e dei mesi seguono la lingua di visualizzazione. Un testo tra virgolette è scritto così com'è. Gli stessi token servono a is_time_format.
| Token | Scrive |
|---|---|
yyyy · yy | L'anno, 2026 · 26 |
mmmm · mmm | Il nome del mese, lungo · corto |
mm · m | Il mese, 09 · 9 — o i minuti subito dopo un'ora, come in PowerBuilder |
dddd · ddd | Il nome del giorno, lungo · corto |
dd · d | Il giorno del mese, 05 · 5 |
hh · h | L'ora, 09 · 9 (su 12 ore con AM/PM) |
nn · n | I minuti, 05 · 5 |
AM/PM · am/pm | L'indicatore del mattino o del pomeriggio |
I campi #
| Campo | Valore |
|---|---|
key · subject · location · organizer · description | La chiave e i testi dell'appuntamento |
resource · resource_label | La chiave della sua risorsa · il suo nome |
category · category_label | La chiave della sua categoria · il suo nome |
status · status_label | Lo stato (busy…) · la sua etichetta, tradotta nella lingua di visualizzazione |
all_day · recurring · private · reminder · cancelled | true, o vuoto: pensati per {?…} e {!…} |
start · end | L'ora di inizio · di fine, nel formato is_time_format (vuota per una giornata intera); con un formato, la data e l'ora — per una giornata intera, {end:…} è l'ultimo giorno, come lo rilegge is_end |
date | Il primo giorno, per esteso; con un formato, l'inizio formattato |
time | 09:00-10:30, o « Tutto il giorno » |
when | La frase completa: giorno, ore, e il giorno di fine quando differisce |
duration | 45 min, 1 h 30, 2 days (tradotto) |
| i Suoi | Ogni campo impostato da of_set_field, e ogni colonna del DataStore di of_from_datastore, con il suo nome. Un valore che è una data accetta un formato: {due_date:dd/mm} |
Un campo sconosciuto scrive una stringa vuota.
I simboli #
Il tag di testo formattato [symbol=nome] pone un simbolo integrato, monocromatico, disegnato nel colore del testo che lo circonda — segue il tema, il passaggio del mouse e il colore della scheda, senza file da distribuire: clock, location, person, people, calendar, repeat, lock, bell, phone, mail, video, note, tag, link, check, star, info, warning. Un nome sconosciuto si visualizza così com'è.
Cosa può fare l'utente senza una riga di codice #
- navigare: Oggi, precedente, successivo, e il menu delle viste della barra degli strumenti;
- spostare un appuntamento verso un'altra ora, un altro giorno o un'altra risorsa, trascinandolo — il passo segue
ii_slot_minutes; - ridimensionare un appuntamento trascinandone il bordo;
- percorrere delle caselle vuote per scegliere un intervallo →
ue_range_selected— nella fascia « giornata intera » o nella vista mese, giorni interi; - chiedere un appuntamento con un doppio clic su una casella vuota o con il + di un'intestazione di giorno (di un'intestazione di risorsa quando il calendario è raggruppato) →
ue_new_requested; - aprire un appuntamento con un doppio clic →
ue_appointment_opened, e fare clic destro su un appuntamento o una casella vuota per il Suo menu.
Il calendario non crea, non modifica e non elimina nulla da sé oltre al trascinamento: chiede, la Sua applicazione decide. ib_read_only disattiva tutti questi gesti in una volta, ib_read_only su un appuntamento li disattiva solo per lui.
Da tastiera, una volta raggiunto il calendario:
| Tasto | Effetto |
|---|---|
| Invio | Apre l'appuntamento selezionato, se è a schermo → ue_appointment_opened |
| Canc | Chiede l'eliminazione dell'appuntamento selezionato → ue_delete_requested (niente se non è a schermo, o se il calendario o l'appuntamento è in sola lettura) |
| Freccia su / Freccia giù | Seleziona l'appuntamento precedente / successivo disegnato nella vista (ciò che le ore mostrate o un « +N » nascondono è saltato), nell'ordine dell'ora di inizio, e fa scorrere la griglia fino a lui → ue_selection_changed |
| Pag su / Pag giù | Il giorno, la settimana o il mese precedente / successivo |
| Alt+Home | Torna a oggi |
| Esc | Annulla un trascinamento in corso |
Esempi #
Gli appuntamenti di un DataStore, e cosa ne fa l'utente #
Il DataStore ids_appts (variabile d'istanza) ha le colonne subject, start_date, end_date, all_day, location, room, category e customer. Le prime cinque svolgono il loro ruolo per nome; room lo riceve da of_map. Con ib_write_back, il calendario scrive da sé i gesti dell'utente nelle righe.
// open event of the window : the appointments, retrieved the way your application already does
ids_appts = create datastore
ids_appts.dataobject = "d_appointments"
ids_appts.SetTransObject(SQLCA)
ids_appts.Retrieve()
// What the user drags is written into its row (SetItem) before the event
uo_sched.ib_write_back = true
// "room" is not a role name : say which role it plays, then load every row
uo_sched.of_map(/*role*/ u_pbt_scheduler.ROLE_RESOURCE, /*column*/ "room")
uo_sched.of_from_datastore(/*ads*/ ids_appts)
// ue_appointment_moved event of uo_sched : (string as_key, string as_start, string as_end, string as_resource, string as_old_start, string as_old_end, string as_old_resource)
// ib_write_back has written the new start, end and room into the row already :
// save when YOUR application decides, here at once
ids_appts.Update()
// ue_appointment_resized event of uo_sched : (string as_key, string as_start, string as_end, string as_old_start, string as_old_end)
// Only the times changed, and they are in the row already : save
ids_appts.Update()
// ue_write_back_failed event of uo_sched : (string as_key, string as_col, string as_value, string as_reason)
// The DataStore refused the value : the appointment went back where it was
MessageBox("Not saved", as_col + " : " + as_reason)
// ue_appointment_opened event of uo_sched : (string as_key)
// Local variables
long ll_row
// The row of the appointment, edited in YOUR window, then read again in place
ll_row = uo_sched.of_appointment(/*key*/ as_key).of_row()
OpenWithParm(w_appointment_edit, ll_row)
uo_sched.of_reload_row(/*row*/ ll_row)
Creare ed eliminare #
Una richiesta di giornata intera arriva come sole date, ab_all_day a true: la colonna all_day lo dice alla riga — senza di essa, la riga si rileggerebbe come 30 minuti a mezzanotte.
// ue_new_requested event of uo_sched : (string as_start, string as_end, boolean ab_all_day, string as_resource)
// Local variables
long ll_row
// A new row, prefilled with the slot the user chose
ll_row = ids_appts.InsertRow(0)
ids_appts.SetItem(ll_row, "subject", "New appointment")
ids_appts.SetItem(ll_row, "start_date", DateTime(Date(Left(as_start, 10)), Time(Mid(as_start, 12))))
ids_appts.SetItem(ll_row, "end_date", DateTime(Date(Left(as_end, 10)), Time(Mid(as_end, 12))))
ids_appts.SetItem(ll_row, "room", as_resource)
// A whole day comes as dates alone : the all_day column says so, or the row
// would read back as 30 minutes at midnight
if ab_all_day then ids_appts.SetItem(ll_row, "all_day", 1)
// Reload (the row numbers are the keys), then bring the new one into view
uo_sched.of_from_datastore(/*ads*/ ids_appts)
uo_sched.of_show_appointment(/*key*/ String(ll_row))
// ue_delete_requested event of uo_sched : (string as_key)
// Ask first : the calendar never deletes by itself
if MessageBox("Delete", "Delete this appointment?", Question!, YesNo!) = 2 then return
ids_appts.DeleteRow(Long(as_key))
ids_appts.Update()
// The rows after it changed number : reload
uo_sched.of_from_datastore(/*ads*/ ids_appts)
Una colonna per sala #
// The rooms, each with its own colour, side by side under each day
uo_sched.of_set_redraw(/*on*/ false)
uo_sched.of_add_resource(/*key*/ "r1", /*label*/ "Room A")
uo_sched.of_add_resource(/*key*/ "r2", /*label*/ "Room B")
uo_sched.of_resource(/*key*/ "r1").il_color = RGB(15, 108, 189)
uo_sched.of_resource(/*key*/ "r2").il_color = RGB(31, 158, 117)
uo_sched.is_group_by = u_pbt_scheduler.GROUP_RESOURCE
uo_sched.is_view = u_pbt_scheduler.VIEW_DAY
// Each appointment names its room
uo_sched.of_add_appointment(/*key*/ "k1", /*subject*/ "Kickoff", /*start*/ "2026-09-22 09:00", /*end*/ "2026-09-22 10:00")
uo_sched.of_appointment(/*key*/ "k1").is_resource = "r1"
uo_sched.of_add_appointment(/*key*/ "k2", /*subject*/ "Interview", /*start*/ "2026-09-22 10:30", /*end*/ "2026-09-22 11:30")
uo_sched.of_appointment(/*key*/ "k2").is_resource = "r2"
uo_sched.of_set_redraw(/*on*/ true)
// A checkbox of the window hides Room B and its appointments, like unticking a calendar in Outlook
uo_sched.of_resource(/*key*/ "r2").ib_visible = cbx_room_b.checked
Schede e tooltip Suoi #
// The card : the time, the subject in bold, the customer (a DataStore column) when there is one
uo_sched.is_card_template = "{start} [b]{subject}[/b]{?customer}[br][symbol=people] {customer}{/customer}"
// The month line : a small lock on the private ones
uo_sched.is_month_template = "{?private}[symbol=lock] {/private}{subject}"
// The tooltip : the date written out, the duration, the status
uo_sched.is_tooltip_title_template = "{subject}"
uo_sched.is_tooltip_template = "[symbol=calendar] {start:dddd d mmmm}, {time} ({duration})[br][symbol=info] {status_label}"
Rifiutare uno spostamento #
// Ask before any move or resize is applied
uo_sched.ib_veto_changes = true
// ue_appointment_changing event of uo_sched : (string as_key, string as_kind, string as_start, string as_end, string as_resource) returns boolean
// A resize keeps the day : only a move is checked
if as_kind = u_pbt_scheduler.CHANGE_RESIZE then return true
// Nothing on a Saturday or a Sunday : returning false puts the appointment back
if DayNumber(Date(Left(as_start, 10))) = 1 or DayNumber(Date(Left(as_start, 10))) = 7 then return false
return true
Caricare solo ciò che si vede #
Su anni di storico, inutile leggere tutto: ue_date_changed fornisce l'intervallo a schermo a ogni navigazione, e alla prima visualizzazione. Qui d_appointments prende due argomenti datetime, inizio e fine dell'intervallo.
// ue_date_changed event of uo_sched : (string as_first, string as_last)
// The last day is INCLUDED : read up to the start of the day after
ids_appts.Retrieve(DateTime(Date(as_first)), DateTime(RelativeDate(Date(as_last), 1)))
uo_sched.of_from_datastore(/*ads*/ ids_appts)
Il Suo menu su un appuntamento #
// ue_appointment_rclicked event of uo_sched : (string as_key, long al_x, long al_y)
// Local variables
m_appointment lm_menu
// Remember which appointment the menu is about, then open YOUR menu under the pointer
is_menu_key = as_key
lm_menu = create m_appointment
lm_menu.m_popup.PopMenu(parent.PointerX(), parent.PointerY())
destroy lm_menu
Buone pratiche #
- Racchiuda una serie di aggiunte tra
of_set_redraw(/*on*/ false)/of_set_redraw(/*on*/ true): gli appuntamenti compaiono in una sola volta. - Per dati che vivono in una base, preferisca
of_from_datastorea un ciclo diof_add_appointment: un solo trasferimento, e ogni event Le restituisce la riga. - Ricarichi (
of_from_datastore) dopo ogniInsertRow,DeleteRow,SortoFilterdel DataStore: la chiave di un appuntamento è un numero di riga. - Scriva le date come
"yyyy-mm-dd hh:mm", mai nel formato regionale della postazione: è il solo che il calendario legge ovunque. - In un modello, racchiuda un campo facoltativo tra
{?campo}…{/campo}: una scheda senza luogo non mostra un « ; » orfano. - Su uno storico lungo, carichi l'intervallo visibile in
ue_date_changedpiuttosto che tutto il DataStore. - Per una regola di business (nessun appuntamento nel fine settimana, nessuna sovrapposizione in una sala),
ib_veto_changeseue_appointment_changingrifiutano prima che la scheda si muova. - Per salvare i gesti senza codice, imposti
ib_write_back = true; dopo che il Suo codice ha modificato una sola riga, bastaof_reload_row.
Limiti #
Ciò che il calendario non fa — da sapere prima di sceglierlo:
- Ricorrenza: niente serie (regole RRULE), niente eccezioni, niente modifica « questa occorrenza / tutta la serie ».
ib_recurringmette solo un segno sulla scheda: ogni occorrenza è un appuntamento (una riga del DataStore) che la Sua applicazione genera da sé. Un motore di ricorrenza è previsto per una versione successiva. - Fusi orari: l'ora è locale fluttuante (vedere Le date); nessuna seconda scala oraria, nessuna conversione.
- Vista cronologica (risorse in righe, tempo in colonne) e mini-calendario di navigazione: assenti; raggruppi per risorsa (
GROUP_RESOURCE) nelle viste giorno e settimana. - iCalendar: né importazione né esportazione di file
.ics. - Stampa impaginata:
of_printeof_print_to_pdf(ereditati) stampano ciò che è a schermo; la stampa di un intero periodo del calendario, impaginata, non esiste. - Tastiera: si seleziona, si apre, si elimina e si naviga da tastiera, ma non si crea né si sposta un appuntamento senza il mouse.
- Data e ora in due colonne: un inizio scritto in due colonne del DataStore non si mappa; lo unisca in una colonna
datetimenella query.
Ereditato dalla base comune #
Questi membri esistono su tutti i componenti visivi — non sono propri di questo. Sono descritti una sola volta, nei capitoli trasversali; questa tabella dice solo dove leggerli.
| Membri | Ruolo | Descritto in |
|---|---|---|
of_count · of_keys_at · of_has | Percorrere ciò che il componente contiene | 3.2 Gli item |
of_reset | Riportare il componente a zero | 3.6 Riportare un componente a zero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Scorciatoie da tastiera del componente | 3.5 Le scorciatoie da tastiera |
of_is_created · of_is_ready · of_get_last_error | Se è nato, se è pronto, cosa è fallito | 3.7 Diagnostica |
of_save_as_png · of_save_as_jpg | Esportare il rendering in immagine | 3.8 Esportare il rendering come immagine |
of_set_redraw | Raggruppare le modifiche in un solo ridisegno | 3.10 Buone pratiche |
of_preload_icons | Icone mostrate senza ritardo | Visualizzazione istantanea: of_icon |
of_set_translation | Tradurre una dicitura del componente | 5.2 Adattare un'etichetta: of_set_translation |
of_focus_webview | Dare il focus al componente | 6.4 Tastiera e focus |
of_print · of_print_to_pdf | Stampare, o scrivere un PDF | 6.9 Stampare |
of_set_property · of_get_property · of_component_name | Pilotare una proprietà per nome | 3.1 Il motore delle proprietà |
is_accessible_name · is_accessible_description | Il nome e la descrizione che dice un lettore di schermo | 3.4 Proprietà ed event opzionali |
Due aiuti non sono ereditati: of_icon e of_escape_markup vivono su n_pbt_utils. Ne dichiari uno — n_pbt_utils lnv_utils, niente da creare — e li chiami su di esso.