PBToolboxAI v5 ← Site

gantt — u_pbt_gantt #

← Komponentenreferenz · Inhalt des Handbuchs

gantt plant ein Projekt: links ein Raster der Aufgaben (Name, Beginn, Ende, Dauer, Fortschritt), rechts ihre Balken auf einer Zeitskala — Tag, Woche, Monat oder Quartal — mit der Linie von heute (in der Akzentfarbe) und grau hinterlegten arbeitsfreien Tagen. Eine Aufgabe, die andere enthält, ist ein Sammelvorgang, dessen Daten und Fortschritt berechnet werden; ein Meilenstein ist eine Raute von einem Tag; ein Pfeil verbindet eine Aufgabe mit der, die auf sie wartet, und der kritische Pfad wird rot gezeichnet. Der Benutzer zieht einen Balken, um ihn zu verschieben, seinen Endrand, um sein Ende zu ändern, das kleine Dreieck darunter für seinen Fortschritt; ue_task_moved, ue_task_resized und ue_progress_changed sagen es Ihnen. Der Plan wird von Hand oder aus einem DataStore gefüllt, der die Änderungen empfängt.

▶ Live ansehen — Demoanwendung, Kachel Gantt chart: die Vorschau, der zugehörige Code und diese Seite, nebeneinander.


Auf einen Blick #

Userobjectu_pbt_gantt
Elementklassen_pbt_gantt_task (of_task(keys))
Dient zuEin Projekt planen und verfolgen: Phasen, Aufgaben, Meilensteine, Verknüpfungen, Verzüge
PrinzipEine Aufgabe wird über ihre Adresse bezeichnet ("build/design"); ein Sammelvorgang berechnet seine Daten und seinen Fortschritt aus dem, was er enthält
Opt-in-Optionenib_veto_changes, ib_write_back, ib_link_by_mouse, ib_critical_path, ib_show_late, ib_read_only

Schnellstart #

// A phase : the task that holds others becomes a summary
uo_plan.of_add_task(/*keys*/ "build", /*label*/ "Build", /*start*/ "2026-11-02", /*end*/ "2026-11-20")
uo_plan.of_add_task(/*keys*/ "build/design", /*label*/ "Design", /*start*/ "2026-11-02", /*end*/ "2026-11-06")
uo_plan.of_add_task(/*keys*/ "build/code", /*label*/ "Code", /*start*/ "2026-11-09", /*end*/ "2026-11-20")

// A milestone : an instant at the end of its day, here the day the code ends
uo_plan.of_add_milestone(/*keys*/ "golive", /*label*/ "Go-live", /*date*/ "2026-11-20")

// The links : a task starts once the one before it is finished
uo_plan.of_add_dependency(/*from_keys*/ "build/design", /*to_keys*/ "build/code")
uo_plan.of_add_dependency(/*from_keys*/ "build/code", /*to_keys*/ "golive")

// What is done already
uo_plan.of_task(/*keys*/ "build/design").id_progress = 100
// event ue_task_moved of uo_plan : (string as_keys, string as_start, string as_end, string as_old_start, string as_old_end)
// Local variables
string ls_code

// The code of the task : the LAST level of its address ("build/design" -> "design")
ls_code = this.of_task(/*keys*/ as_keys).of_key()

// Save the new dates of the task
UPDATE tasks SET start_date = :as_start, end_date = :as_end WHERE code = :ls_code;

Aufgaben, Sammelvorgänge und Meilensteine #

Eine Aufgabe wird über ihre Adresse bezeichnet: ihren Schlüssel unter ihrem Elternteil, die Ebenen durch / verbunden — "build" oben, "build/design" in der zuvor hinzugefügten Aufgabe "build". Eine Aufgabe, die andere enthält, wird zum Sammelvorgang: ein schmaler Balken, seine Daten reichen vom ersten Beginn bis zum letzten Tag dessen, was er enthält, sein Fortschritt ist deren nach Dauer gewichteter Durchschnitt. Weder der Benutzer noch Ihr Code schreiben seine Daten oder seinen Fortschritt: Sie werden berechnet. Sein Winkel, ein Doppelklick auf seine Zeile oder ib_collapsed klappen ihn ein; ue_task_toggled folgt.

Daten sind ganze Tage, jjjj-mm-tt, das Ende inbegriffen: Eine Aufgabe vom 6. bis zum 10. dauert fünf Tage, nach dem Kalender gezählt. of_add_task und of_add_milestone nehmen auch zwei PowerBuilder-Werte vom Typ date. Ein Meilenstein hat keine Dauer: ein Tag, eine Raute, kein Fortschritt. Über den Handle einer Aufgabe (of_task(adresse)) verschiebt das Schreiben von is_start sie (ihre Dauer bleibt), is_end ändert ihr Ende, id_progress ihren Fortschritt; ein von Ihrem Code geschriebener Wert löst nichts aus, wie SetItem. Derselbe Handle liest, was die Aufgabe jetzt ist: ihre Daten, ihre Dauer (of_duration), ihren Platz unter ihren Geschwistern ab 1 (of_position), ihre Ebene (of_level).

// The test starts three days later : it moves, its length stays
uo_plan.of_task(/*keys*/ "test").is_start = "2026-11-26"

// Read back what the summary computed
MessageBox("Build", uo_plan.of_task(/*keys*/ "build").is_end + " - " + String(uo_plan.of_task(/*keys*/ "build").id_progress) + " %")

Verknüpfungen und kritischer Pfad #

of_add_dependency verbindet zwei Aufgaben durch einen Pfeil. Der Standardtyp ist Ende-Anfang (DEP_FS: die nächste beginnt, sobald die vorige beendet ist); DEP_SS (Anfang-Anfang), DEP_FF (Ende-Ende) und DEP_SF (Anfang-Ende) werden als drittes Argument angegeben. Eine Verknüpfung, die die Daten verletzen — die nächste beginnt zu früh —, wird gestrichelt in der Gefahrenfarbe gezeichnet. Eine Verknüpfung zu sich selbst, zwischen einer Aufgabe und dem, was sie enthält, eine schon vorhandene oder eine, die eine Schleife schließen würde, wird abgelehnt (-5). of_dependency_type liest den Typ einer Verknüpfung, of_predecessors und of_successors des Handles die verknüpften Aufgaben.

Mit ib_critical_path = true wird der kritische Pfad in der Gefahrenfarbe gezeichnet: die Aufgaben und Verknüpfungen ohne Puffer, die das Projektende verschieben, wenn sie um einen Tag rutschen. of_is_critical des Handles liest ihn, ob der Pfad gezeichnet ist oder nicht. Mit ib_link_by_mouse = true erscheinen zwei Punkte zu beiden Seiten des Balkens unter dem Mauszeiger: Der Benutzer zieht einen davon auf eine andere Aufgabe, und ue_link_requested nennt die gewünschte Verknüpfung — ihr Typ folgt dem Startpunkt und der Hälfte des Zielbalkens. Das Diagramm fügt nichts von selbst hinzu: of_add_dependency, sobald Ihre Anwendung einverstanden ist. Ein Klick auf einen Pfeil löst ue_dependency_clicked aus. Der Puffer wird in Arbeitstagen gezählt (is_work_days): Eine Aufgabe, die an einem Freitag endet, gefolgt von einer, die am Montag beginnt, hat keinen. Ein Meilenstein ist ein Zeitpunkt am Ende seines Tages: Am Tag gesetzt, an dem die vorangehende Aufgabe endet, ist die Verknüpfung eingehalten, und die nachfolgende Aufgabe beginnt am nächsten Tag. Eine Verknüpfung, die einen Sammelvorgang berührt, bindet die Aufgaben, die er enthält; ein Sammelvorgang wird nie markiert, und ein Pfeil ist nur zwischen zwei roten Balken rot. Eine abgeschlossene Aufgabe (100 %) wird nie markiert: Sie steuert nichts mehr. is_project_end zählt den Puffer bis zu einem Stichtag statt bis zum letzten Ende.


