Hallo zusammen,
die Überschrift ist vielleicht etwas verwirrend, aber mit viel keine bessere ein.
Ich habe da nämlcih ein kleines Problem. Ich möchte aus einem Grid heraus, einen Kalender als Datumsauswahl öffnen. Dieser Kalender soll unterhalb der geclickten Zelle stehen und, falls nötig, über den Rand des Fensters hinausgehen.
Es soll aber, abgesehen von der Datumsauswahl, auch die Möglichkeit geben erneut auf das Grid oder ein anderes Control zu clicken, so daß der Kalender beim Verlust des Fokusses automatisch verschwindet ohne den Eintrag im Grid zu ändern.
Dazu habe ich ein extra Fenster mit einem Kalender erstellt (ohne Rand und in der Größe des Kalenders) das folgende Prozeduren enthält :
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| procedure TfrmPopKal.FormDeactivate(Sender: TObject); begin Self.Close; end;
procedure TfrmPopKal.FormResize(Sender: TObject); begin Width := Kalender.Width; Height := Kalender.Height; end;
procedure TfrmPopKal.FormShow(Sender: TObject); begin Width := Kalender.Width; Height := Kalender.Height; end;
function TfrmPopKal.getDatum(def: TDate):TDate; begin pDatum := def;
Kalender.Visible := True; Self.Show;
Result := pDatum; end;
procedure TfrmPopKal.KalenderDateClick(Sender: TObject; Datum: TDate); begin pDatum := Datum; Self.Close; end;
procedure TfrmPopKal.KalenderExit(Sender: TObject); begin Kalender.Visible := False; Self.Close; end; |
Dieses Fenster soll also an einer bestimmten Position geöffnet werden. Das habe ich durch einen Aufruf der Funktion getDatum versucht.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TfrmMain.grdMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Row, Col: Integer; datum: TDate; begin grd.MouseToCell(x,y,Col,Row); if (Col = 2) AND (Button = mbRight) then begin with frmPopKal do begin
Top := x; Left := y;
datum := Date;
datum := getDatum(datum);
grd.Cells[Col,Row] := DateToStr(datum); end; end; end; |
Das Fenster wird zwar geöffnet, aber es wird (selbstverständlich) direkt ein Wert ausgegeben, da ja die Funktion nach dem
Self.Show direkt weiterläuft. Das möchte ich aber verhindern.
Ich könnte natürlich statt
Self.Show auch
Self.ShowModal benutzen, dann kann ich aber nicht mehr auf das aufrufende Fenster clicken, was ich aber ermöglichen will.
Irgendwie komme ich da nicht weiter. Vielleicht hat von Euch einer eine Idee, wie ich das Problem lösen kann.
Danke im Voraus
Gruß uss Kölle
mtm