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

Odpowiedz Nowy wątek
2011-10-08 09:28
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?

Pozostało 580 znaków

2011-10-08 13:48
  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;


2. następnie musisz go zarejestrować dla Twojego komponentu
```delphi
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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
edytowany 3x, ostatnio: Misiekd, 2011-10-08 13:54

Pozostało 580 znaków

2011-10-09 14:14
TolkWimasz
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ć?

Pozostało 580 znaków

2011-10-09 14:29
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-10-10 13:34
TolkWimasz
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.

Pozostało 580 znaków

2011-10-10 14:03
TomaszFWilk
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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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