AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Neue Komponente / Properties speichern ?

Ein Thema von Gruber_Hans_12345 · begonnen am 23. Sep 2004 · letzter Beitrag vom 24. Sep 2004
Antwort Antwort
Seite 2 von 3     12 3      
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#11

Re: Neue Komponente / Properties speichern ?

  Alt 23. Sep 2004, 20:16
Zitat von Gruber_Hans_12345:
Interessante Idee, aber wie kann ich eine private methode überschreiben ?
Einfach neu deklarieren, sollte funktionieren. Falls doch nicht (ich habe es selber noch nicht probiert, habe aber irgendwo was in der Art schonmal gesehen), kannst Du ja eine Funktion mit einem anderen Namen implementieren und das Property neu deklarieren.
Zitat von Gruber_Hans_12345:
Ich will die Farbe nicht auf die Farbe des Forms setzen (könnte ja dann auch Parentcolor verwenden)
Parentcolor gibt aber nicht die Farbe des Parents wieder

Gruß, teebee
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Neue Komponente / Properties speichern ?

  Alt 24. Sep 2004, 10:06
Zitat von teebee:
Parentcolor gibt aber nicht die Farbe des Parents wieder
Gruß, teebee
Doch, ParentColor auf True gesetzt und Color wird automatisch auf die Farbe des Vorgängers gesetzt !
"To have a control use the same color as its parent control, set ParentColor to true If ParentColor is false the control uses its own Color property."

Gruss
Hans
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.019 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#13

Re: Neue Komponente / Properties speichern ?

  Alt 24. Sep 2004, 10:41
Weil mich die Sache interessiert hat, hab ich mal ein bisschen rumprobiert. Hier das Ergebnis:
Delphi-Quellcode:
unit EditEx;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Graphics;

type
  TEditEx = class(TEdit)
  private
    FColor: TColor;
    FCursor: TCursor;
    FOnlyShow: Boolean;
    function GetColor: TColor;
    function GetCursor: TCursor;
    function IsColorStored: Boolean;
    function IsCursorStored: Boolean;
    procedure SetColor(const Value: TColor);
    procedure SetCursor(const Value: TCursor);
    procedure SetOnlyShow(const Value: Boolean);
  published
    property Color: TColor read GetColor write SetColor stored IsColorStored default clWindow;
    property Cursor: TCursor read GetCursor write SetCursor stored IsCursorStored default crDefault;
    property OnlyShow: Boolean read FOnlyShow write SetOnlyShow;
  end;

procedure Register;

implementation

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

{ TEditEx }

function TEditEx.GetColor: TColor;
begin
  Result := inherited Color;
end;

function TEditEx.GetCursor: TCursor;
begin
  Result := inherited Cursor;
end;

function TEditEx.IsColorStored: Boolean;
begin
  Result := not ParentColor and not OnlyShow;
end;

function TEditEx.IsCursorStored: Boolean;
begin
  Result := not OnlyShow;
end;

procedure TEditEx.SetColor(const Value: TColor);
begin
  if not OnlyShow then
    inherited Color := Value;
end;

procedure TEditEx.SetCursor(const Value: TCursor);
begin
  if not OnlyShow then
    inherited Cursor := Value;
end;

procedure TEditEx.SetOnlyShow(const Value: Boolean);
begin
  if FOnlyShow <> Value then
  begin
    FOnlyShow := Value;
    if OnlyShow then
    begin
      FColor := inherited Color;
      FCursor := inherited Cursor;
      inherited Color := clBtnFace;
      inherited Cursor := crArrow;
    end
    else
    begin
      inherited Color := FColor;
      inherited Cursor := FCursor;
    end;
  end;
end;

end.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#14

Re: Neue Komponente / Properties speichern ?

  Alt 24. Sep 2004, 10:42
Moin!

Trotzdem gibt ParentColor nicht die Farbe des Parents wieder sondern es stellt nur ein Flag da. Es gibt nur True oder False wieder, aber keinen Farbwert...

Und genau das war gemeint - was die Color Eigenschaft abhängig von dem Wert enthält ist die andere Frage...

MfG
Muetze1
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#15

Re: Neue Komponente / Properties speichern ?

  Alt 24. Sep 2004, 10:42
OK, sorum hast Du natürlich recht...

Was das 'Überschreiben' der privaten Methoden angeht, habe ich mal selber etwas rumprobiert. Man kann auf jeden Fall eine statische private Methode der Basisklasse neu deklarieren. Die neue Methode lässt sich auch von einer abgeleiteten Instanz aufrufen. In Deinem Fall soll aber die neu deklarierte Methode von einer Eigenschaft aufgerufen werden, die sich in der Basisklasse befindet. Das geht leider nicht, es wird die Methode der Basisklasse aufgerufen.
Man müsste auch die Eigenschaft neu deklarieren. Dazu wiederum müsste man auch das entsprechende private Feld neu deklarieren. Andere Methoden aus der Basisklasse würden dann aber nicht auf das richtige (neue) Feld zugreifen.

