Jaskinie Podróże Nurki Grafika Mizar Teksty Kulinaria Lemkov Namiary Mapa RSS English
Spelunka Trybików Teksty VCL Formy jak ramki YAC Software
  Wróć

Spis

Charsets

Wykresy

DBExpress

Delphi

HTML

Intraweb

MSTest

PHP

Programowanie

R

Rhino Mocks

Software

Testowanie

Testowanie UI

VB.NET

VCL

WPF

Formy jak ramki
Jakoś nigdy nie mogłem siebie przekonać do korzystania z ramek w Delphi (TFrame). Głównym zarzutem jest brak tych wszystkich zdarzeń obecnych w formach (TForm) takich jak OnCreate czy OnShow. Zatem, już od jakiegoś czasu, używam zwykłych form, które zachowują się jak ramki. Te dziedziczą z TForm, więc i dziedziczą wszystkie standardowe zdarzenia form.

Implementacja takich form jest banalna - wystarczy zredefiniować metodę CreateParams:
  type
    TPaneForm = class(TForm)
    protected
      procedure CreateParams(var AParams: TCreateParams); override;
    end;
  ...
  procedure TPaneForm.CreateParams(var AParams: TCreateParams);
  begin
    inherited CreateParams(AParams);
    AParams.Style := AParams.Style or WS_CHILD;
  end;
TCreateParams trzyma informacje niezbędne do tworzenia okien pod Windows. Takie jak tytuł, pozycja i wymiary, styl. Mimo, że CreateParams nie jest udokumentowane, znaczenie procedury jest raczej oczywiste. Wreszcie, WS_CHILD tworzy okno-dziecko bez np. paska tytułowego.

Następnie, aby korzystać z tych form jako ramek na innych formach, wystarczy zredefiniować CreateParams w formie, a następnie stworzyć ją jak każdą inną kontrolkę Delphi, która jest osadzana na formach:
  LPane := TPaneForm.Create(AOwner);
  LPane.Parent := AOwner;
  LPane.Visible := TRUE; // niepotrzebne, jeżeli Visible ustawione jest na TRUE w TPaneForm
I, rzecz jasna, mamy dostęp do wszystkich właściwości i zdarzeń klasy TForm, tudzież pełną obsługę dziedziczenia wizualnego form (Visual Form Inheritance).

Dodatkowym plusem tego rozwiązania jest to, że każda forma, którą już mamy może być osadzana w innych formach. Np. powiedzmy że mamy kilka form konfigurujących jakiś element (program, komponent, etc.). Z jednej stron można pokazywać pojedyncze formy (np. formatowanie jednej osi wykresu) lub umieścić wszystkie formy na innej (np. różne zakładki w oknie dialogowym ustawień programu).

Góra

Komentarze
Kurczę!
Na razie brak komentarzy...

Góra

Dodaj komentarz (pola z gwiazdką są obowiązkowe)
Imię / ksywa *
Mail (pozostanie ukryty) *
Twoja strona
Komentarz (bez tagów) *
Wpisz tekst wyświetlony poniżej *
 

Góra

Tagi

VCL

Delphi


Podobne strony

Interfejsy w Delphi... znowu

Weryfikacja "wiszących" procedur obsługi zdarzeń w formach Delphi

Przeciąganie plików na okno aplikacji

Intraweb a MaxConnections

Argumenty za używaniem FreeAndNIL

Intraweb jako moduł DSO Apache'a

Intraweb a "Device not supported"

Zautomatyzowane testowanie GUI

Zaokrąglanie i dokładność na FPU 8087

Intraweb a SessionTimeout

Używanie TChart w programach Intraweb

Unknown driver: MySQL

TIdMessage a CharSet

Gwarancje oprogramowania

Automatyczne testowanie formularzy okien

TChart - brakujące etykiety w osiach

Tracona pamięć i eksplozje połączeń w DBExpress

Kontrola dyrektyw kompilacji warunkowej oraz ustawień przełączników kompilacji

Wykrywanie traconej pamięci a DUnit

last_insert_id() a DBExpress

Rejestracja rozszerzeń

DBExpress a dostęp wielowątkowy

Sprawdzanie błędnych odwołań a nowy menedżer pamięci

Dostęp do składowych chronionych

Obiekty, interfejsy i obsługa pamięci w Delphi - ki czort?