Delphi-PRAXiS

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/)
-   -   OnDrawItem in Frames mit dynamischen ComboBoxen (https://www.delphipraxis.net/159156-ondrawitem-frames-mit-dynamischen-comboboxen.html)

ruedigeruwe 16. Mär 2011 13:58

OnDrawItem in Frames mit dynamischen ComboBoxen
 
Hallo,

ich verweifel gerade an folgender Konstellation:

Ich habe eine Form (frmHaupt), in welcher ein TFrame (fmeFragen) in fmeFragen1 eingebettet ist. Im Frame werden dynamisch Comboboxen erzeugt, welche mit einer OnDrawItem - Eigenschaft angesprochen werden. Die Comboboxen werden erstellt und angezeigt, aber das ONDRAWITEM wird einfach ignoriert und übergangen.

Code:
unit untHaupt;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, untfmeFragen, ComCtrls;

type
  TfrmHaupt = class(TForm)
    Button1: TButton;
    fmeFragen1: TfmeFragen;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmHaupt: TfrmHaupt;

implementation

{$R *.dfm}

procedure TfrmHaupt.Button1Click(Sender: TObject);
begin
  fmeFragen1.LadeFme(fmeFragen1);
end;

end.
und hier der Code für das Frame

Code:
unit untfmeFragen;

interface

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



type
  TfmeFragen = class(TFrame)

  procedure LadeFme(Sender:TObject);

  procedure ComboBoxDrawItem1(Control: TWinControl;
    Index: Integer; Rect: TRect; State: TOwnerDrawState);
  procedure ComboBoxDrawItem(Control: TWinControl;
    Index: Integer; Rect: TRect; State: TOwnerDrawState);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }

  end;



implementation


{$R *.dfm}

var
  RunTimeCombo : array of TComboBox;


procedure TfmeFragen.LadeFme(Sender:TObject);
var x:integer;

begin

  SetLength(RunTimeCombo,1);

  for x:=0 to length(Runtimecombo)-1 do
  begin
    RunTimeCombo[x]:=TComboBox.Create(Sender as TFrame);

    With RunTimeCombo[x] do
    begin
      Parent := (Sender as TFrame);
      Left := 10;
      Top :=10;
      Width:=100;
      Style := csOwnerDrawFixed;
      ondrawitem := ComboBoxDrawItem;
      DroppedDown := true;
    end;

  end;
end;

procedure TfmeFragen.ComboBoxDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  //hier den Verweis auf das Draw bringen
  ComboBoxDrawItem1(Control,Index,Rect,State);
end;

procedure TfmeFragen.ComboBoxDrawItem1(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  //
  with (Control as TCombobox) do
  begin
    (Control as TCombobox).Canvas.Brush.Color:=clRed;
    (Control as TCombobox).Canvas.FillRect(Rect);
  end;
end;


end.
wäre super wenn mir mal einer auf die Sprünge helfen könnte.

alfold 16. Mär 2011 14:10

AW: OnDrawItem in Frames mit dynamischen ComboBoxen
 
Was spricht dagegen das event direkt anzusprechen?

Delphi-Quellcode:
ondrawitem := ComboBoxDrawItem1;
.....
.....

with (Control as TCombobox) do//??? kannst Du glaube ich weglassen!
alfold

ruedigeruwe 16. Mär 2011 14:18

AW: OnDrawItem in Frames mit dynamischen ComboBoxen
 
Das funktioniert leider auch nicht, da auch dieses ignoriert wird.

ruedigeruwe 16. Mär 2011 14:31

AW: OnDrawItem in Frames mit dynamischen ComboBoxen
 
da stand ich wohl gerade voll auf dem Schlauch:

Da in der Combobox keine Items vorhanden sind, löst diese daher auch nicht das OnDrawItem-Ereignis aus.

Code:
With RunTimeCombo[x] do
    begin
      Parent := (Sender as TFrame);
      Left := 10;
      Top :=10;
      Width:=100;
      Style := csOwnerDrawFixed;
      items.Add('1');
      items.Add('2');
      ondrawitem := ComboBoxDrawItem1;
      DroppedDown := true;
    end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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