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;