AGB  ·  Datenschutz  ·  Impressum  







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

neue ListBox abgeleiten (OOP)

Ein Thema von Alex_ITA01 · begonnen am 5. Jan 2005 · letzter Beitrag vom 5. Jan 2005
Antwort Antwort
Alex_ITA01

Registriert seit: 22. Sep 2003
1.123 Beiträge
 
Delphi 12 Athens
 
#1

neue ListBox abgeleiten (OOP)

  Alt 5. Jan 2005, 10:32
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.
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: neue ListBox abgeleiten (OOP)

  Alt 5. Jan 2005, 13:45
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:
Self.Left := 248;
Self.Top := 36;

FHeaderControl.Left := 248;
FHeaderControl.Top := 15;
FHeaderControl.Parent := Self;
wird die Komponente auf Position (248,36) relativ zum Parent der Komponente angezeigt, und das HeaderControl auf (496,51), relativ zum Parent der Komponente.
Ich vermute mal, dass das ausserhalb des sichbaren Bereiches liegt.
Probier's mal mit

FHeaderControl.Left := 0; Ein Control wird immer relativ zum Parent angezeigt.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
5. Jan 2005, 13:47
Dieses Thema wurde von "Christian Seehase" von "Programmieren allgemein" nach "VCL-Komponenten und Controls" verschoben.
Hat etwas mit Delphi zu tun.
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#4

Re: neue ListBox abgeleiten (OOP)

  Alt 5. Jan 2005, 13:55
Hi,

Christian meinte vermutlich "FHeaderControl.Left := 0;"
Dann noch Top:=0 und es ist am oberen Rand - Allerdings innerhalb seines Parents!

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: neue ListBox abgeleiten (OOP)

  Alt 5. Jan 2005, 13:59
Moin Stephan,

Zitat von Steve:
Hi,

Christian meinte vermutlich "FHeaderControl.Left := 0;"
stimmt

Ist korrgiert.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.123 Beiträge
 
Delphi 12 Athens
 
#6

Re: neue ListBox abgeleiten (OOP)

  Alt 5. Jan 2005, 14:14
Ich habe es dann auch mit dem Left := 0 gemerkt
Folgende Lösung habe ich jetzt:

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);
  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.
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:
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:
  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;
Ich hoffe ihr könnt mir helfen...
MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: neue ListBox abgeleiten (OOP)

  Alt 5. Jan 2005, 14:20
Moin Alex,

such' hier mal nach Hier im Forum suchenCreateWnd.
Die Konfiguration des Zusätzlichen Controls müsste dort vorgenommen werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.123 Beiträge
 
Delphi 12 Athens
 
#8

Re: neue ListBox abgeleiten (OOP)

  Alt 5. Jan 2005, 14:24
okay werde mal nachschauen ob ich da was passendes finde.
Danke schonmal
MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.123 Beiträge
 
Delphi 12 Athens
 
#9

Re: neue ListBox abgeleiten (OOP)

  Alt 5. Jan 2005, 14:47
Damit hats geklappt: CREATEWND...
Danke schön Christian
MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:30 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