Jaskinie Podróże Grafika Mizar Artykuły Kulinaria Lemkov Namiary Mapa English  
Spelunka Trybików Teksty i artykuły Formy jak ramki YAC Software  
 Wróć
Spis
Wykrywanie
traconej pamięci
a DUnit
Odwołania do
komórek w Excelu
last_insert_id()
a DBExpress
YAC Data Language
Rejestracja
rozszerzeń
Otwórz wszystkie
i połącz
DBExpress
a dostęp
wielowątkowy
Formy jak ramki
Sprawdzanie
błędnych odwołań
a nowy
menedżer pamięci
</form> ... <form>
Branża badawcza
w Polsce - 2007
Dostęp do
składowych
chronionych
Syntaktyka
Mizara-MSE
Kwantyfikatory
w wyrażeniach
regularnych -
co najmniej
m wystąpień
Systemy
przepisywania
słów
Kwantyfikatory
w wyrażeniach
regularnych - od m
do n wystąpień
Języki formalne
- konkatenacja
i domknięcie
Boole'owskie
właściwości
zbiorów
Homomorfizmy i
izomorfizmy grup;
grupa ilorazowa
Liczby całkowite
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) *
Ten blog jest moderowany, Twój wpis zostanie wyświetlony po kontroli.
Zatem, jeżeli się nie pojawi od razu, nie przejmuj się i nie wysyłaj komentarza drugi raz.
Dzięki.
Góra