Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Events zur Designtime (https://www.delphipraxis.net/110184-events-zur-designtime.html)

Medium 18. Mär 2008 17:51

Re: Events zur Designtime
 
Zitat:

Zitat von stahli
Und gut, dass wir ausführlich drüber gesprochen haben...

:thumb:

Danke dir fürs Mitfiebern, und den Tipp mit den Videoprogrammen! In spätestens 30 Tagen wird eine Vollversion wohl interessant...

LoCrux 19. Mär 2008 11:35

Re: Events zur Designtime
 
So Geht's

Dein Komponente im protected Abschnitt

Delphi-Quellcode:
   protected
     .
     procedure WMAreaInternalMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;
     .
Dein Komponente im Implementations-Teil

Delphi-Quellcode:
procedure TYourDesignInteractiveComponent.WMAreaInternalMouseMove(var Message: TWMMouseMove);
begin
  inherited;
  if not(csNoStdEvents in ControlStyle)
  then begin
    FMouseScreen.x := Message.XPos;
    FMouseScreen.y := Message.YPos;
   
    if (csDesignInteractive in ControlStyle)
    then begin
      {Mach was zur Design-Time}
    end
    else begin
      {Mach was zur Run-Time}
    end;

    paint;
  end;
end;
und dann im Desing-Time Package einen Component-Editor ...

Delphi-Quellcode:

interface

  TYourCE = class(TDefaultEditor)
  public
    function GetVerb(Index:Integer):string; override;
    function GetVerbCount: Integer; override;
    procedure ExecuteVerb(Index: Integer); override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Palette', [TYourDesignInteractiveComponent]);
  RegisterComponentEditor(TYourDesignInteractiveComponent, TYourCE);
  .
end;

function TYourCE.GetVerbCount: Integer;
begin
  result := 2;
END;

function TYourCE.GetVerb(Index: Integer):STRING;
begin
  case Index of
    0 : result := 'DesignTime Interactive ON';
    1 : result := 'DesignTime Interactive OFF';
  end;
end;

procedure TYourCE.ExecuteVerb(Index: Integer);
begin
  case Index of
    0: begin
         with TYourDesignInteractiveComponent(Component) do
         begin
           ControlStyle := ControlStyle+[csDesignInteractive];
         end;
       end;
    1: begin
         with TYourDesignInteractiveComponent(Component) do
         begin
           ControlStyle := ControlStyle-[csDesignInteractive];
         end;
       end;
  end;
end;

  .
  .

end.
das wars...

Warum... Du mußt die Win-Messages direkt abfangen. Events treten zur Desing-Time nicht ein....

Edit: Falscher Fehler ;-)

Medium 19. Mär 2008 13:59

Re: Events zur Designtime
 
Da brat mir einer nen Storch! Ich hab csDesignInteractive mit den geerbten Handlern, und eigene Handler ohne csDesignInteractive getestet. Kombiniert man es, geht es! LoCrux, ganz ganz heissen Dank! Damit lässt sich dann nun auch endlich realisieren, dass man ohne extra Formular auskommt, und man Teiltransparenz auch beim Bearbeiten hat. Ein riesen Vorteil! Dann werd ich mal umbauen...

Medium 19. Mär 2008 23:58

Re: Events zur Designtime
 
Leider zu früh gefreut. MouseMove und ButtonEvents der Rechten Maustaste sind kein Problem, aber die linke und mittlere Maustaste kommen dennoch nicht durch.
Ich hatte meinen Versuch mit csDesignInteractive auch mit Handlern für die linke Maustaste gemacht, womit sich der Kreis irgendwie schließt. Hast du da evtl. auch noch einen Geheimtip?

LoCrux 20. Mär 2008 14:33

Re: Events zur Designtime
 
Jau....

Delphi-Quellcode:
    procedure WMAreaInternalLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
    procedure WMAreaInternalRButtonUp(var Message: TWMRButtonUp); message WM_RBUTTONUP;
    procedure WMAreaInternalMButtonUp(var Message: TWMMButtonUp); message WM_MBUTTONUP;
    procedure CMAreaMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMAreaMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
same as above...

Medium 20. Mär 2008 20:40

Re: Events zur Designtime
 
Ja nun, genau das hab ich ja gemacht ;). Aber die Handler wurden nie erreicht. Actions der rechten Maustaste und MouseMove ja, linke und mittlere Taste nein. Alles gleich aufgebaut, alles in ein und der selben Instanz getestet.

Edit: MouseUp hab ich nun nicht getestet, sondern die jeweiligen Down-Ereignisse, aber die brauche ich zwingend auch.

LoCrux 21. Mär 2008 22:27

Re: Events zur Designtime
 
OOps.. mhhh.. muss mal schaun wie ich das gemacht hatte....

aber probier mal noch csClickEvents und csDoubleClicks im ControlStyle....

Medium 22. Mär 2008 02:00

Re: Events zur Designtime
 
Zitat:

Zitat von Delphi-Hilfe
Der Konstruktor von TControl initialisiert ControlStyle mit csCaptureMouse, csClickEvents, csSetCaption und csDoubleClicks.

Ich leite von TGraphicControl, also auch von TControl ab. Weder TGraphicControl, noch ich entfernen Bits aus dem ControlStyle, weswegen ich das leider als mitgetestet und nicht funktionierend ansehen darf :(.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz