Edycja klasy rodzicielskiej

0

Piszę sobie moduł (Unit), który w zamyśle ma modyfikować KAŻDĄ Formę programu. Wymyśliłem to tak, że użytkownik / programista dopisuje sobie moduł do Uses, potem odpala globalny konstruktor klasy i już.

Wydaje mi się, że skoro Formy-dzieci dziedziczą po klasie TForm, to wystarczy "włamać" się właśnie do klasy TForm i tam powrzucać różne metody obsługujące interesujące mnie komunikaty, np. WM_PAINT czy WM_NCHITTEST.

Dobrze myślę?

A może muszę stworzyć własną klasę dziedziczącą po TForm a potem jakoś "podmieniać je" dynamicznie zamiast domyślnych Form? Albo spróbować przez Applications.OnMessage wyłapywać wszystkie komunikaty w obrębie apki, a potem ustalać adresata i treść (o ile to w ogóle możliwe)?

Proszę o jakieś wskazówki, bo nie wiem jak się za to zabrać. Szukałem po różnych kompendiach, ale nic nie znalazłem.

1

możesz też stworzyć klasę tak

unit Unit2;

interface

uses
  Vcl.Forms,
  Vcl.Controls,
  System.Classes,
  Vcl.StdCtrls;

type
  TForm = class(Vcl.Forms.TForm)
  public
    constructor Create(AOwner: TComponent); override;
  end;

implementation

{ TForm }

constructor TForm.Create(AOwner: TComponent);
begin
  inherited;
  with TLabel.Create(Self) do
  begin
    Parent := Self;
    Left := 10;
    Top := 10;
    Caption := 'aaaaa';
  end;
end;

end.

i wystarczy dodać ja do uses do sekcji interface PO Vcl.Forms z tym, że nie będziesz miał podglądu ma to co robi Twoja klasa w designerze

0

Sam próbowałem czegoś takiego, ale kompilator wypluwa:

[Error] Unit1.pas(10): Type 'TForm' is not yet completely defined

Dopiero zmiana nazwy klasy (np. na TForm2) się kompiluje, a przecież nie o to chodzi. Nie chcę tworzyć własnej klasy potomnej, tylko "shackować" rodzica.

0

żeby nawet nie umieć przepisać jednej linijki...
TForm = class(Vcl.Forms.TForm)

0
abrakadaber napisał(a):

żeby nawet nie umieć przepisać jednej linijki...
TForm = class(Vcl.Forms.TForm)

Nie wiem jak Twój kompilator, ale mój (Delphi 7) zwraca coś takiego:

[Error] Unit1.pas(10): Undeclared identifier: 'Vcl

Podobnie przy próbie dorzucenia do uses prefixów w postaci vcl czy system...

EDIT

Poradziłem sobie przez wypierdzielenie tych prefixów i pozostawienie samego Forms.TForm w deklaracji klasy.

Wypadałoby najpierw sprawdzić poprawność podanego kodu zanim się kogoś zgani, ale mimo wszystko dzięki.

1

@Crow: bo w Delphi7 nie ma przestrzeni Vcl - wystarczy podać moduł źródłowy i nazwę klasy:

TForm = class(Forms.TForm)

Wypadałoby najpierw sprawdzić poprawność podanego kodu zanim się kogoś zgani, ale mimo wszystko dzięki.

To Twój błąd, bo nie podałeś informacji o tym, z jakiego środowiska korzystasz; A skoro nie podałeś takich danych to automatycznie użytkownicy podają rozwiązanie dla aktualnej wersji Delphi.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.