![]() |
neue ListBox abgeleiten (OOP)
Hallo erstmal,
ich habe folgendes Problem: Ich will eine neue ListBox ableiten (kein Problem) die mir außerdem noch ein THeaderControl darstellt. Also ich will "über" der ListBox dann die Komponente HeaderControl darstellen und dann eben darunter die ListBox.Beide Komponenten (HeaderControl und ListBox) will ich zu einer Komponente zusammenfügen.Nur leider wird mir die HeaderControl-Kompo nicht angezeigt... Könnt ihr mal gucken woran das liegt? MFG Alex
Delphi-Quellcode:
unit HeaderListe;
interface uses SysUtils, Classes, Controls, StdCtrls, Types, Windows, Graphics, ComCtrls; type THeaderListBox = class(TListBox) private { Private-Deklarationen } FHeaderControl : THeaderControl; protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(AOwner:TComponent); override; destructor Destroy; override; published { Published-Deklarationen } end; { ---------------------------------------------------------------------------- } procedure Register; { ---------------------------------------------------------------------------- } implementation { ---------------------------------------------------------------------------- } procedure Register; begin RegisterComponents('Test', [THeaderListBox]); end; { ---------------------------------------------------------------------------- } { THeaderListBox } { ---------------------------------------------------------------------------- } constructor THeaderListBox.Create(AOwner: TComponent); var HS: THeaderSection; begin inherited Create(AOwner); FHeaderControl := THeaderControl.Create(AOwner); Self.Left := 248; Self.Width := 249; Self.Height := 185; Self.Top := 36; Self.Style := lbOwnerDrawFixed; FHeaderControl.Left := 248; FHeaderControl.Width := 249; FHeaderControl.Height := 22; FHeaderControl.Top := 15; FHeaderControl.Parent := Self; FHeaderControl.Align := alCustom; FHeaderControl.Style := hsButtons; FHeaderControl.Show; with FHeaderControl do begin HS := Sections.Add; HS.Text := 'Item1'; HS.Width := Width div 2; HS := Sections.Add; HS.Text := 'Item2'; HS.Width := Width div 2; end; end; { ---------------------------------------------------------------------------- } destructor THeaderListBox.Destroy; begin inherited; end; { ---------------------------------------------------------------------------- } end. |
Re: neue ListBox abgeleiten (OOP)
Moin Alex,
ich hab' das jetzt nicht in allen Einzelheiten analysiert, aber da das HeaderControl die ListBox als Parent erhält, muss Du die Positionierung auch entsprechend wählen. Hierdurch:
Delphi-Quellcode:
wird die Komponente auf Position (248,36) relativ zum Parent der Komponente angezeigt, und das HeaderControl auf (496,51), relativ zum Parent der Komponente.
Self.Left := 248;
Self.Top := 36; FHeaderControl.Left := 248; FHeaderControl.Top := 15; FHeaderControl.Parent := Self; Ich vermute mal, dass das ausserhalb des sichbaren Bereiches liegt. Probier's mal mit
Delphi-Quellcode:
Ein Control wird immer relativ zum Parent angezeigt.
FHeaderControl.Left := 0;
|
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Programmieren allgemein" nach "VCL-Komponenten und Controls" verschoben.
Hat etwas mit Delphi zu tun. |
Re: neue ListBox abgeleiten (OOP)
Hi,
Christian meinte vermutlich "FHeaderControl.Left := 0;" ;) Dann noch Top:=0 und es ist am oberen Rand - Allerdings innerhalb seines Parents! Gruß Stephan :dance: |
Re: neue ListBox abgeleiten (OOP)
Moin Stephan,
Zitat:
Ist korrgiert. |
Re: neue ListBox abgeleiten (OOP)
Ich habe es dann auch mit dem Left := 0 gemerkt :-)
Folgende Lösung habe ich jetzt:
Delphi-Quellcode:
Wenn ich die Kompo zur Laufzeit anzeige funktioniert es.Wenn ich sie aber installiere, dann habe ich auf dem Formular 2Kompo's die ich einzeln anwählen kann und wenn ich F9 drücke kommt ein Fehler:
unit HeaderListe;
interface uses SysUtils, Classes, Controls, StdCtrls, Types, Windows, Graphics, ComCtrls; type THeaderListBox = class(TListBox) private { Private-Deklarationen } FHeaderControl : THeaderControl; protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(AOwner:TComponent); override; destructor Destroy; override; published { Published-Deklarationen } end; { ---------------------------------------------------------------------------- } procedure Register; { ---------------------------------------------------------------------------- } implementation { ---------------------------------------------------------------------------- } procedure Register; begin RegisterComponents('Test', [THeaderListBox]); end; { ---------------------------------------------------------------------------- } { THeaderListBox } { ---------------------------------------------------------------------------- } constructor THeaderListBox.Create(AOwner: TComponent); var HS: THeaderSection; begin inherited Create(AOwner); Self.Left := 248; Self.Width := 249; Self.Height := 185; Self.Top := 100; Self.Style := lbOwnerDrawFixed; FHeaderControl := THeaderControl.Create(AOwner); FHeaderControl.Parent := TWinControl(AOwner); FHeaderControl.Align := alCustom; FHeaderControl.Left := 248; FHeaderControl.Width := 249; FHeaderControl.Height := 20; FHeaderControl.Top := 81; FHeaderControl.Style := hsButtons; FHeaderControl.Show; with FHeaderControl do begin HS := Sections.Add; HS.Text := 'Item1'; HS.Width := Width div 2; HS := Sections.Add; HS.Text := 'Item2'; HS.Width := Width div 2; end; end; { ---------------------------------------------------------------------------- } destructor THeaderListBox.Destroy; begin FHeaderControl.Free; inherited; end; { ---------------------------------------------------------------------------- } end. Exception EClassNotFound in Modul ..... Klasse THeaderControl nicht gefunden. Wenn ich im Contructor aber folgendes schreibe, dann kommt der Fehler nicht aber ich sehe die HeaderKompo dann zur Designzeit nicht:
Delphi-Quellcode:
Ich hoffe ihr könnt mir helfen...
inherited Create(AOwner);
Self.Left := 248; Self.Width := 249; Self.Height := 185; Self.Top := 100; Self.Style := lbOwnerDrawFixed; Self.OnDrawItem := DrawAllItem; if ComponentState = [csDesigning] then Exit; begin FHeaderControl := THeaderControl.Create(AOwner); FHeaderControl.SetSubComponent(True); FHeaderControl.Parent := TWinControl(AOwner); FHeaderControl.Align := alCustom; FHeaderControl.Left := 248; FHeaderControl.Width := 249; FHeaderControl.Height := 20; FHeaderControl.Top := 81; FHeaderControl.Style := hsButtons; FHeaderControl.Show; FHeaderControl.OnSectionResize := SectionResize; end; MFG Alex |
Re: neue ListBox abgeleiten (OOP)
Moin Alex,
such' hier mal nach ![]() Die Konfiguration des Zusätzlichen Controls müsste dort vorgenommen werden. |
Re: neue ListBox abgeleiten (OOP)
okay werde mal nachschauen ob ich da was passendes finde.
Danke schonmal MFG Alex |
Re: neue ListBox abgeleiten (OOP)
Damit hats geklappt: CREATEWND...
Danke schön Christian MFG Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr. |
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