Announcement

Collapse
No announcement yet.

Ressourcenproblem unter Windows 98 und 2000

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Vielleicht mal bischen genauer. Ich laufe im Change-Ereignis des PageControls für jedes nicht sichtbare TabSheet die Controls durch und gebe mittels DestroyHandle die Handles frei.

    for i := 0 to ControlFree.ControlCount -1 do
    begin
    if ControlFree.Controls[i].ClassType = TPanel then
    TUserPanel(ControlFree.Controls[i]).DestroyHandle;
    if ControlFree.Controls[i] is TWinControl then
    Set_FreeRessources( ControlFree.Controls[i] as TWinControl);
    end;

    Klappt für die User-Ressourcen prima. Kann man was vergleichbares für die GDI-Ressourcen tun

    Comment


    • #17
      Normalerweise reicht TPanelImTabSheet.ReleaseHandle aus da alle eingebetteten Childfenster dann auch ihre Handles freigeben MÜSSEN, ohne ParentHandle können diese nicht als Fensterhandle exisitieren.<br>
      Das Problem mit den GDI Resourcen lässt sich nicht so einfach lösen, da die TFont/TBitmap/TBrush/TPen/TIcons die zu einem Control existieren nicht auf ähnliche Weise freigegeben werden können.<br>
      Die Lösung ist das statt eines TPanels ein TForm benutzt wird. D.h. jedes TabSheet bettet ein TForm ein. Damit wäre 1. der komplette Source eines TabSheet in einer eigenen Source und 2. das so eingetette Form kann mit .Free komplett zerstört werden falls es unsichtbar wird.<br>
      Da nun aber ALLE Controls und deren Resourcen, siehe oben TFont etc. tatsächlich zerstört werden, reduziert sich auch der GDI Verbrauch.<br>
      Ein TForm kann seit D3 auch inplaced sein. Dazu einfach
      <pre>

      var
      Form: TCustomForm;
      begin
      Form := TTabSheetForm1.Create(Tabsheet1);
      Form.IsControl := True;
      Form.Align := alClient;
      Form.BorderIcons := [];
      Form.BorderStyle := bsNone;
      Form.Parent := TabSheet1;
      Form.Show;
      end;
      </pre>

      Es gelten dann aber einige geänderte Regeln. Z.b. funktioniert die Fokusierungslogik der Formulare nicht mehr ganz korrekt.<br>
      Man könnte ab D5 auch TFrame benutzen, ich persönlich halte aber die Verwendung von TForms für universeller und weniger anfällig als Frames.<br>
      Allerdings benötigt dieses Vorgehen ein bißchen mehr Aufwand und kostet unwesentlich mehr Ladezeit der Tabsheets.<br>

      Gruß Hage

      Comment

      Working...
      X