AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Problem mit "TPicture" Property bei Komponetenerstellung
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit "TPicture" Property bei Komponetenerstellung

Ein Thema von SarDGer · begonnen am 21. Dez 2005 · letzter Beitrag vom 22. Dez 2005
Antwort Antwort
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#1

Problem mit "TPicture" Property bei Komponetenerst

  Alt 21. Dez 2005, 11:21
Hallo allezusammen,

ich möchte gerne in Delphi7 eine Komponente erstellen die im
ersten Step nur ein TImage simuliert.
Bei der Property Picture (TPicture) habe ich jetzt das Problem
das ich zwar im Objectinspector beim Picture den [...] Knopf
habe der auch soweit funktioniert, das selbe Fenster mir aber
nicht beim Doppelklick auf die Komponente aufspringt.
Eben genau so wie beim TImage.

Hab mal mit dem Propertyeditor rumgespiel bin aber leider nicht
wirklich weitergekommen...

Jemand mal 'nen guten Tip für mich??

Gruß,
Sar
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Problem mit "TPicture" Property bei Komponeten

  Alt 21. Dez 2005, 13:48
Du brauchst keinen Property-Editor, sondern einen ComponentEditor.
Dieser ComponentEditor muss registriert werden:
procedure RegisterComponentEditor(ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass); Es gibt wohl schon einen passenden Editor (TImageEditor ?) in der Unit DsgnIntf.dcu.
Da diese Unit nur zur Entwicklungszeit verfügbar ist, darf RegisterComponentEditor auch
nur aus einer Designtime-Package aufgerufen werden.

Du kannst deinen Editor auch von TComponentEditor ableiten, dann hast du alle Freiheiten,
musst aber auf vorgefertigte Methoden von TImageEditor verzichten.
Andreas
  Mit Zitat antworten Zitat
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#3

Re: Problem mit "TPicture" Property bei Komponeten

  Alt 21. Dez 2005, 17:06
Hi shmia,

danke ersteinmal für die schnelle Antwort.

Die dsgnInft gibt es in Delphi 7 nicht mehr dafür allerdings eine DesignIntf. hehe

Ich will ja gar nicht einen neuen Editor schreiben, warum auch das Rad neu
erfinden. Ich möchte ja lediglich das genau dieselbe Funktion aufpoppt die
ich auch im Objectinspector mit dem [...] Knopp auslösen kann.

Ich hab mir das ungefähr so vorgestellt:

Delphi-Quellcode:
type
  T_Test = Class(TGraphicControl)
  private
    FPicture: TPicture;
    procedure SetPicture(const Value: TPicture);
  published
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure WndProc(var Message: TMessage); override;
    property Picture: TPicture read FPicture write SetPicture;
  public
  end;


procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [T_Test]);
end;

{ T_Test }

constructor T_Test.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csReplicatable];
  FPicture := TPicture.Create;
  Height := 105;
  Width := 105;
end;

destructor T_Test.Destroy;
begin
  FPicture.Free;
  inherited Destroy;
end;

procedure T_Test.SetPicture(const Value: TPicture);
begin
  FPicture.Assign(Value);
end;

procedure T_Test.WndProc(var Message: TMessage);
begin
  if (csDesigning in ComponentState) then
  Begin
    if Message.Msg = WM_LBUTTONDBLCLK then
    Begin
      // damit wird der Doppelklick ins Nirwana umgeleitet
      // und richtet keinen Schaden an :)
      Message.Msg := WM_LBUTTONUP;

      // hier sollte jetzt sowas wie der Aufruf: TPictureEditor.Execute
      // hin so funktioniert es natürlich nicht, aber so ungefähr hab ich
      // mir das vorgestellt.
    end;
    // damit die Komponente denke alles wäre normal verlaufen
    inherited WndProc(Message);
  end
  else
    inherited WndProc(Message);
end;
Aber irgentwie bin ich zu Blöde dafür
Also: Hiiiiilfe

Gruss,
Sar
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Problem mit "TPicture" Property bei Komponeten

  Alt 21. Dez 2005, 17:37
Du entfernst die procedure Register aus deinem Sourcecode und fügst die Unit in ein
Laufzeitpackage (nur Laufzeit anhaken) namens PackageTest_RT ein.

Dann brauchst du eine neue Unit (ich nenn sie mal T_TestReg.pas)
Delphi-Quellcode:
unit T_TestReg;

interface

procedure Register;

implementation

uses U_Test, DesignIntf;

procedure Register;
begin
  RegisterComponents('Beispiele', [T_Test]);
  RegisterComponentEditor(T_Test, TImageEditor);
end;
end.
Diese Unit packst du in ein Designtime-Package (nur Laufzeit anhaken).
Delphi-Quellcode:
package PackageTest_DT;
{$R *.RES}
{$DESIGNONLY}
requires
  vcl50, PackageTest_RT;
contains
  T_TestReg in 'T_TestReg.pas';
end.
Das habe ich jetzt ohne Test so runtergeschrieben; keine Gewähr für Schreibfehler
oder andere fehlende Dinge.
Aber das Grundprinzip stimmt.
Ich würde dir empfehlen, in deinem VCL-Sourcecode nach RegisterComponentEditor zu suchen;
du kannst abschauen, wie das bei anderen Komponenten gemacht wird.
Andreas
  Mit Zitat antworten Zitat
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#5

Re: Problem mit "TPicture" Property bei Komponeten

  Alt 22. Dez 2005, 14:35
Jetzt funktioniert's, danke shmia

Aus irgenteinem Grund - der sich mir leider vollkommen entzieht - muss
die designeditors aus einem Runtime package aufgerufen werden. Ansonsten
hab ich immer die Meldung bekommen das die Proxies.dcu nicht gefunden
werden kann. Keine Ahnung was das soll. Ich experimentier hier noch ein
bissl rum, aber so komme ich wenigstens wieder weiter.
Nochmal danke.

Gruss,
Sar
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:15 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