Kalender: Feiertage, Zeitabstände, Markierungen und Verzüge #

Ein Projekt folgt einem Kalender. is_work_days gibt die Arbeitstage der Woche an; of_add_holiday fügt einen Feiertag hinzu, einen nach dem anderen — grau hinterlegt wie ein Wochenende, im Tooltip seines Tages auf der Tagesskala benannt, zählt er weder zum Puffer des kritischen Pfads noch zu einem Zeitabstand. Eine Verknüpfung kann einen Zeitabstand in Arbeitstagen tragen: of_add_dependency("design", "build", DEP_FS, 2) lässt zwei Arbeitstage zwischen dem Ende der einen und dem Beginn der anderen (eine Trocknungszeit, eine Lieferung); negativ ist es ein Vorlauf. Die Regel des Pfeils und der kritische Pfad zählen ihn, of_dependency_lag liest ihn zurück, ein DataStore schreibt ihn hinter den Typ ("12:fs+2"). of_add_marker zeichnet eine senkrechte Markierung am Ende eines Tages — eine vertragliche Frist, das Ende eines Sprints — mit ihrer Beschriftung oben. Schließlich wird mit ib_show_late = true eine verspätete Aufgabe — ihr letzter Tag ist vorbei (is_today) und sie ist nicht fertig — bernsteinfarben schraffiert gezeichnet; of_is_late() ihres Handles und das Feld {late} der Vorlagen sagen es in jedem Fall.

// The public holidays of the year : days off, never float
uo_plan.of_add_holiday(/*date*/ "2026-11-11", /*label*/ "Armistice Day")
uo_plan.of_add_holiday(/*date*/ "2026-12-25", /*label*/ "Christmas")

// The paint dries two working days before the second coat
uo_plan.of_add_dependency(/*from_keys*/ "paint", /*to_keys*/ "second_coat", /*type*/ u_pbt_gantt.DEP_FS, /*lag*/ 2)

// The contractual deadline, in red
uo_plan.of_add_marker(/*key*/ "deadline", /*date*/ "2026-12-18", /*label*/ "Contract", /*color*/ RGB(/*red*/ 196, /*green*/ 43, /*blue*/ 28))

// The tasks behind schedule, in amber
uo_plan.ib_show_late = true

Was der Benutzer ändert #

Der Benutzer zieht einen Balken, um die Aufgabe in ganzen Tagen zu verschieben (ue_task_moved), seinen Endrand, um ihr Ende zu ändern (ue_task_resized), das kleine Dreieck unter dem Balken für ihren Fortschritt (ue_progress_changed); eine Blase zeigt während des Ziehens die Daten oder den Prozentsatz, Esc bricht ab. Mit der Tastatur verschiebt Strg + Links / Rechts die ausgewählte Aufgabe um einen Tag und Strg + Umschalt + Links / Rechts ändert ihr Ende. Die Ereignisse kommen an, wenn die Aufgabe bereits an ihrem Platz ist. Nur eine Geste löst sie aus: ein von Ihrem Code geschriebenes Datum ist stumm, wie SetItem. Ein Sammelvorgang lässt sich nicht ziehen, ebenso wenig eine Aufgabe oder ein Diagramm mit ib_read_only.

Mit ib_veto_changes = true wird ue_task_changing vor jeder dieser drei Änderungen gestellt, mit den Daten und dem Fortschritt, die die Aufgabe annehmen würde: FALSE zurückzugeben lässt sie, wie sie war. Entf auf der ausgewählten Aufgabe löst ue_delete_requested aus: Das Diagramm entfernt nichts, of_remove_task, sobald Ihre Anwendung einverstanden ist.


Skala, Raster und Layout #

Die Skala (is_scale) wird in der Werkzeugleiste gewählt (ib_toolbar, mit der Schaltfläche Heute), mit Strg + Mausrad — der Tag unter dem Mauszeiger bleibt unter dem Mauszeiger — oder durch Ihren Code; ue_scale_changed folgt. Bei den Skalen Tag und Woche sind die arbeitsfreien Tage (is_work_days) grau hinterlegt. Das Raster zeigt die Spalten von is_columns in ihrer Reihenfolge, seine Daten geschrieben nach is_date_format; der Benutzer zieht die Linie zwischen Raster und Diagramm (ii_grid_width) und den Rand einer Spaltenüberschrift für ihre Breite. Was er angeordnet hat — die Skala, die Breiten, die eingeklappten Sammelvorgänge —, liest man mit of_get_layout, gibt es mit of_set_layout zurück, und jede Änderung löst ue_layout_changed mit dem ganzen Layout aus: Speichern Sie es und geben Sie es beim nächsten Start zurück.


Der Text der Balken und Tooltips #

Der Text neben jedem Balken wird über eine Vorlage geschrieben, is_bar_template (standardmäßig "{label}", leer für keinen), und der Tooltip eines Balkens über is_tooltip_title_template und is_tooltip_template: Rich-Text-Auszeichnung, in der {owner} ein Feld der Aufgabe ist — eines Ihrer eigenen (of_set_field), eine Spalte des DataStores, aus dem sie stammt, oder ein eingebautes Feld (label, key, keys, start, end, duration, days, progress, percent, milestone, summary, critical, late, level, parent). {end:d mmm} schreibt ein Datum mit den Kürzeln d dd ddd dddd m mm mmm mmmm yy yyyy, {?owner}…{/owner} behält ein Stück, wenn das Feld etwas enthält, {!owner}…{/owner}, wenn es nichts enthält, {x:raw} behält einen Wert als Auszeichnung, {{ }} sind geschweifte Klammern. {label} und {parent} sind Auszeichnung, wie im Raster; jeder andere Wert wird so angezeigt, wie er ist, nie als Auszeichnung gelesen. Ein eingebauter Feldname gehört nie Ihnen: of_set_field lehnt ihn ab, und eine gleichnamige DataStore-Spalte wird von ihm verdeckt. Eine Aufgabe mit eigenem Tooltip (is_tooltip ihres Handles) zeigt diesen.

// Who does what : a field of our own on a task
uo_plan.of_set_field(/*keys*/ "build/design", /*field*/ "owner", /*value*/ "Ada")

// Beside each bar : the label, the owner when there is one, the end day
uo_plan.is_bar_template = "{label}{?owner} - [b]{owner}[/b]{/owner} [symbol=calendar] {end:d mmm}"

Aus einem DataStore #

of_from_datastore macht aus jeder Zeile eine Aufgabe. Ihr Schlüssel ist der Wert der Spalte ROLE_KEY — eine ID — oder, ohne sie, die RowID der Zeile; die Spalte ROLE_PARENT nennt den Schlüssel der Aufgabe, die sie enthält (leer: oben; ein nicht gefundenes Elternteil oder eine Schleife setzt die Zeile nach oben). Eine Spalte spielt eine Rolle, wenn sie so heißt (key, parent, label, start, end, progress, milestone, color, predecessors) oder wenn of_map es sagt. ROLE_MILESTONE macht aus jedem Wert, der ja sagt, einen Meilenstein; ROLE_COLOR färbt den Balken (ein PowerBuilder-RGB() oder #rrggbb); ROLE_PREDECESSORS listet die abgewarteten Aufgaben, ihre Schlüssel durch Kommas getrennt, den Typ nach :, wenn es nicht Ende-Anfang ist: "12, 14:ss". Datumswerte werden in der regionalen Reihenfolge des Arbeitsplatzes gelesen. Jede Spalte ist ein Feld der Vorlagen. Die Aufgaben eines früheren Ladens verschwinden (ihre Handles werden freigegeben), von Hand hinzugefügte bleiben. Zwei Zeilen mit demselben Schlüssel: Die zweite wird zu key~RowID; ein Schlüssel mit / oder | nimmt die RowID, und seine Kinder finden ihn über seinen Wert; ein Schlüssel, den eine von Hand hinzugefügte Aufgabe schon trägt, wird zu key~RowID, unter demselben Elternteil — keine Zeile geht je verloren. Eine Zeile mit leerem Beginn ist eine nicht geplante Aufgabe: Das Raster sagt es, sie hat keinen Balken und keine Geste verschiebt sie. Datumswerte und Dezimalzahlen werden unabhängig von den Regionaleinstellungen gelesen (12,5 ist 12.5). of_from_datastore nimmt auch ein DataWindow oder ein DataWindowChild: die Zeilen, die der Benutzer neben dem Diagramm sieht, dorthin zurückgeschrieben. Nach einem Reset oder Retrieve des DataStores geben Sie ihn erneut: Seine RowIDs beginnen von vorn.

Mit ib_write_back = true schreibt eine Geste vor ihrem Ereignis in die Zeile: Anfangs- und Enddatum für eine Verschiebung oder ein neues Ende, den Fortschritt für das Dreieck — jeden Wert im Typ seiner Spalte. Das Ereignis liest den aktuellen DataStore, das Update bleibt bei Ihnen. Ein Wert, den der DataStore ablehnt, setzt die Aufgabe zurück, wie sie war, das bereits Geschriebene ebenso, und löst statt des Ereignisses der Geste ue_write_back_failed aus. Nachdem Sie selbst eine Zeile geändert haben, sendet of_reload_row sie erneut an das Diagramm; eine seitdem eingefügte Zeile kommt ebenfalls an. Eine Aufgabe, die Sie entfernen (of_remove_task), bleibt draußen bis zum nächsten of_from_datastore: of_map und das Neuladen einer anderen Zeile bringen sie nicht zurück, of_reload_row ihrer eigenen Zeile schon. Nach of_clear lehnt of_reload_row ab (-5), bis neu geladen wird.

// Which column of the DataStore plays which role
uo_plan.of_map(/*role*/ u_pbt_gantt.ROLE_KEY, /*column*/ "id")
uo_plan.of_map(/*role*/ u_pbt_gantt.ROLE_PARENT, /*column*/ "parent_id")
uo_plan.of_map(/*role*/ u_pbt_gantt.ROLE_START, /*column*/ "start_date")
uo_plan.of_map(/*role*/ u_pbt_gantt.ROLE_END, /*column*/ "end_date")
uo_plan.of_map(/*role*/ u_pbt_gantt.ROLE_PREDECESSORS, /*column*/ "after")

// A change goes into the DataStore, then the rows become tasks
uo_plan.ib_write_back = true
uo_plan.of_from_datastore(/*ads*/ ids_tasks)

Eigenschaften #

EigenschaftTypStandardZweck
is_scalestring"week"Die Zeitskala: SCALE_DAY, SCALE_WEEK, SCALE_MONTH, SCALE_QUARTER. Ein unbekannter Wert wird abgelehnt: der alte bleibt, of_get_last_error sagt warum. Die Werkzeugleiste und Strg + Mausrad ändern sie ebenfalls: live gelesen
is_todaystring""Der Tag der Heute-Linie, in der Akzentfarbe, jjjj-mm-tt; leer: das Datum des Arbeitsplatzes. Ein ungültiges Datum wird abgelehnt: das alte bleibt, of_get_last_error sagt warum
is_work_daysstring"1|2|3|4|5"Die Arbeitstage, ISO-Nummern verbunden durch | (1 = Montag … 7 = Sonntag, 0 für Sonntag akzeptiert); die anderen sind bei den Skalen Tag und Woche grau hinterlegt, und der Puffer des kritischen Pfads zählt nur diese. Es sind nicht die Nummern von DayNumber(), wo 1 = Sonntag ist. Eine Liste, die keinen Tag nennt, wird abgelehnt (of_get_last_error)
is_columnsstring"name|start|end|duration|progress"Die Spalten des Rasters in ihrer Reihenfolge, verbunden durch |: COLUMN_NAME, COLUMN_START, COLUMN_END, COLUMN_DURATION, COLUMN_PROGRESS. Eine unbekannte Spalte oder keine wird abgelehnt: die alte Liste bleibt, of_get_last_error sagt warum
is_date_formatstring""Wie das Raster ein Datum schreibt, mit den Kürzeln d dd ddd dddd m mm mmm mmmm yy yyyy; leer: das kurze Datum der Anzeigesprache
is_bar_templatestring"{label}"Der Text neben jedem Balken, über eine Vorlage geschrieben (siehe oben); leer: kein Text
is_tooltip_title_templatestring"{label}"Der Titel des Tooltips eines Balkens, über eine Vorlage geschrieben; leer bei leerem is_tooltip_template: kein Tooltip
is_tooltip_templatestring"{start} – {end} ({duration}){!milestone}{!summary}[br]{percent}{/summary}{/milestone}"Der Text des Tooltips eines Balkens, über eine Vorlage geschrieben: standardmäßig die Daten, die Dauer und, außer bei einem Meilenstein oder Sammelvorgang, der Fortschritt; {percent} schreibt den Fortschritt als Prozentsatz, wie die Anzeigesprache ihn schreibt (50% auf Englisch)
ib_toolbarbooleantrueDie Werkzeugleiste über dem Diagramm: die Schaltfläche Heute und die vier Skalen
ib_read_onlybooleanfalseDer Benutzer ändert nichts: kein Ziehen, keine Größenänderung, kein Fortschritt, kein Strg + Pfeile, kein Entf, keine Verknüpfung. Er wählt weiterhin aus, klappt ein, öffnet und wechselt die Skala; Ihr Code ändert die Aufgaben weiterhin
ib_veto_changesbooleanfalseOpt-in: vor jeder Verschiebung, jedem neuen Ende oder Fortschritt des Benutzers ue_task_changing fragen. Standardmäßig aus, wie jedes abbrechbare Ereignis der Bibliothek
ib_write_backbooleanfalseEin von of_from_datastore gespeistes Diagramm: Eine Geste schreibt die neuen Daten oder den neuen Fortschritt vor ihrem Ereignis in den DataStore. Eine von Hand hinzugefügte Aufgabe wird nie geschrieben. Eine datetime-Spalte behält ihre Uhrzeit: Das Diagramm verschiebt Tage. Eine Aufgabe eines DataStores ohne Endespalte (ROLE_END) hat keinen Endgriff: Ihr neues Ende könnte nicht geschrieben werden
ib_link_by_mousebooleanfalseZwei Punkte zu beiden Seiten des Balkens unter dem Mauszeiger: Einen davon auf eine andere Aufgabe zu ziehen verlangt eine Verknüpfung (ue_link_requested)
ib_critical_pathbooleanfalseZeichnet den kritischen Pfad in der Gefahrenfarbe: die Aufgaben und Verknüpfungen ohne Puffer, in Arbeitstagen gezählt (is_work_days); eine Verknüpfung, die einen Sammelvorgang berührt, bindet die Aufgaben, die er enthält; eine abgeschlossene Aufgabe (100 %) wird nie markiert
is_project_endstring""Der Stichtag des Projekts, yyyy-mm-dd: Der Puffer des kritischen Pfads wird bis zum Ende dieses Tages gezählt statt bis zum letzten Ende des Plans. Später hat jede Aufgabe Spielraum; früher sind die Aufgaben kritisch, die zu spät enden. Leer: das letzte Ende. Ein Datum, das keines ist, wird abgelehnt (of_get_last_error)
ib_show_latebooleanfalseZeichnet die verspäteten Aufgaben bernsteinfarben schraffiert: eine Aufgabe — weder Sammelvorgang noch Meilenstein —, deren letzter Tag vor is_today liegt und deren Fortschritt unter 100 ist. of_is_late() und das Feld {late} antworten, ob sie gezeichnet wird oder nicht
ii_grid_widthinteger-1 (auto)Die Breite des Rasters in Pixeln. Standardmäßig automatisch (-1): so breit wie die Spalten, die es zeigt, und als diese Breite gelesen (544 mit den fünf Spalten). 0 blendet es aus, höchstens 2000; ein anderer Wert wird abgelehnt (of_get_last_error). Der Benutzer zieht die Linie zwischen Raster und Diagramm oder verschiebt sie mit den Pfeiltasten: live gelesen
ii_row_heightinteger30Die Höhe einer Zeile in Pixeln, von 22 bis 60; ein anderer Wert wird abgelehnt (of_get_last_error)
is_theme_stylestring""Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen
is_theme_modestring""Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen
il_theme_accentlong-1Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der des Designs)
is_tooltipstring""Einfacher Tooltip beim Überfahren der Komponente
is_super_tooltip_titlestring""Titel des erweiterten Tooltips (hat Vorrang vor is_tooltip)
is_super_tooltip_textstring""Text des erweiterten Tooltips (Rich-Markup zulässig)
is_super_tooltip_imagestring""Bild des erweiterten Tooltips

