# 7. FAQ und Fehlerbehebung #

← Übergreifende Funktionen · Inhalt · Lizenz →

## Installation und Start #

### Die Komponente bleibt grau oder leer #

Ursache | Woran Sie es erkennen | Lösung
--- | --- | ---
WebView2-Runtime fehlt | Das Event `ue_runtime_missing` wird ausgelöst, `of_is_created()` liefert `false` | Die Runtime installieren — siehe Installation
DLL nicht gefunden | PowerBuilder-Fehler einer External Function schon beim ersten Aufruf | `pbtoolboxai.dll` (Exemplar x86 oder x64) neben die ausführbare Datei legen — und neben `pbXXX.exe` für die Ausführung aus der IDE
Falsche Architektur | Derselbe Fehler, aber nur unter 32 Bit oder nur unter 64 Bit | Die DLL muss zur Bitness von PowerBuilder passen
UI-Thread blockiert | Die Komponente zeichnet sich, sobald Ihre Verarbeitung endet | Siehe unten

### „UI-Thread blockiert“: die häufigste Falle #

Die Initialisierung der Webview ist asynchron: Sie benötigt eine laufende Windows-Nachrichtenschleife. Eine lange PowerScript-Schleife im `open` des Fensters, die die Steuerung nicht zurückgibt, hindert die Komponente daran, ihr Laden abzuschließen.

    // ZU VERMEIDEN : die Komponente bleibt waehrend der gesamten Verarbeitung grau
    uo_grid.of_add_column("nom", "Name", 200)
    of_charger_50000_lignes()      // 8 Sekunden ohne die Steuerung zurueckzugeben

    // BESSER : das Fenster anzeigen lassen und ERST DANN laden
    this.PostEvent("ue_charger")

### Die Komponente verliert ihr Design / wird nach einer Weile wieder hell #

Sie haben höchstwahrscheinlich eine Instanz wiederverwendet, ohne sie zurückzusetzen, oder ein lokales Design gesetzt, das nie aufgehoben wurde. Rufen Sie `of_reset()` auf, bevor Sie einen anderen Inhalt anzeigen, und setzen Sie das Design global über `PBT_SetDefaultTheme` statt Komponente für Komponente (Designs).

## Verhalten zur Laufzeit #

### Meine im `constructor` gesetzten Eigenschaften scheinen ignoriert zu werden #

Das sind sie nicht: Befehle, die vor `ue_ready` abgesetzt werden, werden in eine Warteschlange gestellt und der Reihe nach nachgeholt. Wenn die Anzeige nicht passt, überschreibt fast immer ein späterer Befehl den ersten — oder die Komponente wurde zwischen zwei Verwendungen nie zurückgesetzt.

### Ein „Rest“ der vorherigen Anzeige bleibt bestehen #

Ursache Nummer eins für visuelle Auffälligkeiten: `of_reset()` wurde nicht aufgerufen. Wird eine Instanz wiederverwendet, um etwas anderes anzuzeigen, bleibt alles bisher Gesetzte erhalten (Farben, Modus, automatische Höhe, Items). Prüfen Sie, ob `of_reset()` tatsächlich aufgerufen wird, bevor Sie es für fehlerhaft halten.

### Das Zurücklesen einer Eigenschaft gibt nicht wieder, was der Benutzer tut #

Prüfen Sie zuerst, ob ein Event diese Änderung meldet: Wenn es eines gibt, frischt es die Eigenschaft gleich mit auf, und das Zurücklesen liefert den tatsächlichen Zustand (`is_address` folgt dem Link, den der Benutzer anklickt, `is_text` seiner Eingabe). Andernfalls liefert das Lesen den letzten aus PowerBuilder gesetzten Wert (PB-Cache) — dann bleibt das Event, mit dem Wert als Parameter, der einzige Kanal (Gemeinsame Basis).

### Ein Event wird nie ausgelöst #

- Umgebende Mausereignisse (`ue_mouse_enter`, `ue_mouse_leave`, `ue_rclicked`): Sie sind Opt-in, setzen Sie `ib_track_mouse = true`. Zudem werden sie nur von den Komponenten veröffentlicht, bei denen sie sinnvoll sind.
- `ue_auto_height` / `ue_auto_width`: ebenfalls Opt-in (`ib_auto_height`, `ib_auto_width`), veröffentlicht von einer genau festgelegten Liste von Komponenten. Ausnahme: Bei `ribbon` und `toolbar` ist `ue_auto_height` immer aktiv (intrinsische Höhe, es ist keine Eigenschaft zu setzen).
- Event an der falschen Stelle geskriptet: Skripten Sie es am Steuerelement im Fenster oder an einem von der Komponente abgeleiteten Userobject — nicht an `u_pbt_base`.

### Ein Menü oder ein Tooltip bleibt sichtbar #

Menüs und Tooltips sind echte Systemfenster: Sie schließen sich beim Klick daneben, mit Esc und beim Verlust des Vordergrunds, und ein Tooltip verschwindet spätestens nach 10 Sekunden. Ein verbleibender Fall: die Komponente zerstören, während eines ihrer Menüs offen ist — schließen Sie es zuerst.

### Es erscheint überhaupt kein Tooltip #

Das ist Absicht: Tooltips werden nicht ausgelöst, wenn Ihre Anwendung nicht den Fokus hat. Klicken Sie zuerst in das Fenster.

## Bilder und Symbole #

### Ein Bild wird nicht angezeigt #

