在Grid的CELL中按一下出現另一個Grid的問題? |
答題得分者是:Mickey
|
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
請問: 以前在用PowerBuilder時,有一個功能,就是在Cell點下去時,
會出現另一個Grid的元件。 目前我也想用Delphi做出類似的功能,
我的想法是用直接動態產生一個Grid
(或一個Form上放一個Grid)
在將該Grid連到一個TQuery中,
傳使用者點選該Cell時,讓那個Grid的Query跑SQL並顯示出來。
可是比較麻煩的要計算目前該Grid要放在什麼位置,
當使用者點的Cell在上面時,則放在該Cell下,
但如果Cell太下面時,則要放在上面,要做這個判斷滿麻煩的 請問是否有人做過類似的內容,或有更好的方法或元件本身有提供,
是否可以說明一下,謝謝~~~ ----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
------
---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ---------------- |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
Sample Code as following :
where "TMyCalendar" is a component 繼承自 "TCustomGrid"
//procedure TMyDBgrid.CellClick(Column: TColumn); procedure TMyDBgrid.ColEnter; var rec:TRect;abstop,absleft:integer;tempdt:TDateTime; begin inherited ColEnter; rec:=CellRect(Col,Row); if ((not(csDesigning in ComponentState)) and (assigned(self.Datasource)) and (assigned(self.Datasource.Dataset)) and (Self.Datasource.Dataset.active) and (SelectedField.DataType in [ftDate,ftDateTime])) then begin TState:=Self.Datasource.Dataset.State; abstop:=GetAbsTop(TControl(Self)); absleft:=GetAbsLeft(TControl(Self)); if not assigned(FSelDates) then begin FSelDates:=TMyCalendar.Create(Owner); FSelDates.GridLineWidth:=0; FSelDates.ShortDateName:=True; FSelDates.Font.Size:=9; FSelDates.Height:=100;FSelDates.Width:=172; if (abstop Rec.Bottom GridLineWidth 101) < TForm(FSelDates.Owner).Height then FSelDates.top:=abstop rec.Bottom GridLineWidth 1 else FSelDates.top:=abstop rec.top-GridLineWidth-101; if (absLeft rec.Right 1-FSelDates.Width)>0 then FSelDates.Left:=absLeft rec.Right 1-FSelDates.Width else FSelDates.Left:=absleft; // TForm(Owner).InsertControl(FSelDates); FSelDates.Parent:=TForm(Owner); FSelDates.SetFocus; FSelDates.OnAfterClick:=CalendarDateChange; FSelDates.OnExit:=PickerOnExit; if SelectedField.AsString<>'' then try tempdt:=strtodatetime(SelectedField.AsString); Fseldates.CalendarDate:=trunc(tempdt); except Fseldates.CalendarDate:=Date; end; end else begin if (abstop Rec.Bottom GridLineWidth 101) < TForm(FSelDates.Owner).Height then FSelDates.top:=abstop rec.Bottom GridLineWidth 1 else FSelDates.top:=abstop rec.top-GridLineWidth-101; if (absLeft rec.Right 1-FSelDates.Width)>0 then FSelDates.Left:=absLeft rec.Right 1-FSelDates.Width else FSelDates.Left:=absLeft; if SelectedField.AsString<>'' then try tempdt:=strtodatetime(SelectedField.AsString); Fseldates.CalendarDate:=trunc(tempdt); except Fseldates.CalendarDate:=Date; end; FselDates.show; FSelDates.SetFocus; self.DataSource.edit; end; end else if ((assigned(FSeldates))and (FSeldates.Showing)) then begin Self.SetFocus; FSeldates.Hide; end; end;/* 使用中文很辛苦,中華男兒當自強 */ |
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |