Einzelnen Beitrag anzeigen

ruedigeruwe

Registriert seit: 19. Okt 2006
7 Beiträge
 
Delphi 6 Enterprise
 
#1

OnDrawItem in Frames mit dynamischen ComboBoxen

  Alt 16. Mär 2011, 13:58
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.
Uwe R.
  Mit Zitat antworten Zitat