- Der Pfad muss auf dem ausführenden Rechner erreichbar sein (vorzugsweise ein absoluter Pfad oder einer relativ zum Arbeitsordner).
- Formate: PNG, JPG, GIF, BMP, ICO, SVG, WEBP. Ein nicht auffindbares Bild wird einfach ausgeblendet, ohne die Komponente zu blockieren.
- DLL-Ressource: Die Syntax lautet `vollstaendiger_pfad.dll:RESSOURCENNAME` (ein Ressourcenname, kein Dateiname).

### Ein Symbol `mono:` erscheint leer oder verzerrt #

Ein Symbol `mono:` ist eine Maske: Es hat keine natürliche Größe. Wenn die Komponente es nicht dimensioniert (ein seltener Fall außerhalb der Standardkomponenten), geben Sie ihm ausdrücklich eine Größe — zum Beispiel `[picture=mono:img\ok.svg,16,16]` im Rich-Text.

### Ich habe ein Bild auf der Festplatte ersetzt, es wird weiterhin das alte angezeigt #

Bilder werden 5 Minuten lang zwischengespeichert, um Flackern beim erneuten Rendern zu vermeiden. Fügen Sie bei einem im laufenden Betrieb geänderten Bild dem Pfad ein wechselndes Suffix hinzu (`img\logo.png?v=2`).

## Leistung #

### Die erste Komponente erscheint langsam #

Das ist der Start des Edge-Prozesses, der nur einmal anfällt. Rufen Sie `PBT_Warmup()` beim Start der Anwendung auf: Die Kosten werden während des Ladens des Rests aufgefangen (Installation).

### Die Anzeige flackert, während ich meinen Inhalt aufbaue #

Klammern Sie den Aufbau ein:

    uo_grid.of_set_redraw(false)
    … Hinzufuegen und Zuweisungen …
    uo_grid.of_set_redraw(true)

### Das Befüllen einer Komponente aus einem DataStore ist langsam #

Die Übertragung selbst ist linear und schnell. Die dominierenden Kosten liegen davor: Ihr `Retrieve()` oder Ihre Datenerzeugung in PowerScript. Befüllen Sie den DataStore bei großen, im Code erzeugten Datenmengen blockweise — das Verketten einer Zeichenkette von mehreren Megabyte ist in PowerScript quadratisch.

## Zusammenspiel mit PowerBuilder #

### Ein gehostetes PowerBuilder-Steuerelement liegt über allem #

Das ist das erwartete Verhalten: Ein gehostetes Steuerelement (Registerkartenseite, andockbares Panel) ist ein natives Fenster, das über der Web-Ebene gezeichnet wird. Im Gegenzug bleiben Ihre DataWindows scharf und schnell. Kein Web-Effekt kann darüber gezeichnet werden.

### Die Komponente wird weiß, wenn ich im Debugger angehalten bin #

Strukturelles Verhalten von WebView2: Der UI-Thread ist durch den Debugger eingefroren, die Webview kann sich nicht mehr darstellen. Die kompilierte Anwendung ist nicht betroffen. Setzen Sie die Ausführung fort, die Anzeige kehrt zurück.

### Gibt es `msedgewebview2`-Prozesse, die auslaufen? #

Nein: Jede Komponente gibt ihre Webview bei ihrer Zerstörung frei, übernommen vom `destructor` des Userobjects im normalen Ablauf des Fensterschließens.

### Akzentzeichen werden falsch dargestellt #

Übergeben Sie Ihre Beschriftungen im Klartext aus PowerBuilder (normale PB-Zeichenketten). Verwenden Sie für Zeichen außerhalb der Tastatur `Char()` — zum Beispiel `Char(8364)` für das Eurozeichen — statt eines Codepage-Bytes.

## Verschiedenes #

### Ein Dateiexport schlägt fehl #

Das Rückgabe-Event (`ue_file_saved`, `ue_xlsx_saved`…) trägt `ab_ok = false` und eine Meldung. Häufige Ursachen: nicht beschreibbarer Ordner (`Program Files`), Datei bereits in einer anderen Anwendung geöffnet. Schreiben Sie in einen Benutzerordner (`%TEMP%`, `%LOCALAPPDATA%`).

### Das Abzeichen „DEMO“ erscheint #

Die Lizenz ist in diesem Kontext nicht aktiv — siehe Lizenz und Demomodus.

### Rückgabecodes der Methoden `of_*` #

Rückgabe | Bedeutung
--- | ---
`≥ 0` | OK (angewendet oder in die Warteschlange gestellt)
`-2` | Komponente nicht erstellt (Runtime fehlt, ungültiger Host) — prüfen Sie `of_is_created()`
`-4` | Vorgang fehlgeschlagen (Bildschirmfoto, Schreiben einer Datei…)
`-5` | Ungültiges Argument (leerer Bezeichner, Wert außerhalb der Grenzen)

Einzelheiten zum letzten Fehlschlag: `of_get_last_error()`.

## Hilfe anfordern #

Legen Sie Ihrer Anfrage bei:

- PowerBuilder-Version und Bitness (32 / 64);
- Windows-Version;
- Version der Bibliothek (`PBT_GetVersion`) und der WebView2-Runtime (`PBT_CheckRuntime`);
- den Zustand der Lizenz (`PBT_LicenseStatus`);
- einen minimalen Codeausschnitt, der den Fall reproduziert.

← Übergreifende Funktionen · Inhalt · Lizenz →