Delphi5.0与4.0的Afterscroll不同(200分)

  • 主题发起人 主题发起人 jiangb
  • 开始时间 开始时间
J

jiangb

Unregistered / Unconfirmed
GUEST, unregistred user!
本人在Delphi5.0中用一个Query对表进行查询,当查询不到记录时,
不会触发该Query的Afterscroll事件;但在Delphi4.0中却会触发Query
的Afterscroll事件;请各位高手解答其中的奥秘,答对给全分。
 
不想试了.提前
 
附加功能 将问题提前
 
Occurs after an application scrolls from one record to another.

property AfterScroll: TDataSetNotifyEvent;

Description

Write an AfterScroll event handler to take specific action immediately after
an application scrolls to another record as a result of a call to the First,
Last, MoveBy, Next, Prior, FindKey, FindFirst, FindNext, FindLast, FindPrior,
and Locate methods. AfterScroll is called after all other events triggered by
these methods and any other methods that switch from record to record in the
dataset.
贴D5的帮助。如果没有查询到,则不可能从一条记录到另一条记录,所以不触发。
谁现在还用D4,试下是否触发afterscroll,另请把 D4中关于afterscrool的定义贴出来
 
不需要解释,delphi5的实现方式改变了,也许是改进了吧:
delphi4在dataset.active:=true的时候就执行了afteropen和afterscroll
而delphi5则只执行了(相当于)afteropen,而在afteropen过程中判断记录集是否为空,
不为空才执行afterscroll。
 
好不容易把 Delphi4 的盘拣了出来,看看源代码就知道为什么会这样了:
下面是 Delphi 5 的源码:
procedure TDataSet.SetActive(Value: Boolean);
begin
if (csReading in ComponentState) then
begin
FStreamedActive := Value;
end
else
if Active <> Value then
begin
if Value then
begin
DoBeforeOpen;
try
OpenCursor;
finally
if State <> dsOpening then <font color = #ff0000><strong>OpenCursorComplete;</font></strong>
end;
end else
begin
if not (csDestroying in ComponentState) then DoBeforeClose;
SetState(dsInactive);
CloseCursor;
if not (csDestroying in ComponentState) then DoAfterClose;
end;
end;
end;

procedure TDataSet.OpenCursorComplete;
begin
try
if State = dsOpening then
DoInternalOpen;
finally
if FInternalOpenComplete then
begin
SetState(dsBrowse);
<font color = #ff0000><strong>DoAfterOpen;</font></strong>
end else
begin
SetState(dsInactive);
CloseCursor;
end;
end;
end;

procedure TDataSet.DoAfterOpen;
begin
if Assigned(FAfterOpen) then FAfterOpen(Self);
if not IsEmpty then DoAfterScroll;
end;

下面是 Delphi 4 的源码:
procedure TDataSet.SetActive(Value: Boolean);
begin
if (csReading in ComponentState) then
begin
FStreamedActive := Value;
end
else
if Active <> Value then
begin
if Value then
begin
DoBeforeOpen;
try
OpenCursor(False);
finally
if FOpenOK then SetState(dsBrowse) else
begin
SetState(dsInactive);
CloseCursor;
end;
end;
<font color = #ff0000><strong>DoAfterOpen;
DoAfterScroll;</font></strong>
end else
begin
if not (csDestroying in ComponentState) then DoBeforeClose;
SetState(dsInactive);
CloseCursor;
if not (csDestroying in ComponentState) then DoAfterClose;
end;
end;
end;


 
Baku老兄,我不知道你是怎么了,我在前面已经说得一清二楚了,
你又在后面...

拜托以后看清楚一点,我不希望老是收到这种没有用处的email。
 
我考虑问题喜欢看源码,这个问题以前我并没有遇到过,而且我相信有许多朋友也没有遇到过,
把关键的代码贴出来,可以把问题解释得更清楚,虽然这个贴子对你可能没有用处,但是相信会
有人愿意看一看的。
没有用处的的贴子在大富翁上还少吗?诸如:“>>”、“继续”、“我知道”、“Agree”... ,
至少我认为我的贴子多少还算有点用处。
 
既然如此,那么听听我的看法吧:

如果你知道我一贯加贴字的风格,就应该知道我做出上面那种内容和语气的回答必然有100%的把握,
--也就是我肯定看过源代码,实际上我从看见这个贴自那一天就看了源代码(我的机器上一直装有d4+d5),
但是觉得这个问题没什么挑战性,看一眼源代码就可以解决,因此没有回答,想等其他人回答就算了。
免得又要收到一些就象你说的什么“同意”,“来晚了”,虽然大部分人只是不太了解“关注”功能的使用。
(也这许算是没有"Olympic精神"吧,可我就是这个习惯,否则我现在恐怕有个5-6万分也不成问题。)
昨天浏览的时候又看到这个题,而且老千又发出了“召唤”,(尤其是他把help贴上来,显然思路不对了)
所以就给出了答案,算是帮个忙吧!

而我刚刚贴上这个贴子没有一段时间,你的答案就来了。由于我的答案说得很明确,自然让我认为你要么
是看了我的答案又来“捡漏”,要么就是根本没看我的贴子,而无论那种情况,就跟我反感的那种灌水者
一样,都是对我明显的不尊重。而我想要避免收到的那种e-mail,结果躲了半天还没躲开,不过至于“没用”
二字,只是对我个人而言,并不代表贴子本身的内容。

因此你可以知道当时我收到这封e-mail通知时候的感觉了吧。也许是我太敏感吧,其实这本来是小事情,
但是这种无聊的事情我碰到的太多了,再加上这几天心情很差,就一下子...对不住了。当然我还是了解你的,
不是那种无聊的灌水者,所以其实还是嘴下留了点情的,不过说句实话,您老兄最近灌水也确实勤了一点 :-)

我觉得论坛上最重要的就是相互尊重,你可以看看我提的几个问题,其实也不难,或者根本没答案,但是我对
回答者几乎是“有答必复”,就是为了表示对回答者的尊重,因为别人回答你的问题,表示愿意帮助你,你当
然应该有起码的尊重。反过来也是一样,那种提了问题就杳无音讯的人,我也决不再回答他的其他问题。

最后我借此机会建议给大富翁的所有网友,今后大家能认真理解别人的贴子的内容(无论是提问者还是前面的
回答者),然后再发表意见,有什么明确不同的意见或者确实技高一筹之处,再请不吝赐教,以此与大富翁所
有网友共勉...
 
呵呵,温柔一刀的贴子一出,BaKuBaKu 就能感觉到森然的刀气!
俺 10 月份回到的论坛,过了这个月可能就又要开始忙了,所以抓紧时间灌了不少水,:-)
从积分也看得出来,不过我没有灌过无聊的水,昨天的一个贴子问 TOpenDialog.Files 属性,
我发贴子的时候还没有人回答,等我再看发现有人先发了,还特意补了一个贴子作了解释的。
我和老刀兄虽然未曾谋面,但是文如其人,对老刀兄的性格为人已经非常了解,还是象上次
说的: Completist 。
关于此事,在此向温柔一刀表示感谢。
今后发贴子的时候我会更加慎重,争取向刀兄看齐,就说到这里了,以为如何?

BaKuBaKu 谨上
 
不客气,所谓渡尽劫波兄弟在,相逢一笑泯恩仇啊!
言语多有冒犯之处,还请Baku兄见谅。

我怎么总觉得这个名字有点... :-)
(自言自语地走开了...)
 
对不起,不得不再罗嗦几句,中午匆匆回了一个贴子,现在感觉很不妥

我想每个人都有自己的特点和性格,尊重差异才是最大的尊重,
因此我从来也没有想让别人变成我这样的风格或者习惯,我自己是完美主义者,
但绝没有要别人也这样,否则我说的“互相尊重”简直成了...

我上面那篇贴子完全是为了解释为什么我会发那.....么大火儿,
如果言语之中有什么地方使人感觉象是告诉别人应该怎么做,
那决非我的本意,希望Baku老兄不要介意为上。谢谢
(最后那句话只是一个建议,希望避免太多无聊贴字,决非针对你老兄或者具体某个人)
 
简直成了... 成了什么,干涉别国内政? :-)
其实刀兄不必如此顾虑,性格脾气是爹妈给的,该怎么样就怎么样,所谓率意而为是也!
我喜欢看金庸的书,尤其喜欢令狐冲,因为他性格鲜明,快意恩仇,现在遇到的人,有性
格的太少了。
别人怎么做,旁人自然无需去管,但是一个严于律己的人,却往往可以用自己的行动去
潜移默化身边的人,就好像当一个公众人物,自然要接受更广泛的监督,因为他们的行为
会被很多人所效仿。
虽然我和刀兄有过一些误会,但是你并不需要为你的言辞作过多的解释,我很理解你当
时的心情,而且有很多地方也的确是我需要学习的,能够在大富翁上认识刀兄这样的朋友,
是我的荣幸,当痛饮三杯,来来来。
送一幅小画,与刀兄共勉!

▕ . . . . . . . . . ● .. ▏
▕ . .∴ .◢◣. . . . . . ∴ . . ▏
▕ . . ◢田██◣. .. . . . . . . ▏
▕ . ⊕ ◢田▇▇田▇▅▅▏. . . ∴ . . ▏
▕___┃_█████田██__ __∵____∵______ __∵__▏
▕ 春风潜入夜 润物细无声 ▏

BaKuBaKu 11.29
 
多人接受答案了。
 
后退
顶部