AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Events zur Designtime

Ein Thema von Medium · begonnen am 14. Mär 2008 · letzter Beitrag vom 22. Mär 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#1

Events zur Designtime

  Alt 14. Mär 2008, 10:26
Moinmoin!

Gibt es eine Möglichkeit die IDE dazu zu überreden, dass Events wie MouseMove oder MouseDown zur Designtime an eine von TCustomControl abgeleitete Komponente zu übergeben? Es dürfen auch gerne schmutzige Tricks sein, aber ich würde es schon recht dringend brauchen (nicht im Sinne von "sofort jetzt" sondern von "ich brauchs echt"). Es geht um Delphi 7 Ent.

Besten Dank schonmal,
Das Medium
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Events zur Designtime

  Alt 14. Mär 2008, 10:49
Warum brauchst du das zur Entwurfszeit?
Markus Kinzler
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Events zur Designtime

  Alt 14. Mär 2008, 10:59
Ich erstelle eine ganze Reihe von Prozessabbildern, und in diesen sind eine Fülle sehr unterschiedlich gestalteter Elemente. Für all diese jeweils eine völlig eigene Komponente zu entwickeln, bzw. immer diese zu erweitern wäre nah an Folter. Was all die Elemente gemein haben ist, dass sie sich wunderbar über einen Polygonzug realisieren ließen, und dessen Ecken will ich zur Entwurfszeit umherschubsen können. Weil wenn ich die Koordinaten im Code erst setzte, könnte ich gleich die Kompos bauen. Zudem wäre es dann mehr als schwierig zu bearbeiten.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Events zur Designtime

  Alt 14. Mär 2008, 11:39
Hallo Medium,

ich weiß nicht, ob ich Dich richtig verstehe... Du könntest die entsprechende Behandlung direkt in der Klasse definieren, dann funktioniert das grundsätzlich auch zur Designtime

Delphi-Quellcode:
  protected
    procedure MouseDown(Button:TMouseButton;Shift:TShiftState;X,Y:Integer); override;
    ...

procedure TXyz.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
begin
  inherited;
  SysUtils.Beep;
end;
Jetzt sollte die Kompo auch in der IDE klingeln, wenn Du sie anklickst.

Die Komponenten reagieren allerdings in der IDE anders als zur Laufzeit. Schau Dir dazu mal ComponentState und evtl. ComponentStyle an...

stahli
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Events zur Designtime

  Alt 14. Mär 2008, 11:53
Funktioniert leider nur zur Laufzeit. Was mich überhaupt dazu gebracht hat, dass das irgendwie gehen muss ist: Ich hab in den bereits bestehenden Komponenten einen TTimer, der das Element auf Wunsch blinken lässt. Und es blinkt auch zur Entwurfszeit, wenn ich es nicht selbst mit Hilfe von ComponentState unterbinde. Da TTimer prinzipiell über eine Fenstermsg arbeitet, sollte das an und für sich nun kein Problem sein, aber ich hab es bisher nicht geschafft Maus-Events zu erhalten.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Events zur Designtime

  Alt 14. Mär 2008, 13:32
Ich hab glaub ich einen Weg gefunden, und ja, er ist ausgesprochen schmutzig

Ich erzeuge nun in meiner Komponente ein neues TForm. Dieses erhält auch im Designer alle Messages, und ich kann damit tun was ich mag. Zur Runtime kann es dann ja weg bleiben.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Events zur Designtime

  Alt 14. Mär 2008, 13:36
Und genauso wie du das mit einem TForm amchst, kannst du das auch mit einem TcustomControl machen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Events zur Designtime

  Alt 14. Mär 2008, 13:40
Zitat von Medium:
und ja, er ist ausgesprochen schmutzig
Da bist Du auch noch stolz drauf?

Ich kann mir nicht so recht vorstellen, was Du da machst. Wozu brauchst Du ein DummyForm?
Mal ein stückl Code...?

Meinen Vorschlag von oben kann ich heute Abend mal testen. Hätte gedacht, dass das funktioniert.

stahli
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Events zur Designtime

  Alt 14. Mär 2008, 13:43
Wahrscheinlich, ja. Der Kniff dabei ist nur, dass ich keine Messages für die Komponente an und für sich empfange. Bette ich darin aber ein weiteres Control ein, entzieht sich dieses der Sonderbehandlung durch die IDE, und man kann alles damit machen wie zur Laufzeit. Einfaches Überschreiben der Eventhandler der Komponente selbst ging leider nicht.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Events zur Designtime

  Alt 14. Mär 2008, 13:50
Hallo roter Kasen!

@stahli: Naja, stolz nur, weil ich endlich einen Weg gefunden habe.

Stück Code:
Delphi-Quellcode:
type
  TPoly = class(TCustomControl)
  private
    FForm: TForm;
  protected
    procedure Paint; override;
    procedure _MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
  end;

implementation

constructor TPoly.Create(AOwner: TComponent);
begin
  inherited;
  FForm := TForm.CreateParented(TForm(AOwner).Handle); // Der Cast ist Murks, einer auf TWinControl dürft auch gehen
  FForm.BorderStyle := bsNone;
  FForm.Width := Width;
  FForm.Height := Height;
  FForm.Color := clRed; // nur damit man es gut sieht zum Test
  FForm.OnMouseMove := _MouseMove;
  FForm.Top := Top;
  FForm.Left := Left;
  FForm.Visible := true;
  FForm.BringToFront;
end;

destructor TPoly.Destroy;
begin
  FForm.Free;
  inherited;
end;

procedure TPoly._MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  self.Color := clFuchsia; // Um zu sehen, ob das Event ankommt. Es wird normal noch etwas gezeichnet, das hab ich hier rausgenommen
end;

procedure TPoly.Paint;
begin
  inherited;

  // Um das Form immer brav mitzuziehen
  FForm.Left := Left;
  FForm.Top := Top;
  FForm.Width := Width;
  FForm.Height := Height;
  FForm.BringToFront;
end;
Was noch fehlt sind ein paar Methoden, damit die Komponente im Designer wieder anwählbar ist und dergleichen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 Uhr.
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