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_resizedundue_progress_changedsagen 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 #
| Userobject | u_pbt_gantt |
| Elementklasse | n_pbt_gantt_task (of_task(keys)) |
| Dient zu | Ein Projekt planen und verfolgen: Phasen, Aufgaben, Meilensteine, Verknüpfungen, Verzüge |
| Prinzip | Eine Aufgabe wird über ihre Adresse bezeichnet ("build/design"); ein Sammelvorgang berechnet seine Daten und seinen Fortschritt aus dem, was er enthält |
| Opt-in-Optionen | ib_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 #
| Eigenschaft | Typ | Standard | Zweck |
|---|---|---|---|
is_scale | string | "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_today | string | "" | 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_days | string | "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_columns | string | "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_format | string | "" | 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_template | string | "{label}" | Der Text neben jedem Balken, über eine Vorlage geschrieben (siehe oben); leer: kein Text |
is_tooltip_title_template | string | "{label}" | Der Titel des Tooltips eines Balkens, über eine Vorlage geschrieben; leer bei leerem is_tooltip_template: kein Tooltip |
is_tooltip_template | string | "{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_toolbar | boolean | true | Die Werkzeugleiste über dem Diagramm: die Schaltfläche Heute und die vier Skalen |
ib_read_only | boolean | false | Der 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_changes | boolean | false | Opt-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_back | boolean | false | Ein 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_mouse | boolean | false | Zwei 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_path | boolean | false | Zeichnet 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_end | string | "" | 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_late | boolean | false | Zeichnet 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_width | integer | -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_height | integer | 30 | Die Höhe einer Zeile in Pixeln, von 22 bis 60; ein anderer Wert wird abgelehnt (of_get_last_error) |
is_theme_style | string | "" | Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen |
is_theme_mode | string | "" | Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen |
il_theme_accent | long | -1 | Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der des Designs) |
is_tooltip | string | "" | Einfacher Tooltip beim Überfahren der Komponente |
is_super_tooltip_title | string | "" | Titel des erweiterten Tooltips (hat Vorrang vor is_tooltip) |
is_super_tooltip_text | string | "" | Text des erweiterten Tooltips (Rich-Markup zulässig) |
is_super_tooltip_image | string | "" | 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.
| Eigenschaft | Typ | Standard | Zweck |
|---|---|---|---|
is_label | string | "" | 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_start | string | — | 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_end | string | — | 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_progress | double | 0 | Der 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_milestone | boolean | false | true: 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_collapsed | boolean | false | true 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_only | boolean | false | Der 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_accent | long | -1 | Die 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_color | long | -1 | Der 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_color | long | -1 | Die Textfarbe der Aufgabe: im Raster und neben ihrem Balken. -1 = die der Komponente |
il_back_color_hover | long | -1 | Der Hintergrund der Zeile der Aufgabe im Raster, solange der Mauszeiger darüber ist. -1 = der der Komponente |
il_text_color_hover | long | -1 | Die 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_tooltip | string | "" | Einfacher Tooltip beim Überfahren des Items |
is_super_tooltip_title | string | "" | Titel des erweiterten Item-Tooltips (hat Vorrang vor is_tooltip) |
is_super_tooltip_text | string | "" | Text des erweiterten Item-Tooltips (Rich-Markup zulässig) |
is_super_tooltip_image | string | "" | Bild des erweiterten Item-Tooltips |
Konstanten #
| Konstante | Wert | Bedeutung |
|---|---|---|
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 #
| Methode | Zweck |
|---|---|
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 #
| Event | Ausgelö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) → boolean | Abbrechbar, 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 #
- Einen Balken zu ziehen verschiebt ihn in ganzen Tagen, sein Endrand ändert sein Ende, das kleine Dreieck darunter seinen Fortschritt; eine Blase zeigt die Daten oder den Prozentsatz, Esc bricht ab.
- Auf / Ab: die Aufgabe darüber, darunter; Pos1 / Ende: die erste, die letzte; Bild auf / Bild ab: eine Seite höher, tiefer. Die Ansicht folgt der ausgewählten Aufgabe.
- Rechts öffnet einen eingeklappten Sammelvorgang und geht dann zu seiner ersten Aufgabe hinunter; Links klappt einen offenen Sammelvorgang ein und geht dann zu seinem Elternteil hinauf. Von rechts nach links gelesen, tauschen Links und Rechts.
- Strg + Links / Rechts verschiebt die Aufgabe um einen Tag, Strg + Umschalt + Links / Rechts ändert ihr Ende um einen Tag.
- Eingabe oder Doppelklick öffnet die Aufgabe, Entf verlangt ihr Löschen, Rechtsklick oder Menütaste (Umschalt + F10):
ue_task_rclicked. Ein Doppelklick auf die Zeile eines Sammelvorgangs klappt ihn ein oder auf. - Strg + Mausrad wechselt die Skala, wobei der Tag unter dem Mauszeiger an seinem Platz bleibt; das Mausrad über dem Raster scrollt das Diagramm.
- Die Linie zwischen Raster und Diagramm zu ziehen ändert die Breite des Rasters, den Rand einer Spaltenüberschrift zu ziehen die ihrer Spalte.
- Das Diagramm ist ein Tab-Stopp, die Linie zwischen Raster und Diagramm ein zweiter: Links / Rechts verschieben sie um 10 px (Umschalt: 50), Pos1 blendet das Raster aus.
- Alt + Links / Rechts scrollt die Zeit, die Auswahl bleibt; ein Klick in den leeren Teil einer Zeile des Diagramms wählt ihre Aufgabe aus.
- Nahe einem Rand scrollt das Diagramm beim Ziehen von selbst: entlang der Zeit für einen Balken, nach oben oder unten für eine Verknüpfung.
- Die Symbolleiste ist ein Tab-Stopp: Links / Rechts gehen von Schaltfläche zu Schaltfläche, Eingabe oder Leertaste drückt sie. Im Diagramm wechselt Strg + Plus / Minus die Skala, Strg + Pos1 holt heute in den Blick, Strg + Auf / Ab ändert den Fortschritt der Aufgabe um 10 Punkte.
- Beim Ziehen einer Verknüpfung wird der Zielbalken umrandet, mit einem dicken Rand auf der Seite, die sie halten würde; eine schon vorhandene Verknüpfung oder eine, die eine Schleife schließen würde, wird grau umrandet und nicht angefragt.
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 #
- Phasen als Sammelvorgänge: zwei oder drei Ebenen genügen, der Benutzer klappt ein, was er nicht verfolgt.
- Verknüpfungen statt abgeschriebener Daten: Eine von den Daten verletzte Verknüpfung sieht man, ein abgeschriebenes Datum irrt sich stillschweigend.
- Den kritischen Pfad einschalten, wenn ein Termin zu halten ist: Er zeigt, wo ein Tag Verzug das Projekt einen Tag kostet.
- In
ue_task_movedspeichern (oderib_write_backden DataStore schreiben lassen): Das Diagramm zeigt die neue Planung, bevor die Datenbank sie kennt. - Das Layout zurückgeben (
ue_layout_changed,of_set_layout): Die Skala und die Breiten, die der Benutzer gewählt hat, gehören ihm.
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.
| Mitglieder | Rolle | Beschrieben in |
|---|---|---|
of_count · of_keys_at · of_has | Durchlaufen, was die Komponente enthält | 3.2 Die Items |
of_reset | Die Komponente zurücksetzen | 3.6 Eine Komponente zurücksetzen: of_reset() |
of_register_shortcut · of_clear_shortcuts | Tastenkürzel der Komponente | 3.5 Tastenkombinationen |
of_is_created · of_is_ready · of_get_last_error | Ob sie entstanden ist, ob sie bereit ist, was fehlschlug | 3.7 Diagnose |
of_save_as_png · of_save_as_jpg | Die Darstellung als Bild exportieren | 3.8 Die Darstellung als Bild exportieren |
of_set_redraw | Änderungen zu einem einzigen Neuzeichnen bündeln | 3.10 Best Practices |
of_preload_icons | Symbole ohne Verzögerung | Sofortige Anzeige: of_icon |
of_set_translation | Eine Beschriftung der Komponente übersetzen | 5.2 Eine Beschriftung anpassen: of_set_translation |
of_focus_webview | Der Komponente den Fokus geben | 6.4 Tastatur und Fokus |
of_print · of_print_to_pdf | Drucken oder ein PDF schreiben | 6.9 Drucken |
of_set_property · of_get_property · of_component_name | Eine Eigenschaft über ihren Namen steuern | 3.1 Die Eigenschaften-Engine |
is_accessible_name · is_accessible_description | Name und Beschreibung, die ein Bildschirmleser sagt | 3.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.