Tipps und Techniken

Darstellung von Steuerelementen und Dialogen

Viele Steuerelemente unterstützen Vordergrund- und Hintergrundfarben. Die Hintergrundfarbe -24 (für transparent) bewirkt, dass das Steuerelement durchsichtig erscheint. Die Einstellung der Vordergrundfarbe hängt in einigen Fällen von der Eigenschaft Use Visual Style ab. Verwendet ein Steuerelement den visuellen Stil, kann das die explizit eingestellte Vordergrundfarbe überschreiben. Ist die Farbe des Steuerelements wichtig, deaktivieren Sie die Eigenschaft Use Visual Style. Bitte beachten Sie, dass visuelle Stile erst ab Windows XP zur Verfügung stehen und auch nur, wenn sie in den Windows-Einstellungen aktiviert wurden.

Bildschaltflächen und das Steuerelement Bild können Bilder transparant darstellen, wenn der zu maskierende Bereich die RGB-Farbe 192,192,192 hat. Jedes Pixel mit dieser Farbe wird maskiert, wenn das Bild angezeigt wird.

Die Einstellungen für das Schriftbild von Steuerelementen beinhaltet die Parameter Schriftart, Schriftgröße und den Stil. OpenDCL verfügt über eine zusätzliche Eigenschaft, die bestimmt, wie die Schriftgröße zur Laufzeit berechnet werden soll. Vorgabemäßig ist die Eigenschaft auf "Schriftgröße in Pixel" gestellt. Wird statt dessen "Bildschirmeinstellungen" verwendet, berechnet sich die Schriftgröße in Abhängigkeit von der Größe der Bildschirmanzeige. Diese Einstellung ist aber mit Vorsicht zu genießen, denn sie kann bewirken, dass Steuerelemente zu klein oder zu groß für den darzustellenden Text darin sind.

Eigenschaften zur Laufzeit verändern

Das Ändern der Eigenschaften von Dialogen und Steuerelementen ist eine leistungsfähige Funktionalität, mit der OpenDCL-Applikationen ihre Benutzersteuerung dynamisch zur Laufzeit ändern können. Steuerelemente können in Abhängigkeit vom aktuellen Dialogstatus bzw. Programmablauf aktiviert oder deaktiviert und sogar aus- oder eingeblendet werden. Diese Fähigkeit erlaubt es auch, dass mehrere Steuerelemente den selben Platz auf dem Dialog beanspruchen können und lediglich das eine oder das andere Steuerelement zu gegebener Zeit angezeigt wird.

Die meisten Dialoge und Steuerelemente sind in den Projektdaten abgelegt. Die einmal gesetzten Eigenschaftswerte bleiben zwischen den Aufrufen der selben Dialogbox erhalten. Es ist sehr wichtig, dies im Hinterkopf zu behalten, denn in manchen Situationen sollte der vorherige Dialogzustand zwischen den Aufrufen zurückgesetzt werden. In diesen Fällen können die Projektdaten aus der OpenDCL-Projektdatei neugeladen oder die gesicherten Eigenschaften können direkt zu ihrem Ausgangswert zurückgesetzt werden. So muss darauf beispielsweise der Quellcode, der während des Ereignisses OnInitialize ein Listenfeld vorbereitet, darauf Rücksicht nehmen, denn das Listenfeld kann bereits initialisiert sein und schon Werte enthalten. In diesem Fall sollte der Quellcode vor dem Hinzufügen der Liste prüfen, ob das Listenfeld bereits Werte enthält oder jedes Mal den Inhalt des Listenfelds einfach bereinigen, bevor es angezeigt wird.

In einigen Fällen kann es sinnvoll sein, AutoLISP-Code zu schreiben, um eine Serie von Änderungen an einem OpenDCL-Projekt vorzunehmen und anschließend wieder in eine Projektdatei zu schreiben. Der nachfolgende Quellcode zeigt beispielhaft, wie ein OpenDCL-Projekt geöffnet wird und jedes Steuerelement auf jedem Dialog durchlaufen wird, um die Methode der Skalierung der Schriftgröße zu ändern (Bitte beachten Sie, dass die Methode zur Skalierung der Schriftgröße durch dei Eigenschaft FontSize gesteuert wird). Zum Abschluss werden die geänderten Projektdaten in eine neue Datei geschrieben.

(defun SetOdclFontSizeUnscaled (odclfile password newodclpath / project props fontsize)
  (setq project (dcl_Project_Load odclfile))
  (if (not project) (exit))
  (foreach form (dcl_Project_GetForms project)
    (foreach control (dcl_Form_GetControls form)
      (setq props (dcl_Control_GetProperties control))
      (if (member "FontSize" props)
        (progn
          (setq fontsize (dcl_Control_GetProperty control "FontSize"))
          (if (> fontsize 0)
            (dcl_Control_SetProperty control "FontSize" (- 0 fontsize))
          ); if
        ); progn
      ); if
    ); foreach
  ); foreach 
  (dcl_Project_SaveAs project newodclpath password)
); SetOdclFontSizeUnscaled