Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Vererbung bestimmter Eigenschaften deaktiviern (https://www.delphipraxis.net/84647-vererbung-bestimmter-eigenschaften-deaktiviern.html)

delphin 19. Jan 2007 14:10


Vererbung bestimmter Eigenschaften deaktiviern
 
Hallo,

ich habe von einem CheckListfeld eine Edit Feld zur Eingabe wiefolgt abgeleitet:
Delphi-Quellcode:
 
Edit1:=TEdit.Create(nil)
Edit1.Parent:=CheckListBox;
Nun erbt Edit erstmal alle Eigenschaften von meiner Checklistbox. Soweit logisch. Wenn ich nun mein Editfeld in Höhe und Schriftgröße wie folgt ändern möchte:

Delphi-Quellcode:
Edit1.Height:=DrawRect.Bottom-DrawRect.Top+1;
dann bleibt das ohne Auswirkung!? :wall:

Wie kann ich die Vererbung für diese Eigenschaft abstellen ?

mkinzler 19. Jan 2007 14:11

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
mach sie privat.

delphin 19. Jan 2007 16:03

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Wie meinst Du das mit:
Zitat:

mach sie privat.
Wenn ich die Deklartion so einstelle:

Delphi-Quellcode:
TForm1 = class(TForm)
    // Edit1: TEdit;
    CheckListBox: TCheckListBox;
    procedure FormCreate(Sender: TObject);
    procedure CheckListBoxDblClick(Sender: TObject);
    procedure CheckListBoxExit(Sender: TObject);
  private
    { Private-Deklarationen }
    Edit1: TEdit;
  public
    { Public-Deklarationen }
  end;
bringt das keine Punkt. Die Zuweisung von Edit.Height:=xy hat keine Auswirkung. Die Höhe bleibt wie sie geerbt wurde!

Gerd

MrKnogge 19. Jan 2007 16:40

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Was ist DrawRect ?
Wenn ich die Höhe eines Edit ändere, so funktioniert das ohne Probleme !

TStringlist 19. Jan 2007 17:02

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Zitat:

Zitat von delphin
ich habe von einem CheckListfeld eine Edit Feld zur Eingabe wiefolgt abgeleitet:
Delphi-Quellcode:
 
Edit1:=TEdit.Create(nil)
Edit1.Parent:=CheckListBox;
Nun erbt Edit erstmal alle Eigenschaften von meiner Checklistbox. Soweit logisch.

Wahrscheinlich hast Du noch keinen rechten Durchblick diesbezüglich, aber eine Parent-Zuweisung bewirkt nur, dass das Edit1 danach visuell auf deiner CheckListBox draufsitzt, bzw. oben drauf zum Vorschein kommt. Sonst nichts weiter!

[edit=Christian Seehase]Doppelpost gelöscht. Mfg, Christian Seehase[/edit]

Hansa 19. Jan 2007 17:44

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
So ist es. Die OOP-Konzepte, insbesondere Vererbung scheinen nicht bekannt zu sein. Vererbt wird so jedenfalls nichts.

delphin 19. Jan 2007 19:36

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Hallo,

mir ist sehr wohl klar, das ich mit der Anweisung

Delphi-Quellcode:
Edit1.Parent:=CheckListBox;
die erstellte Komponente auf der Checklistbox sichtbar mache.
Trotzdem bleibe ich dabei, dass es dadurch auch die Eigenschaft der Checklistbox irgendwie "erbt".

mit folgender Anweisung:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
Var DrawRect: TRect;
begin {== Checklistbox erzeugen ===========================}
      CheckListBox:=TCheckListBox.Create(Form1);
      CheckListBox.Parent:=(Form1);
      CheckListBox.Items.Add('Zeile 1');
      CheckListBox.Items.Add('Zeile 2');
      CheckListBox.Items.Add('Zeile 3');
      CheckListBox.Font.Size:=10;     // diesen Parameter erhält oder erbt auch Edit1 !!
     
      {== Editfeld erzeugen und auf Checkbox legen =======}
      Edit1:=TEdit.Create(Form1);
      Edit1.Parent:=CheckListBox;
     
      {== Ermitteln der Edit.Höhe über Größe der CheckListbox ==}
      DrawRect:=CheckListBox.ItemRect(0);
      Edit1.Height:=DrawRect.Bottom-DrawRect.Top+2;
      Edit1.Visible:=false;
end;
Fragen:
1. Die Zuweisung für Edit.Height wird hier völlig ignoriert !
2. Erhält die Edit-Komponente z.B. genau die Schriftgöße, die Checklistbox zugewiesen bekommt. Warum, wenn nicht geerbt ?

3. schreibt man z.B. für das Ereignis Doppelklick folgendes:
Delphi-Quellcode:
  //Variante 1:
procedure TForm1.CheckListBoxDblClick(Sender: TObject);
Var DrawRect: TRect;
begin DrawRect:=CheckListBox.ItemRect(CheckListBox.ItemIndex);
      Edit1.Text:=CheckListBox.Items.Strings[CheckListBox.ItemIndex];
      Edit1.Top:=DrawRect.Top;
      Edit1.Visible:=true;
end;
wird die im OnCreate-Ereignis eingestelle Größe völlig ignoriert !

schreibt man aber für das Ereignis Doppelklick folgendes:
Delphi-Quellcode:
  //Variante 2:
procedure TForm1.CheckListBoxDblClick(Sender: TObject);
Var DrawRect: TRect;
begin DrawRect:=CheckListBox.ItemRect(CheckListBox.ItemIndex);
      Edit1.Text:=CheckListBox.Items.Strings[CheckListBox.ItemIndex];
      Edit1.Top:=DrawRect.Top;
      Edit1.Height:=DrawRect.Bottom-DrawRect.Top+2; // <== erneute Zuweisung der Höhe
      Edit1.Visible:=true;
end;
funktioniert es immer- aber erst - ab dem zweiten Aufruf korrekt.

Vielleicht habt hier darauf dann auch eine Antwort ? :roll:

Gruß Gerd

MrKnogge 19. Jan 2007 19:43

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Zitat:

Zitat von delphin
Trotzdem bleibe ich dabei, dass es dadurch auch die Eigenschaft der Checklistbox irgendwie "erbt".

Nein tut es nicht.

Zitat:

Zitat von delphin
Delphi-Quellcode:
CheckListBox.Font.Size:=10;     // diesen Parameter erhält oder erbt auch Edit1 !!

Schau dir mal die Eigenschaft ParentFont von TEdit an.

Gruß

TStringlist 19. Jan 2007 20:31

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
@delphin

Die Vokabel "erben" ist in Delphi ein absolut zentraler Begriff! Einer der ausdrückt, dass bei einer Komponentenableitung die Eigenschaften einer Ursprungsklasse komplett auf die dabei neu entstehende Klasse übergehen.

Was Du bezüglich einer Zuweisung der Parent-Property meinst, ist aber eher nur ein damit eventuell auch noch gleichzeitiges Mitzuweisen einiger weniger anderer Properties, wie Color o. Font. Und zwar auch wieder abhängig davon, ob z.B. im OI solche weiteren (boolschen) Properties wie ParentColor o. ParentFont ein TRUE oder FALSE geladen haben.

Hansa 19. Jan 2007 20:43

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Nene, so wird das nichts. Du musst dir mal zumindest über die Nomenklatur Klarheit verschaffen. Der Begriff "Vererbung" macht doch nur Sinn, wenn es einen Erben gibt. Und der muss einen Vorfahren haben, sonst kann er ja nichts erben. :P Inwiefern trifft das jetzt auf ein Edit und eine Checkbox zu ? :shock: Also : was soll denn da überhaupt vererbt werden ?

Irgendwo gibt es wohl schon eine gemeinsame Wurzel, aber wo ? Bei Adam und Eva vielleicht ? Um bei Edit/Checkbox zu bleiben : das zeichnen der Umrandung, ja das wäre eine Gemeinsamkeit. Aber das ist doch eine sehr schwache Grundlage, um etwas zu vererben. Typischer Fehler auch in der Komponentenentwicklung : anstatt sich einen guten Vorfahren rauszusuchen und möglichst viel zu verwenden (von dem zu erben) wird das Rad komplett neu erfunden und man fängt bei 0 an, also mit TComponent usw. Ist hier jeden Tag nachzulesen. :mrgreen:

Was Du willst ist das Kopieren/Setzen von Eigenschaften von irgendwo kopiert. Da wird nichts vererbt, sondern es werden lediglich Werte übernommen.

Wegen roter Kasten :

Zitat:

Zitat von TStringlist
Die Vokabel "erben" ist in Delphi ein absolut zentraler Begriff! Einer der ausdrückt, dass bei einer Komponentenableitung die Eigenschaften einer Ursprungsklasse komplett auf die dabei neu entstehende Klasse übergehen.

Komplett geht nichts "über". Das kann man schon einschränken. Dafür gibt es (siehe mkinzlers Beitrag) private und in diesem Falle protected etc. Und dann noch override, inherited usw.

Ich bleibe dabei : so wird das nichts. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:18 Uhr.
Seite 1 von 2  1 2      

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