Delphi-PRAXiS
Seite 2 von 2     12   

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)

3_of_8 19. Jan 2007 20:50

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Adoptierte Kinder erben schließlich auch keine genetischen Merkmale von ihren Adoptiveltern. ;)
Sie können höchstens Verhaltensweisen von ihnen erben.

So ist es auch hierbei: Ein Laben "erbt" seine Farbe nicht von der Form, weil es nicht von ihr abstammt. Es bekommt sie nur implizit zugewiesen, wenn ParentColor gesetzt ist.

TStringlist 19. Jan 2007 21:00

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
@Hansa: Mit "komplett" meinte ich doch sowieso bloß diejenigen, die es auch nur sollen. :!:

inherited 19. Jan 2007 21:07

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Zitat:

Zitat von 3_of_8
Adoptierte Kinder erben schließlich auch keine genetischen Merkmale von ihren Adoptiveltern. ;)
Sie können höchstens Verhaltensweisen von ihnen erben.

Heee, der Spruch ist von mir!

delphin 19. Jan 2007 21:12

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
ParentFont habe ich mir schon angeschaut. Damit kann man schon verhindern das die Größe des Schrifttypes "geerbt" wird.

Sollte nur zur Veranschaulichung des Phänomens "Erbens" dienen. Die unerklärliche Sache mit der unberücksichtigten "Edit1.Height" bleibt davon aber unberührt !!!

Hier mal das ganze zum Selbstprobieren. Wie Ihr es nennen wollt sei dahin gestellt:

Delphi-Quellcode:
unit Source;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, CheckLst;


type

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure CheckListBoxDblClick(Sender: TObject);
    procedure CheckListBoxExit(Sender: TObject);
  private
    Edit1: TEdit;
    CheckListBox : TCheckListBox;
  public
    { Public-Deklarationen }
  end;

var Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
Var DrawRect: TRect;
begin CheckListBox:=TCheckListBox.Create(Form1);
      CheckListBox.Parent:=Form1;
      CheckListBox.Font.Size:=10;

      CheckListBox.OnDblClick:=CheckListBoxDblClick;
      CheckListBox.OnExit:=CheckListBoxExit;

      CheckListBox.Items.Add('Zeile 1');
      CheckListBox.Items.Add('Zeile 2');
      CheckListBox.Items.Add('Zeile 3');
      {== Editfeld als Kind von CheckListBox ableiten =======}
      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+1;   //Zeile: *1
      Edit1.Visible:=false;
end;

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; //Zeile: *2
      Edit1.Visible:=true;
end;

procedure TForm1.CheckListBoxExit(Sender: TObject);
begin Edit1.Visible:=false;

end;

end.
Nochmal das Problem:
1. Wenn nur Zeile *1: steht (Zeile 2* ausgeklammert), hat es überhaupt keine Auswirkung auf die Höhe der Editbox.
2. Wenn Zeile *2 eingefügt wird, stimmt die Höhe der Box, aber nur ab dem 2. mal anklicken !

Warum !!!

Übrigens: Ob die Edit-Komponente dabei als Privat deklairiert ist spielt kein Rolle!

Wäre wirklich nett, wenn einer dafür eine Lösung hätte. Ich komme an der besagten Stelle einfach nicht weiter.

Viele Grüße und Danke
Gerd

mkinzler 19. Jan 2007 21:27

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Du meinst die Wertevererbung, am im Allgemeinen versteht man unter Vererbung die Vererbung von Eigenschaften. Eine private Eigenschaft wird nicht mitverebt deshalb mein Tipp. In deinem Fall hilft es ja nichts.

Hawkeye219 19. Jan 2007 21:27

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Hallo delphin,

verschiebe einmal die Zuweisung zu Edit1.Visible vor das Setzen der Position bzw. Höhe. Vielleicht solltest du dem Editfeld auch noch den Fokus geben:

Delphi-Quellcode:
procedure TForm1.CheckListBoxDblClick (Sender: TObject);
Var
  DrawRect : TRect;
begin
  DrawRect := CheckListBox.ItemRect(CheckListBox.ItemIndex);
  Edit1.Text := CheckListBox.Items.Strings[CheckListBox.ItemIndex];
  Edit1.Visible := True; // neu
  Edit1.Top := DrawRect.Top;
  Edit1.Height := DrawRect.Bottom - DrawRect.Top + 2; //Zeile: *2
//  Edit1.Visible:=true; // entfernt
  Edit1.SetFocus; // neu
end;
Gruß Hawkeye

delphin 19. Jan 2007 21:37

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Hallo Hawkeye219,

Danke für Deine Antwort. So geht es tatsächlich schon beim erstenmal ! :thumb:

Ich wollte das Edit-Element eben erst mit Text versehen und dann sichtbar machen. Von der Logik her schien mir das klüger.
Wie bist Du auf die Lösung gekommen - ausprobiert oder gewußt ? :wink:

Ich meine, warum ist die Reihenfolge, wichtig ?

Vielleicht hast Du ja auch noch eine Erklärung, warum die Definition im OnCreate-Ereignis völlig unberücksichtig bleibt - wollte mir es eigentlich sparen, die Größe des Editfeldes immer wieder neu zuberechnen, da sich diese ja nicht ändert !

Danke
Gerd

Hawkeye219 19. Jan 2007 22:11

Re: Vererbung bestimmter Eigenschaften deaktiviern
 
Zitat:

Zitat von delphin
Wie bist Du auf die Lösung gekommen - ausprobiert oder gewußt ?

Ich habe es ausprobiert, weil in ähnlichen Situation eine Vertauschung von Anweisungen oft eine Lösung geliefert hat.

Zitat:

Vielleicht hast Du ja auch noch eine Erklärung, warum die Definition im OnCreate-Ereignis völlig unberücksichtig bleibt
Sorry, ich habe nicht alle Abläufe innerhalb der VCL im Kopf und kann deshalb nur Vermutungen anstellen. Die Höhe des Editfelds ändert sich bei einer Änderung der Schriftgröße ebenfalls. Eventuell werden deine Einstellungen zunächst doch übernommen, später aber durch eine Initialisierung oder Änderung des Fonts überschrieben.
Vielleicht liest ja einer der VCL-Experten mit und kann deine Frage besser beantworten.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz