Форум: "Начинающим";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
ВнизНесинхронность OnSetText Найти похожие ветки
← →
DelphiLexx © (2007-08-03 18:01) [0]У меня есть два DBGridEh"a (DBGridEh1, DBGridEh2) во 2-ом гриде есть колонка, в котором выставляются checkbox"ы, при выставлении checkbox"a происходит добавление записи, при снятии удалении записи из 1-ого грида, при выставление checkbox"a во 2-ом гриде срабатывает OnSetText. Так вот если очень быстро кликать по checkbox"ам, то может получиться, что мы сняли checkbox, а запись из первого грида не удалилась. Как заблокировать на время работы OnSetText DBGridEh2.MouseUp, чтобы не было повторных вхождений. В OnSetText"e разместил код:
PROC_ST := Sender.OnSetText;
Sender.OnSetText := nil;
DBGridEh2.DataSource.DataSet.DisableControls;
try
///здесь делаем добавление записи в DBGridEh1
finally
DBGridEh2.DataSource.OnDataChange := PROC_DC;
DBGridEh2.DataSource.DataSet.EnableControls;
Sender.OnSetText := PROC_ST;
end;
← →
Вася Правильный (2007-08-03 20:22) [1]не путай процедурный и событийный подход
и вообще какая-то извращенная логика - закольцованность датасетов
← →
DelphiLexx © (2007-08-03 20:33) [2]
> не путай процедурный и событийный подход
> и вообще какая-то извращенная логика - закольцованность
> датасетов
Ну и какие варианты предлагаешь?
← →
Виталий Панасенко(дом) (2007-08-03 21:37) [3]Стреляться!...Датасетам...
← →
Lacmus © (2007-08-04 09:29) [4]>DelphiLexx © (03.08.07 18:01)
Как идея
{$J+}
procedure TForm7.CheckBox1Click(Sender: TObject);
const
bLock: Boolean = False;
begin
if not bLock then begin
bLock := True;
try
Label1.Caption := Label1.Caption + "1";
Sleep(3000);
Application.ProcessMessages
finally
bLock := False
end
end
end;
← →
DelphiLexx © (2007-08-04 12:05) [5]Где я возьму CheckBox1Click, у меня DBGrid"Eha. Надо как-то синхронизировать эти два DBGridEh"a с их DataSet"ами.
← →
DelphiLexx © (2007-08-06 09:48) [6]Удалено модератором
Примечание: Обсуждение модерирования
← →
DelphiLexx © (2007-08-06 09:50) [7]
> Как идея
Не помагает делал даже так:
...
OldRecCount := MainDS.RecordCount;
if Text = "1" then
NewRecCount := OldRecCount + 1
else
NewRecCount := OldRecCount - 1;
PerformSelection(Text <> "1");
while (MainDS.RecordCount <> NewRecCount) do sleep(100);
Sender.AsString := Text;
...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.053 c