Schade, geht also wohl doch nicht

Gruß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.019 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#16

Re: Neue Komponente / Properties speichern ?

  Alt 24. Sep 2004, 10:47
Zitat von teebee:
Was das 'Überschreiben' der privaten Methoden angeht, habe ich mal selber etwas rumprobiert. Man kann auf jeden Fall eine statische private Methode der Basisklasse neu deklarieren. Die neue Methode lässt sich auch von einer abgeleiteten Instanz aufrufen. In Deinem Fall soll aber die neu deklarierte Methode von einer Eigenschaft aufgerufen werden, die sich in der Basisklasse befindet. Das geht leider nicht, es wird die Methode der Basisklasse aufgerufen.
Man müsste auch die Eigenschaft neu deklarieren. Dazu wiederum müsste man auch das entsprechende private Feld neu deklarieren. Andere Methoden aus der Basisklasse würden dann aber nicht auf das richtige (neue) Feld zugreifen.

Schade, geht also wohl doch nicht
Falsch, guckst du oben.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#17

Re: Neue Komponente / Properties speichern ?

  Alt 24. Sep 2004, 10:48
Zitat von teebee:
Andere Methoden aus der Basisklasse würden dann aber nicht auf das richtige (neue) Feld zugreifen.
Wie ich an Stevies Posting sehe, scheint das in diesem Fall egal zu sein, habe mir noch nicht die Mühe gemacht, zu schauen, ob noch irgendwo in der Vorgängerklasse auf FColor oder FCursor zugegriffen wird.

Gruß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.019 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#18

Re: Neue Komponente / Properties speichern ?

  Alt 24. Sep 2004, 10:53
Zitat von teebee:
Wie ich an Stevies Posting sehe, scheint das in diesem Fall egal zu sein, habe mir noch nicht die Mühe gemacht, zu schauen, ob noch irgendwo in der Vorgängerklasse auf FColor oder FCursor zugegriffen wird.
Meine privaten Felder haben nix mit den privaten Feldern der Vorgängerklassen zu tun!!! Sie heißen bloß genauso. Wenn also irgendwo in TControl auf FColor zugegriffen wird, dann juckt das nicht, ob in der Klasse TEditEx irgendwas da drin steht, denn er hat sein eigenes FColor. Private Felder werden nicht überschrieben, sie sind für jede Klasse gekapselt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#19

Re: Neue Komponente / Properties speichern ?

  Alt 24. Sep 2004, 11:13
Zitat von Stevie:
Meine privaten Felder haben nix mit den privaten Feldern der Vorgängerklassen zu tun!!! Sie heißen bloß genauso. Wenn also irgendwo in TControl auf FColor zugegriffen wird, dann juckt das nicht, ob in der Klasse TEditEx irgendwas da drin steht, denn er hat sein eigenes FColor. Private Felder werden nicht überschrieben, sie sind für jede Klasse gekapselt.
Eben das meine ich. Wenn die neue Klasse nun eine Methode aufruft, die nicht selber überschrieben wurde, die aber so ein überschriebenes Feld verändert, wird das 'alte' Feld der Vorgängerklasse beeinflusst, und man hat Inkonsistenzen zwischen beiden Klassen. Also müsste man noch alle Methoden, die auf solche Felder zugreifen, mitkopieren, damit sichergestellt ist, dass immer die neuen gemeint sind.

In diesem Fall hier scheint es ja egal zu sein, prinzipiell kann es aber Probleme machen.

Gruß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.019 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#20

Re: Neue Komponente / Properties speichern ?

  Alt 24. Sep 2004, 11:31
Zitat von teebee:
Wenn die neue Klasse nun eine Methode aufruft, die nicht selber überschrieben wurde, die aber so ein überschriebenes Feld verändert, wird das 'alte' Feld der Vorgängerklasse beeinflusst, und man hat Inkonsistenzen zwischen beiden Klassen. Also müsste man noch alle Methoden, die auf solche Felder zugreifen, mitkopieren, damit sichergestellt ist, dass immer die neuen gemeint sind.
Die neuen privaten Felder FColor und FCursor dienen "nur" zum Ablegen der alten Werte wenn man auf OnlyShow = True wechselt. Wenn man natürlich auf TEdit castet, dann kann man die Farben ändern usw, aber wenn man mit TEditEx arbeitet, dann ist das nicht möglich. (Vielleicht hätte ich sie FOldColor und FOldCursor nennen sollen um solche Verwirrung auszuschließen... )
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 18:54 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