Eigenschaften einer Aufgabe — n_pbt_gantt_task #

Ihr Handle, über of_task(adresse). Ein Lesen fragt das Diagramm, was die Aufgabe jetzt ist; ein geschriebener Wert ist stumm, wie SetItem; ib_collapsed ist ein Befehl und löst ue_task_toggled aus. Ihr of_count() zählt die Aufgaben, die sie enthält, und ihr of_keys_at(n) liefert die Adresse der n-ten.

EigenschaftTypStandardZweck
is_labelstring""Der Name der Aufgabe, im Raster, neben ihrem Balken und in ihrem Tooltip: überall Rich-Text-Auszeichnung ([[1]] für eine Klammer). Leer zeigt die Aufgabe ihren Schlüssel
is_startstring—Der erste Tag, jjjj-mm-tt. Ihn zu schreiben verschiebt die Aufgabe: Ihre Dauer bleibt (schreiben Sie danach is_end, um sie zu ändern). Abgelehnt für einen Sammelvorgang, der seine Daten aus dem bezieht, was er enthält, und für ein ungültiges Datum: of_get_last_error sagt warum
is_endstring—Der letzte Tag, inbegriffen, jjjj-mm-tt: Eine Aufgabe vom 6. bis zum 10. dauert fünf Tage. Abgelehnt vor is_start, für einen Meilenstein (er hat kein eigenes Ende) und für einen Sammelvorgang
id_progressdouble0Der Fortschritt in Prozent (0 bis 100), im Balken gezeichnet. Ein Sammelvorgang liest den nach Dauer gewichteten Durchschnitt dessen, was er enthält; ihn zu schreiben wird abgelehnt, auch für einen Meilenstein
ib_milestonebooleanfalsetrue: ein Meilenstein, ein als Raute gezeichneter Tag, ohne Dauer und Fortschritt. Er ist ein Zeitpunkt am Ende seines Tages: nach einer Aufgabe verknüpft, die an diesem Tag endet, ist die Regel eingehalten; eine nach ihm verknüpfte Aufgabe beginnt am nächsten Tag
ib_collapsedbooleanfalsetrue klappt einen Sammelvorgang ein: Die Aufgaben, die er enthält, verlassen das Raster. ue_task_toggled folgt, wie bei einem Klick auf seinen Winkel. Nur ein Sammelvorgang klappt ein: true auf einer Aufgabe, die nichts enthält, wird abgelehnt (of_get_last_error). Live gelesen
ib_read_onlybooleanfalseDer Benutzer kann diese Aufgabe weder ziehen noch ihre Größe oder ihren Fortschritt ändern noch ihr Löschen verlangen; Ihr Code ändert sie weiterhin
il_accentlong-1Die Farbe des Balkens und seines Fortschritts, als RGB(r,g,b); sie geht einer ROLE_COLOR-Spalte vor. -1 = der Akzent der Komponente. Eine Aufgabe auf dem gezeichneten kritischen Pfad behält die Gefahrenfarbe
il_back_colorlong-1Der Hintergrund der Aufgabe: ihre Zeile im Raster und, als blasse Lasur, die Zeile ihres Balkens im Diagramm, als RGB(r,g,b). -1 = der der Komponente
il_text_colorlong-1Die Textfarbe der Aufgabe: im Raster und neben ihrem Balken. -1 = die der Komponente
il_back_color_hoverlong-1Der Hintergrund der Zeile der Aufgabe im Raster, solange der Mauszeiger darüber ist. -1 = der der Komponente
il_text_color_hoverlong-1Die Textfarbe der Zeile der Aufgabe im Raster, solange der Mauszeiger darüber ist. -1 = die der Komponente
of_duration ( ) → long——Gibt ihre Dauer in Kalendertagen zurück, den letzten Tag inbegriffen; 0 für einen Meilenstein
of_is_summary ( ) → boolean——TRUE, wenn die Aufgabe andere enthält: Ihre Daten und ihr Fortschritt werden berechnet
of_is_critical ( ) → boolean——TRUE, wenn die Aufgabe auf dem kritischen Pfad liegt: kein Puffer, ein Tag Verzug und das Projekt endet einen Tag später. Antwortet, ob ib_critical_path ihn zeichnet oder nicht. Der Puffer wird in Arbeitstagen gezählt (is_work_days); ein Sammelvorgang ist nie kritisch, die Aufgaben, die er enthält, können es sein; eine abgeschlossene Aufgabe (100 %) nie
of_position ( ) → long——Gibt ihren Platz unter den Aufgaben ihres Elternteils zurück, ab 1 gezählt; 0, wenn das Diagramm sie nicht enthält
of_level ( ) → long——Gibt ihre Tiefe zurück: 1 für eine Aufgabe oben, 2 für eine Aufgabe darin…
of_predecessors ( ) → string——Die Adressen der Aufgaben, von denen sie abhängt, verbunden durch |; leer, wenn keine
of_successors ( ) → string——Die Adressen der Aufgaben, die von ihr abhängen, verbunden durch |; leer, wenn keine
of_is_late ( ) → boolean——Verspätet: ihr letzter Tag liegt vor is_today und sie ist nicht fertig (Fortschritt unter 100). Ein Sammelvorgang und ein Meilenstein sind es nie; antwortet, ob ib_show_late es zeichnet oder nicht
of_row ( ) → long——Gibt die Zeilennummer von heute zurück, im DataStore von of_from_datastore, der Zeile, aus der die Aufgabe stammt — welchen Schlüssel sie auch annehmen musste, und nach einer Sortierung oder einem Filter. 0 für eine von Hand hinzugefügte Aufgabe oder eine, deren Zeile verschwunden ist
is_tooltipstring""Einfacher Tooltip beim Überfahren des Items
is_super_tooltip_titlestring""Titel des erweiterten Item-Tooltips (hat Vorrang vor is_tooltip)
is_super_tooltip_textstring""Text des erweiterten Item-Tooltips (Rich-Markup zulässig)
is_super_tooltip_imagestring""Bild des erweiterten Item-Tooltips

