Einzelnen Beitrag anzeigen

mcinternet

Registriert seit: 22. Apr 2010
Ort: Odenwald
193 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Eigene Komponente:Element hat kein übergeordnetes Fenster

  Alt 21. Mai 2019, 16:02
@Uwe Raabe: das ".SetSubComponent(True);" brachte nix

Ich geb Euch hier mal ein bisschen code:

Code:


unit uDruckerPanel;

interface

  uses System.Classes, Vcl.ExtCtrls, Vcl.StdCtrls, AboutOwn;



  Type


    TDruckerPanel = Class(TPanel)
    private
      fLBDruckerAusWahl : TListbox;
      flblUeberschrift : TLabel;
      flblAnzeigen    : TLabel;
      flblAuswahl     : TLabel;
      fDrucker : String;
<snip>
.
.
.
.
.
.
.
  End;





implementation

//uses Printers;
uses System.SysUtils, VCL.Forms, System.IniFiles, VCL.Printers, VCL.Controls, Vcl.Graphics;

Procedure TDruckerPanel.Init;
begin
   
   <snip>
   height     := 400;
   width      := 250;
end;

Procedure TDruckerPanel.WriteDruckerName(sDrucker : String);
Begin
   fDrucker := sDrucker; //
   flblAuswahl.Caption := fDrucker;
End;

Procedure TDruckerPanel.WriteDruckerNummer(sNr : Integer);
Begin
  fDruckerNummer := sNr; //
  Printer.PrinterIndex := sNr;
End;



Procedure TDruckerPanel.Show;
begin
 inherited;
  fLBDruckerAusWahl.Show;

  Application.ProcessMessages;
end;

Constructor TDruckerPanel.Create(AOwner : TComponent);
  var x   : integer;
  var ini : TIniFile;
begin
  inherited create(AOwner);
  Init;

  ParentFont := false;
  ParentColor := false;
  color := clMoneyGreen;

  fPanTop := TPanel.Create(self);
  fPanTop.Parent := self;
  fpanTop.Height := 25;
  fPanTop.Align := alTop;
  fPanTop.ParentColor := false;
  fPanTop.color := clMoneyGreen;

  fPanBottom := TPanel.Create(self);
  fPanBottom.Parent := self;
  fPanBottom.Height := 25;
  fPanBottom.Align := alBottom;

  fPanMid := TPanel.Create(self);
  fPanMid.Parent := self;
  fPanMid.Align := alClient;


  flblUeberschrift := TLabel.Create(self);
  flblUeberschrift.Parent := fPanTop;
  flblUeberschrift.Left := 20;
  flblUeberschrift.Top := 5;
  flblUeberschrift.Caption := 'Druckerauswahl';
  flblUeberschrift.ParentFont := false;
  flblUeberschrift.Font.Size := 10;


  fLBDruckerAusWahl := TListbox.Create(self);
  fLBDruckerAusWahl.SetSubComponent(True); // Brachte nix - ist drin - stört nicht
  fLBDruckerAusWahl.Parent := fPanMid;
  fLBDruckerAusWahl.Align := alClient;
  fLBDruckerAusWahl.ParentFont := false;
  fLBDruckerAusWahl.Font.Size := 8;

  flblAnzeigen := TLabel.Create(self);
  flblAnzeigen.Parent := fPanBottom;
  flblAnzeigen.Top := 5;
  flblAnzeigen.Left := 14;
  flblAnzeigen.Caption := 'Auswahl:';
  flblAnzeigen.ParentFont := false;
  flblAnzeigen.Font.Size := 10;

  flblAuswahl := TLabel.Create(self);
  flblAuswahl.Parent := fPanBottom;
  flblAuswahl.Top := flblAnzeigen.Top;
  flblAuswahl.Left := 73;
  flblAuswahl.ParentFont := false;
  flblAuswahl.Font.Size := 10;


   // Alles hab hier muss in der IDE ausgeblendet werden,
   // sonst knallt es!
  //------------------
  if not (CsDesigning in ComponentState) then
  begin
    fLBDruckerAusWahl.Items := Printer.Printers;
    fLBDruckerAusWahl.ItemIndex := Printer.PrinterIndex;
   <snip>
    application.ProcessMessages;
  end;
end;



Destructor TDruckerPanel.Destroy;
begin

  freeandnil(flblAuswahl);
  freeandnil(flblAnzeigen);
  freeandnil(fLBDruckerAusWahl);
  freeandnil(flblUeberschrift);
  FreeAndNil(fPanMid);
  FreeAndNil(fPanBottom);
  FreeAndNil(fPanTop);
  inherited;
end;

end.
und nun sagt mir bitte mal, warum die TListBox rumzickt.

Vielen Dank für Eure Mühen im Voraus


Beste Grüße aus dem Odenwald

mcinternet
Jörg
  Mit Zitat antworten Zitat