Einzelnen Beitrag anzeigen

Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#14

Re: Comboboxen in einem StringGrid

  Alt 19. Mär 2005, 14:28
du musst das ganze im ondrawcell-ereignis steuern, da sonst die zelle nicht mit der box überzeichnet wird!!!

so sollte es funktionieren!!!

und eine bitte: keine doc datei!!!! den code hättest du auch hier posten können!


Delphi-Quellcode:
unit USpielbearbeitung;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Menus, Grids, USpieleigenschaften, IniFiles;

type
   TSpielBearbeitung = class
     //Objekte
     BearbeitungsForm : TForm;
     Grid : TStringgrid;
     Box : TComboBox;
       (...)
     //Variablen
     zPfad : String;
     aktCellX : Integer;
     aktCellY : Integer;
       //(...)
      procedure SetRect(rec:Trect); // <-------------------------------------- hier rein
   private
      {private-Deklarationen}
      procedure AktuelleZelleSpeichern(Sender: TObject; ACol,ARow: Integer; var CanSelect: Boolean);
        //(...)
   public
      {public-Deklarationen}
        //(...)
   end;



implementation

uses UMain;

//----------------------------------------------------------------------------//
//constructor
// - Form erzeugen, konfigurieren, anzeigem
// - Menu erzeugen, konfigurieren
// - Grid erzeugen, konfigurieren
//----------------------------------------------------------------------------//
constructor TSpielBearbeitung.create(pPfad : String; Eigenschaften : Boolean);
begin
//Form -erzeugen, -konfigurieren, -anzeigen
  BearbeitungsForm := TForm.create(nil);
  with BearbeitungsForm do
     begin
       BorderIcons := BorderIcons - [biMaximize] - [biSystemMenu] - [biMaximize];
       width := 500;
       height := 300;
       position := poScreencenter;
     end;

//(...)

//Grid erzeugen, konfigurieren
  Grid := TStringgrid.Create(nil);
  with Grid do
     begin
       parent := Bearbeitungsform;
       fixedcols := 0;
       fixedrows := 2;
       Options := Options + [goAlwaysShowEditor] + [goEditing];
       OnSelectCell := AktuelleZelleSpeichern;
     end;

//ComboBox erzeugen
  Box := TComboBox.Create(nil);

//Form anzeigen
  BearbeitungsForm.Show;
end;


//----------------------------------------------------------------------------//
//schliessen
// - Spielbearbeitung schließen
//----------------------------------------------------------------------------//
procedure TSpielBearbeitung.schliessen(Sender:TObject);
begin
  Bearbeitungsform.Close;
end;




//----------------------------------------------------------------------------//
//destructor
// - Objekte zerstören
//----------------------------------------------------------------------------//
destructor TSpielBearbeitung.free();
begin
//ComboBox freigeben
Box.Free;
//Gridfreigeben
Grid.Free;
//Form freigeben
BearbeitungsForm.Free;
end;



//----------------------------------------------------------------------------//
//Aktuelle Zelle Speichern
// - Die aktuell gewählte Zelle wird gespeichert
// - Wenn es die letzte ist, wird die ComboBox angezeigt
//----------------------------------------------------------------------------//
{procedure TSpielbearbeitung.AktuelleZelleSpeichern(Sender: TObject; ACol,
          ARow: Integer; var CanSelect: Boolean);}


procedure TfoDBEdit.StringGridOnDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState); // <--- anderes ereignis!!!!

begin
  self.aktCellX := Acol;
  self.aktCellY := Arow;
  if ACol = Grid.ColCount then
  begin
    self.SetRect(Grid.CellRect(ACol,ARow));
    Box.visible:=true; // sichtbar
  end
  else
    box.visible:=false; // unsichtbar
end;



//----------------------------------------------------------------------------//
//Der ComboBox die aktuelle Zelle zuweisen
//----------------------------------------------------------------------------//
procedure TSpielBearbeitung.SetRect(rec:TRect);
var r : TRect;
begin
  CopyRect(r,rec);
  r.BottomRight := Box.Parent.ClientToScreen(Grid.ClienttoScreen(r.BottomRight));
  r.TopLeft := Box.Parent.ClienttoScreen(Grid.ClienttoScreen(r.TopLeft));
  Box.SetBounds(r.left,r.top,r.right-r.left,r.bottom-r.top);
  Box.BringToFront;
end;
end
  Mit Zitat antworten Zitat