Konstanten #

KonstanteWertBedeutung
SCALE_DAY"day"Eine Spalte pro Tag
SCALE_WEEK"week"Eine Spalte pro Woche — die Standardskala
SCALE_MONTH"month"Eine Spalte pro Monat
SCALE_QUARTER"quarter"Eine Spalte pro Quartal
COLUMN_NAME"name"Der Name der Aufgabe, als Baum
COLUMN_START"start"Der erste Tag
COLUMN_END"end"Der letzte Tag
COLUMN_DURATION"duration"Die Dauer in Tagen
COLUMN_PROGRESS"progress"Der Fortschritt in Prozent
DEP_FS"fs"Ende-Anfang: die nächste beginnt, sobald die vorige beendet ist (die übliche Verknüpfung)
DEP_SS"ss"Anfang-Anfang: sie beginnen zusammen
DEP_FF"ff"Ende-Ende: sie enden zusammen
DEP_SF"sf"Anfang-Ende: die nächste endet, wenn die vorige beginnt
CHANGE_MOVE"move"Eine Verschiebung: beide Daten
CHANGE_RESIZE"resize"Ein neues Ende
CHANGE_PROGRESS"progress"Ein neuer Fortschritt
ROLE_KEY"key"Der Schlüssel der Aufgabe (eine ID); ohne sie die RowID
ROLE_PARENT"parent"Der Schlüssel der Aufgabe, die sie enthält
ROLE_LABEL"label"Ihr Name
ROLE_START"start"Ihr erster Tag
ROLE_END"end"Ihr letzter Tag (leer: der erste)
ROLE_PROGRESS"progress"Ihr Fortschritt, von 0 bis 100
ROLE_MILESTONE"milestone"Ein Meilenstein, wenn der Wert ja sagt
ROLE_COLOR"color"Die Farbe ihres Balkens
ROLE_PREDECESSORS"predecessors"Die Aufgaben, auf die sie wartet: "12, 14:ss, 15:fs+2" (ein Zeitabstand in Arbeitstagen steht hinter dem Typ)

Methoden #

MethodeZweck
of_add_dependency (string as_from_keys, string as_to_keys)Fügt eine Ende-Anfang-Verknüpfung hinzu: as_to_keys beginnt, sobald as_from_keys beendet ist. Gibt 0 zurück, sobald hinzugefügt, -5 oder -2 wie die Form mit drei Argumenten
of_add_dependency (string as_from_keys, string as_to_keys, string as_type)Fügt eine Verknüpfung vom Typ DEP_FS, DEP_SS, DEP_FF oder DEP_SF hinzu, als Pfeil gezeichnet. Gibt 0 zurück, sobald hinzugefügt, -5 für eine unbekannte Aufgabe, eine Verknüpfung zu sich selbst oder zwischen einer Aufgabe und dem, was sie enthält, eine schon vorhandene (welchen Typs auch immer), eine, die eine Schleife schließen würde, oder einen unbekannten Typ, -2, wenn die Komponente nicht erstellt ist
of_add_dependency (string as_from_keys, string as_to_keys, string as_type, long al_lag)Dieselbe Verknüpfung mit einem Zeitabstand in Arbeitstagen (is_work_days, ohne die Feiertage): 2 lässt zwei Arbeitstage zwischen dem Ende der einen und dem Beginn der anderen, eine negative Zahl ist ein Vorlauf. Die Regel des Pfeils und der kritische Pfad zählen ihn. Gibt 0 zurück, sobald hinzugefügt, -5 wie die Form mit drei Argumenten oder für einen Zeitabstand über 999 Tage, -2, wenn die Komponente nicht erstellt ist
of_add_holiday (string as_date)Fügt einen Feiertag ohne Namen hinzu. Gibt 0 zurück, sobald hinzugefügt, -5 oder -2 wie die Form mit zwei Argumenten
of_add_holiday (string as_date, string as_label)Fügt einen Feiertag hinzu, jjjj-mm-tt: ein arbeitsfreier Tag, was auch immer is_work_days sagt, grau hinterlegt wie ein Wochenende, von as_label im Tooltip seines Tages auf der Tagesskala benannt; der Puffer des kritischen Pfads und der Zeitabstand einer Verknüpfung zählen ihn nicht. Einer nach dem anderen; of_clear behält ihn, of_reset löscht ihn. Gibt 0 zurück, sobald hinzugefügt, -5 für ein ungültiges Datum oder einen Tag, der schon Feiertag ist, -2, wenn die Komponente nicht erstellt ist
of_add_holiday (date ad_date, string as_label)Dasselbe aus einem PowerBuilder-Wert vom Typ date. Gibt 0 zurück, sobald hinzugefügt, -5 auch für ein Null-Datum
of_add_marker (string as_key, string as_date, string as_label)Fügt eine senkrechte Markierung in der gedämpften Textfarbe hinzu. Gibt 0 zurück, sobald hinzugefügt, -5 oder -2 wie die Form mit vier Argumenten
of_add_marker (string as_key, string as_date, string as_label, long al_color)Fügt eine senkrechte Markierung hinzu: eine gestrichelte Linie am Ende ihres Tages (eine Frist gilt bis zum Ende ihres Tages, wie ein Meilenstein), ihre Beschriftung — Rich-Text-Auszeichnung — oben im Diagramm: eine vertragliche Frist, das Ende eines Sprints, ein Einfrieren. al_color ist eine RGB()-Farbe, -1 für die gedämpfte Textfarbe. Gibt 0 zurück, sobald hinzugefügt, -5 für einen Schlüssel, der keiner sein kann (leer, mit / oder |), einen schon vergebenen Schlüssel oder ein ungültiges Datum, -2, wenn die Komponente nicht erstellt ist
of_add_milestone (string as_keys, string as_label, string as_date)Fügt an seiner Adresse einen Meilenstein hinzu: ein Tag, eine Raute, ohne Dauer. Gibt 0 zurück, sobald hinzugefügt, -5 wie of_add_task, -2, wenn die Komponente nicht erstellt ist
of_add_milestone (string as_keys, string as_label, date ad_date)Dasselbe aus einem PowerBuilder-date. Gibt 0 zurück, sobald hinzugefügt, -5 auch für ein Null-Datum
of_add_task (string as_keys, string as_label, string as_start, string as_end)Fügt an ihrer Adresse eine Aufgabe hinzu: "phase1" oben, "phase1/design" in der zuvor hinzugefügten Aufgabe "phase1" (sie wird zum Sammelvorgang). Daten jjjj-mm-tt, das Ende inbegriffen ("": ein Tag). Gibt 0 zurück, sobald hinzugefügt, -5 für eine Adresse mit leerer Ebene oder einem Schlüssel mit |, eine schon vergebene Adresse, ein unbekanntes Elternteil, ein ungültiges Datum oder ein Ende vor dem Beginn, -2, wenn die Komponente nicht erstellt ist
of_add_task (string as_keys, string as_label, date ad_start, date ad_end)Dasselbe aus zwei PowerBuilder-Werten vom Typ date, das Ende ist der letzte Tag, inbegriffen. Gibt 0 zurück, sobald hinzugefügt, -5 auch für einen Null-Beginn (ein Null-Ende: ein Tag)
of_clear ( )Leert das Diagramm: Aufgaben, Verknüpfungen, ihre Handles und die Zeilen des DataStores (er bleibt gebunden, für ein neues of_from_datastore; of_reload_row lehnt bis dahin ab); die Optionen bleiben. Gibt 0 zurück, sobald angewendet, -2, wenn die Komponente nicht erstellt ist
of_clear_dependencies ( )Entfernt alle Verknüpfungen; die Aufgaben bleiben. Gibt 0 zurück, sobald angewendet, -2, wenn die Komponente nicht erstellt ist
of_clear_holidays ( )Entfernt alle Feiertage: nur is_work_days sagt, welche Tage Arbeitstage sind. Gibt 0 zurück, sobald angewendet, -2, wenn die Komponente nicht erstellt ist
of_clear_markers ( )Entfernt alle Markierungen; of_clear behält sie, wie die Feiertage. Gibt 0 zurück, sobald angewendet, -2, wenn die Komponente nicht erstellt ist
of_clear_selection ( )Lässt keine Aufgabe ausgewählt: ue_selection_changed folgt mit leerer Adresse; nichts ausgewählt, nichts wird ausgelöst. Gibt 0 zurück, sobald angewendet, -2, wenn die Komponente nicht erstellt ist
of_collapse_all ( )Klappt alle Sammelvorgänge ein: ue_task_toggled folgt für jeden, der offen war, dann einmal ue_layout_changed. Gibt 0 zurück, sobald angewendet, -2, wenn die Komponente nicht erstellt ist
of_dependency_lag (string as_from_keys, string as_to_keys)Gibt den Zeitabstand der Verknüpfung von einer Aufgabe zu einer anderen in Arbeitstagen zurück, live gelesen: negativ für einen Vorlauf, 0 ohne Zeitabstand oder ohne Verknüpfung
of_dependency_type (string as_from_keys, string as_to_keys)Der Typ der Verknüpfung von einer Aufgabe zu einer anderen (DEP_FS…), leer, wenn es keine gibt. Live gelesen
of_expand_all ( )Öffnet alle Sammelvorgänge: ue_task_toggled folgt für jeden, der eingeklappt war, dann einmal ue_layout_changed. Gibt 0 zurück, sobald angewendet, -2, wenn die Komponente nicht erstellt ist
of_from_datastore (datastore ads)Macht aus jeder Zeile des DataStores eine Aufgabe (siehe oben). Die Aufgaben eines früheren Ladens verschwinden, von Hand hinzugefügte bleiben, ihre Handles auch. Gibt 0 zurück, sobald geladen, -5, wenn der DataStore ungültig ist oder keine Spalte hat, -2, wenn die Komponente nicht erstellt ist
of_from_datastore (datawindow adw)Dasselbe aus den Zeilen eines DataWindow — desjenigen, das der Benutzer daneben sieht: ib_write_back schreibt in dieses DataWindow. Ein DataWindow, das seine Daten nicht teilen kann, wird abgelehnt. Gibt 0 zurück, sobald geladen, -5, wenn das DataWindow ungültig ist, keine Spalte hat oder nicht teilt, -2, wenn die Komponente nicht erstellt ist
of_from_datastore (datawindowchild adwc)Dasselbe aus den Zeilen eines DataWindowChild (ein DropDown-DataWindow, ein verschachtelter Bericht), von ib_write_back zurückgeschrieben. Gibt 0 zurück, sobald geladen, -5, wenn es ungültig ist, keine Spalte hat oder nicht teilt, -2, wenn die Komponente nicht erstellt ist
of_get_field (string as_keys, string as_field)Liest ein Feld einer Aufgabe, live: eines Ihrer eigenen, eine Spalte ihres DataStores oder ein eingebautes Feld (duration, critical…) — das den angezeigten Text liefert und eine gleichnamige Spalte verdeckt. Eine leere Zeichenkette, wenn sie keines hat
of_get_last_error ( )Warum das letzte Schreiben einer Eigenschaft abgelehnt wurde (ein ungültiges Datum, die Daten eines Sammelvorgangs, eine unbekannte Skala oder Spalte); sonst der letzte Fehler der Bibliothek
of_get_layout ( )Was der Benutzer angeordnet hat, als JSON: {"scale":"week","gridWidth":-1,"columns":[{"key":"name","width":200},...],"collapsed":["phase2"]} — die Skala, die Breite des Rasters und jeder Spalte, die eingeklappten Sammelvorgänge. Zu speichern, dann an of_set_layout zurückzugeben. Live gelesen
of_holidays ( )Die Feiertage, live gelesen: jjjj-mm-tt, verbunden durch |, in Datumsreihenfolge; leer, wenn keine
of_map (string as_role, string as_column)Gibt einer Spalte des DataStores eine Rolle (ROLE_KEY, ROLE_PARENT, ROLE_LABEL, ROLE_START, ROLE_END, ROLE_PROGRESS, ROLE_MILESTONE, ROLE_COLOR, ROLE_PREDECESSORS), vor oder nach of_from_datastore: danach werden die Zeilen neu gelesen. Eine leere Spalte gibt die Rolle der gleichnamigen Spalte zurück. Was auf den Aufgaben gesetzt wurde, bleibt (Einklappen, Schreibschutz, Felder, Farben, vom Code hinzugefügte Verknüpfungen). Ein neues ROLE_KEY oder ROLE_PARENT gibt den Aufgaben der Zeilen neue Adressen: Ihre Handles werden freigegeben, die der von Hand hinzugefügten Aufgaben bleiben. Gibt 0 zurück, sobald gesetzt, -5 für eine unbekannte Rolle oder eine Spalte, die der DataStore nicht hat, -2, wenn die Komponente nicht erstellt ist
of_markers ( )Die Schlüssel der Markierungen, live gelesen, in ihrer Reihenfolge, verbunden durch |; leer, wenn keine
of_reload_row (long al_row)Sendet eine Zeile des DataStores von of_from_datastore erneut an das Diagramm, jetzt gelesen, nachdem Ihr Code sie geändert hat (SetItem, ein Bearbeitungsfenster); al_row ist ihre heutige Zeilennummer. Die Aufgabe folgt ihrer Zeile an Ort und Stelle: Was auf ihr gesetzt wurde (Einklappen, Schreibschutz, Felder, Farben, vom Code hinzugefügte Verknüpfungen), bleibt, ein laufendes Ziehen geht weiter, nichts wird ausgelöst. Eine Zeile, deren Schlüssel oder Elternteil sich geändert hat, verschiebt ihre Aufgabe mit dem, was auf ihr gesetzt wurde; eine seitdem eingefügte Zeile kommt ebenfalls an. Gibt 0 zurück, sobald gesendet, -5, wenn kein DataStore gebunden ist, das Diagramm seit of_clear keine Zeilen hat oder die Zeile nicht existiert (of_get_last_error sagt, was), -2, wenn die Komponente nicht erstellt ist
of_remove_dependency (string as_from_keys, string as_to_keys)Entfernt die Verknüpfung von einer Aufgabe zu einer anderen. Gibt 0 zurück, sobald entfernt, -5 für eine Verknüpfung, die das Diagramm nicht hat, -2, wenn die Komponente nicht erstellt ist
of_remove_holiday (string as_date)Der Tag wird wieder ein Arbeitstag. Gibt 0 zurück, sobald entfernt, -5 für einen Tag, der kein Feiertag dieses Diagramms ist, -2, wenn die Komponente nicht erstellt ist
of_remove_marker (string as_key)Entfernt eine Markierung. Gibt 0 zurück, sobald entfernt, -5 für einen Schlüssel, den dieses Diagramm nicht hat, -2, wenn die Komponente nicht erstellt ist
of_remove_task (string as_keys)Entfernt eine Aufgabe, alles, was sie enthält, und jede Verknüpfung, die sie berührt, und gibt ihre Handles frei; das Entfernen der ausgewählten Aufgabe leert die Auswahl. Die Aufgabe einer DataStore-Zeile bleibt draußen bis zum nächsten of_from_datastore; of_reload_row ihrer Zeile bringt sie zurück. Gibt 0 zurück, sobald entfernt, -5 für eine Adresse, die das Diagramm nicht hat, -2, wenn die Komponente nicht erstellt ist
of_reset ( )Leert das Diagramm, vergisst den DataStore und setzt jede Eigenschaft auf ihren Standardwert, jede Spalte auf ihre Breite zurück. Gibt 0 zurück, sobald angewendet, -2, wenn die Komponente nicht erstellt ist
of_scroll_to_date (string as_date)Scrollt die Zeitachse, bis dieser Tag (jjjj-mm-tt) sichtbar ist, im ersten Drittel der Ansicht. Gibt 0 zurück, sobald angewendet, -5 für ein ungültiges Datum, -2, wenn die Komponente nicht erstellt ist
of_scroll_to_task (string as_keys)Zeigt eine Aufgabe: Die Sammelvorgänge, die sie enthalten, öffnen sich (ue_task_toggled für jeden), dann scrollt das Diagramm, bis ihre Zeile und ihr Balken sichtbar sind. Gibt 0 zurück, sobald angewendet, -5 für eine Aufgabe, die das Diagramm nicht hat, -2, wenn die Komponente nicht erstellt ist
of_select_task (string as_keys)Wählt eine Aufgabe wie ein Klick aus, ohne die Ansicht zu verschieben (wie SelectRow eines DataWindows), und ue_selection_changed folgt. Gibt 0 zurück, sobald ausgewählt (oder schon ausgewählt: nichts wird ausgelöst), -5 für eine unbekannte oder nicht gezeichnete Aufgabe (in einem eingeklappten Sammelvorgang, jenseits der Demo-Grenze), -2, wenn die Komponente nicht erstellt ist
of_selected_key ( )Die Adresse der ausgewählten Aufgabe, wer sie auch ausgewählt hat; leer, wenn keine. Live gelesen
of_set_field (string as_keys, string as_field, string as_value)Gibt einer Aufgabe ein eigenes Feld für die Vorlagen; es geht einer gleichnamigen DataStore-Spalte vor. Ein Feldname: Buchstaben, Ziffern und _, ohne führende Ziffer. Gibt 0 zurück, sobald gesetzt, -5 für eine unbekannte Aufgabe, einen ungültigen Namen oder den Namen eines eingebauten Felds (label, start…), -2, wenn die Komponente nicht erstellt ist
of_set_layout (string as_layout_json)Gibt ein mit of_get_layout gelesenes oder von ue_layout_changed empfangenes Layout zurück: die Skala, die Breiten und welche Sammelvorgänge eingeklappt sind (die nicht genannten öffnen sich); eine dem Diagramm unbekannte Spalte oder Aufgabe wird ignoriert. ue_layout_changed wird einmal ausgelöst, wenn sich etwas geändert hat (weder ue_task_toggled noch ue_scale_changed: es stellt einen Zustand wieder her). Gibt 0 zurück, sobald angewendet, -5, wenn der Text leer oder kein JSON-Objekt ist, -2, wenn die Komponente nicht erstellt ist
of_task (string as_keys)Gibt den Handle einer Aufgabe zurück, über ihre Adresse (beim ersten Zugriff erstellt, freigegeben, wenn die Aufgabe entfernt wird)

Ereignisse #

EventAusgelöst wenn
ue_task_moved (string as_keys, string as_start, string as_end, string as_old_start, string as_old_end)Der Benutzer hat eine Aufgabe verschoben: ihren Balken gezogen oder Strg + Links / Rechts. as_start und as_end sind ihre neuen Tage, as_old_start und as_old_end die, die sie hatte, jjjj-mm-tt — was ein Protokoll oder ein Rückgängigmachen braucht. Die Aufgabe ist bereits an ihrem Platz; mit ib_write_back ist der DataStore bereits geschrieben. Ein von Ihrem Code geschriebenes Datum löst nichts aus
ue_task_resized (string as_keys, string as_start, string as_end, string as_old_start, string as_old_end)Der Benutzer hat das Ende einer Aufgabe geändert: den Endrand ihres Balkens gezogen oder Strg + Umschalt + Links / Rechts. Die alten Tage kommen mit den neuen
ue_progress_changed (string as_keys, double ad_progress, double ad_old_progress)Der Benutzer hat den Fortschritt einer Aufgabe geändert: das kleine Dreieck unter ihrem Balken gezogen oder Strg + Auf / Ab (10 Punkte). ad_progress ist der neue, in Prozent, ad_old_progress der, den sie hatte
ue_task_changing (string as_keys, string as_kind, string as_start, string as_end, double ad_progress) → booleanAbbrechbar, vor einer Verschiebung, einem neuen Ende oder einem Fortschritt des Benutzers gestellt, nur wenn ib_veto_changes = true. as_kind sagt, welche: CHANGE_MOVE, CHANGE_RESIZE oder CHANGE_PROGRESS; die Werte sind die, die die Aufgabe annehmen würde. FALSE zurückzugeben lässt sie, wie sie war
ue_task_clicked (string as_keys)Eine Aufgabe wurde angeklickt (und ausgewählt): ihre Zeile im Raster oder ihr Balken. Nicht am Ende eines Ziehens
ue_task_opened (string as_keys)Doppelklick auf eine Aufgabe oder Eingabe: Öffnen Sie Ihren Editor. Ein Doppelklick auf die Zeile eines Sammelvorgangs klappt ihn stattdessen ein oder auf
ue_task_rclicked (string as_keys, long al_x, long al_y)Rechtsklick auf eine Aufgabe (zuerst ausgewählt) oder die Menütaste (Umschalt + F10) auf der ausgewählten Aufgabe. al_x, al_y sind Bildschirmpixel; für ein PowerBuilder-Menü PopMenu(PointerX(), PointerY()) Ihres Fensters
ue_selection_changed (string as_from_keys, string as_keys)Die ausgewählte Aufgabe hat sich geändert: Klick, Tastatur, Ihr Code (of_select_task, of_clear_selection), oder die ausgewählte Aufgabe hat das Raster verlassen (entfernt, in einem eingeklappten Sammelvorgang: as_keys ist dann leer)
ue_task_toggled (string as_keys, boolean ab_collapsed)Ein Sammelvorgang wurde eingeklappt (ab_collapsed = TRUE) oder geöffnet: sein Winkel, ein Doppelklick auf seine Zeile, die Tastatur, sein von Ihrem Code gesetztes ib_collapsed, of_expand_all, of_collapse_all, of_scroll_to_task
ue_delete_requested (string as_keys)Entf wurde auf der ausgewählten Aufgabe gedrückt. Das Diagramm entfernt nichts: of_remove_task, sobald Ihre Anwendung einverstanden ist. Nie auf einer schreibgeschützten Aufgabe oder einem schreibgeschützten Diagramm
ue_link_requested (string as_from_keys, string as_to_keys, string as_type)Der Benutzer hat eine Verknüpfung von einer Aufgabe zu einer anderen gezogen (ib_link_by_mouse); as_type ist eine der DEP_-Konstanten. Das Diagramm fügt nichts hinzu: of_add_dependency, sobald Ihre Anwendung einverstanden ist
ue_dependency_clicked (string as_from_keys, string as_to_keys, string as_type)Ein Pfeil zwischen zwei Aufgaben wurde angeklickt
ue_scale_changed (string as_scale)Die Skala hat sich geändert: die Werkzeugleiste, Strg + Mausrad oder is_scale, von Ihrem Code gesetzt
ue_layout_changed (string as_layout_json)Das Layout hat sich geändert: die Skala, die Breite des Rasters oder einer Spalte, ein eingeklappter oder geöffneter Sammelvorgang (durch den Benutzer oder Ihren Code) oder of_set_layout. as_layout_json ist das ganze Layout, wie es of_get_layout liefert: Speichern Sie es
ue_write_back_failed (string as_keys, string as_col, string as_value, string as_reason)ib_write_back: Der DataStore hat einen neuen Wert einer Aufgabe abgelehnt (ein Typ, den seine Spalte nicht aufnimmt, eine seit dem Laden gelöschte Zeile). Die Aufgabe ist zurückgesetzt, und das Ereignis der Geste wird nicht ausgelöst
ue_ready ( )Die Komponente ist fertig geladen; alles zuvor Gesendete wurde nachgespielt
ue_runtime_missing ( )Die WebView2-Runtime fehlt: die Komponente bleibt leer
ue_bg_color (long al_color)Die Komponente hat ihre Design-Hintergrundfarbe berechnet; das Userobject hat sie bereits übernommen (backcolor)

