AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Vererbung bestimmter Eigenschaften deaktiviern
Thema durchsuchen
Ansicht
Themen-Optionen

Vererbung bestimmter Eigenschaften deaktiviern

Ein Thema von delphin · begonnen am 19. Jan 2007 · letzter Beitrag vom 19. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
delphin

Registriert seit: 21. Aug 2003
Ort: Chemnitz
29 Beiträge
 
Delphi 7 Professional
 
#1

Vererbung bestimmter Eigenschaften deaktiviern

  Alt 19. Jan 2007, 15:10
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:

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

Wie kann ich die Vererbung für diese Eigenschaft abstellen ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Vererbung bestimmter Eigenschaften deaktiviern

  Alt 19. Jan 2007, 15:11
mach sie privat.
Markus Kinzler
  Mit Zitat antworten Zitat
delphin

Registriert seit: 21. Aug 2003
Ort: Chemnitz
29 Beiträge
 
Delphi 7 Professional
 
#3

Re: Vererbung bestimmter Eigenschaften deaktiviern

  Alt 19. Jan 2007, 17:03
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
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Vererbung bestimmter Eigenschaften deaktiviern

  Alt 19. Jan 2007, 17:40
Was ist DrawRect ?
Wenn ich die Höhe eines Edit ändere, so funktioniert das ohne Probleme !
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Vererbung bestimmter Eigenschaften deaktiviern

  Alt 19. Jan 2007, 18:02
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]
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Vererbung bestimmter Eigenschaften deaktiviern

  Alt 19. Jan 2007, 18:44
So ist es. Die OOP-Konzepte, insbesondere Vererbung scheinen nicht bekannt zu sein. Vererbt wird so jedenfalls nichts.
Gruß
Hansa
  Mit Zitat antworten Zitat
delphin

Registriert seit: 21. Aug 2003
Ort: Chemnitz
29 Beiträge
 
Delphi 7 Professional
 
#7

Re: Vererbung bestimmter Eigenschaften deaktiviern

  Alt 19. Jan 2007, 20:36
Hallo,

mir ist sehr wohl klar, das ich mit der Anweisung

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
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Vererbung bestimmter Eigenschaften deaktiviern

  Alt 19. Jan 2007, 20:43
Zitat von delphin:
Trotzdem bleibe ich dabei, dass es dadurch auch die Eigenschaft der Checklistbox irgendwie "erbt".
Nein tut es nicht.

Zitat von delphin:
CheckListBox.Font.Size:=10; // diesen Parameter erhält oder erbt auch Edit1 !!
Schau dir mal die Eigenschaft ParentFont von TEdit an.

Gruß
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Vererbung bestimmter Eigenschaften deaktiviern

  Alt 19. Jan 2007, 21:31
@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.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: Vererbung bestimmter Eigenschaften deaktiviern

  Alt 19. Jan 2007, 21:43
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. Inwiefern trifft das jetzt auf ein Edit und eine Checkbox zu ? 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.

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 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:33 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