Otwieranie edytora właściwości po dwukrotnym kliknięciu myszką

0

Hm, jak to napisać aby było jasne?
Przykład: Jak na formie położymy TDBGrid i dwukrotnie klikniemy na nim myszką to otworzy się okno edytora właściwości, w którym można definiować kolumny.

Jak zmienić własny komponent aby po dwukrotnym kliknięciu myszką pojawiało się jakiś konkretne okno właściwości?

0
  1. musisz napisać własny component editor (dziedziczy on po TComponentEditor). W najprostszym wypadku może on wyglądać tak
type
  TMojEdytorWlasciwosci = class(TComponentEditor)
  public
    function GetVerbCount: integer; override; //ile pozycji chcesz dodać w menu po kliknięciu PPM na komponencie. Pierwszy jest domyślnie uruchamiany po dblclick
    function GetVerb(Index: Integer): string; override; //zwraca nazwy wyświetlane w menu dla poszczególnych pozycji
    procedure ExecuteVerb(Index: Integer); override; //wywoływane w momencie uruchomienia danego polecenia
  end;

implementation

function TMojEdytorWlasciwosci.GetVerbCount: integer; 
begin
  Result := 1;
end;

function TMojEdytorWlasciwosci.GetVerb(Index: Integer): string; 
begin
  case Index of
    0: Result := 'O komponencie';
  end;
end;

procedure TMojEdytorWlasciwosci.ExecuteVerb(Index: Integer); 
begin
  case Index of
    0: ShowMessage('Komponent stworzony przez Misiekd');
  end;
end;
  1. następnie musisz go zarejestrować dla Twojego komponentu
procedure Register;
begin
  //TMojKomponent to klasa komponentu, do którego chcesz przypiąć edytor 
  RegisterComponents('Nazwa zakładki', [TMojKomponent]);
  RegisterComponentEditor(TMojKomponent, TMojEdytorWlasciwosci);
end;

polecam zapoznać się z http://delphi.about.com/library/bluc/text/uc080701a.htm

0

Super! Zadziałało.

Ale nie mam potrzeby budowania własnego edytora właściwości. Mój komponent ma pewną kolekcję. Chciałbym aby po dblclick otwierało się okno (Object Inspector) edycji tego pola. Wiesz jak coś takiego zrobić?

0

musisz napisać własny edytor właściwości tak jak pokazałem wcześniej i w nim otwierać edytor, który chcesz

0

Coś robię nie tak. Tylko nie wiem co.

Zgodnie z tym co napisałeś zrobiłem klasę TMojEdytorWlasciwosci = class(TComponentEditor)

W uses mam: SysUtils, Classes, Dialogs, DesignIntf, DesignEditors;

Po skompilowaniu pakietu wyświetlił błąd: File not found: DesignIntf.dcu. Przeszukałem net i okazało się, że muszę do mojego pliku bpl dodać referencje do pliku designide.dcp (z katalogu lib). Po dodaniu referencji biblioteka się skompilowała i można było dodać komonent na formę. DblClick wyświetlił okno. Czyli OK.

Problem zaczął się przy próbie kompilacji aplikacji z tym pakietem. Dostaję error File not found: DesignIntf.dcu w pliku pas mojego komponentu. Nie wiem co robić.

Nie mam ścieżki do \source\ToolsAPI. Gdzieś wyczytałem, że tak powinno być. Dodanie jej mnoży błędy kompilacji.

0

Już wszystko działa!!!

Rozwiązanie:

  1. W jednym pliku komponent
  2. W oddzielnym pliku klasa edytora właściwości oraz procedura rejestrująca komponent wraz z rejestracją edytora.
  3. Oczywiście do bpl dodany designide.dcp
  4. Znalazłem procedurę otwierająca edytor właściwości dla typu TCollection:
uses ColnEdit;
....

procedure TtwStrListEditor.ExecuteVerb(Index: Integer);
begin
  inherited;
  case Index of
    0 : ShowCollectionEditor(Designer, Component, TtwStrList(Component).StrList, 'StrList');
  end;
end;

Teraz po DblClik na komponencie pojawia się okno edycji kolekcji. O to mi chodziło!

Więcej na stronie: http://edn.embarcadero.com/article/27717

1 użytkowników online, w tym zalogowanych: 0, gości: 1