Tastatur und Maus #


Beispiele #

Planungsregeln #

// Once, after the plan is built : ask before each change of the user
uo_plan.ib_veto_changes = true

// event ue_task_changing of uo_plan : nothing ends after the go-live
if as_keys <> "golive" and as_end > this.of_task(/*keys*/ "golive").is_start then return false

// and nothing moves into the past : a task already started keeps its start
if as_start < String(Today(), "yyyy-mm-dd") and as_start < this.of_task(/*keys*/ as_keys).is_start then return false
return true

Mit der Maus gezogene Verknüpfungen #

// Once : two dots beside the bar under the pointer, the critical path in red
uo_plan.ib_link_by_mouse = true
uo_plan.ib_critical_path = true

// event ue_link_requested of uo_plan : the chart adds nothing by itself
if this.of_add_dependency(/*from_keys*/ as_from_keys, /*to_keys*/ as_to_keys, /*type*/ as_type) = -5 then
	MessageBox("Plan", "This link cannot be added.")
end if

// event ue_dependency_clicked of uo_plan : a click on an arrow removes it
this.of_remove_dependency(/*from_keys*/ as_from_keys, /*to_keys*/ as_to_keys)

Das Layout beim nächsten Start wiederfinden #

// The layout stored at the last start, if any
uo_plan.of_set_layout(/*layout_json*/ ProfileString(gs_ini, "plan", "layout", ""))

// event ue_layout_changed of uo_plan : store every change
SetProfileString(gs_ini, "plan", "layout", as_layout_json)

Eine Aufgabe in Ihrem Fenster öffnen #

// event ue_task_opened of uo_plan
// Local variables
long ll_row

// The row of the task in the DataStore, whatever key the task had to take
ll_row = this.of_task(/*keys*/ as_keys).of_row()

// A task added by hand has no row
if ll_row = 0 then return

// Edited in your window, then the task follows its row
OpenWithParm(w_task_edit, ll_row)
this.of_reload_row(/*row*/ ll_row)

Bewährte Praxis #

Vom gemeinsamen Sockel geerbt #

Diese Mitglieder gibt es bei jeder visuellen Komponente — sie sind nicht dieser eigen. Sie werden einmal in den übergreifenden Kapiteln beschrieben; diese Tabelle sagt nur, wo man sie liest.

MitgliederRolleBeschrieben in
of_count · of_keys_at · of_hasDurchlaufen, was die Komponente enthält3.2 Die Items
of_resetDie Komponente zurücksetzen3.6 Eine Komponente zurücksetzen: of_reset()
of_register_shortcut · of_clear_shortcutsTastenkürzel der Komponente3.5 Tastenkombinationen
of_is_created · of_is_ready · of_get_last_errorOb sie entstanden ist, ob sie bereit ist, was fehlschlug3.7 Diagnose
of_save_as_png · of_save_as_jpgDie Darstellung als Bild exportieren3.8 Die Darstellung als Bild exportieren
of_set_redrawÄnderungen zu einem einzigen Neuzeichnen bündeln3.10 Best Practices
of_preload_iconsSymbole ohne VerzögerungSofortige Anzeige: of_icon
of_set_translationEine Beschriftung der Komponente übersetzen5.2 Eine Beschriftung anpassen: of_set_translation
of_focus_webviewDer Komponente den Fokus geben6.4 Tastatur und Fokus
of_print · of_print_to_pdfDrucken oder ein PDF schreiben6.9 Drucken
of_set_property · of_get_property · of_component_nameEine Eigenschaft über ihren Namen steuern3.1 Die Eigenschaften-Engine
is_accessible_name · is_accessible_descriptionName und Beschreibung, die ein Bildschirmleser sagt3.4 Optionale Eigenschaften und Events

Zwei Helfer werden nicht geerbt: of_icon und of_escape_markup liegen auf n_pbt_utils. Deklarieren Sie eines — n_pbt_utils lnv_utils, nichts zu erzeugen — und rufen Sie sie darauf auf.

← Komponentenreferenz · Inhalt des Handbuchs