Einzelnen Beitrag anzeigen

NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Kein Event bei dynamisch erstellter Combobox in Stringgrid

  Alt 24. Apr 2012, 01:43
Naja ich weis, das dieser Post etwa 2 Jahre alt ist, da ich gerade aber selber soetwas brauche, habe ich mal rumprobiert und eine Lösung gefunden. Falls es noch jemand interessiert:
Das Problem ist, das StringGrid einen eigene Msg-Schleife besitzt, und wenn man dan den ComboBox Parent setzt, sendet Windows die Events (OnCloseUp,OnChange sind Windows-Events) nicht an das Form sondern an das StringGrid, und dieses weis nichts damit anzufangen...
So kann man dies übergehen und dem StringGrid sozusagen, die Events "zuweisen":

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  //...
  public
    procedure NewStringGridProc(var Message: TMessage);
  end;
var OldStringGridProc : TWndMethod; //Alte WndProc speichern

procedure TForm1.NewStringGridProc(var Message: TMessage);
begin
  case Message.WParamHi of
    CBN_CLOSEUP: then //OnCloseUP
    begin
      if Message.LParam = ComboBox.Handle then //Falls ihr mehrer drin habt, müsst ihr so auf ein bestimmtes prüfen.
      begin
        //Euer Code, ganz normal hier eingeben, als würdet ihr dies bei OnCloseUp eingeben.
        StringGrid1.SetFocus; //Falls ihr in den Optionen die Tabs aktiviert habt, so könnt ihr dadurch zur nächsten Zeile normal springen
      end;
    end;
    CBN_SELCHANGE: //OnChange
//Bei mir sind Fehler beim ObDrawCell in verbindung mit SelChange aufgetretten. Vielleicht ist dies nur bei mir, jedenfalls verwende ich CloseUp, um die Auswahl zuübernehmen
    begin

    end;
  else OldStringGridProc(Message);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldStringGridProc := StringGrid1.WindowProc;
  StringGrid1.WindowProc := NewStringGridProc;
end;
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat