769

Вопрос только для специалистов в области Delphi

Хотелось бы получить действенную помощь относительно того? почему следующий программный код не функционирует должным образом на разных платформах. Проблема заключается в следующем: этот код создат небольшое длг-окно и навешивает на него кнопку, АДОзапрос, и список (лист) отображающий поля из запроса.Судя по всему сбоит строка помечаная знаком {!!!} (хотя сбойнуть может и любая другая). Описание сбоя:1. НА 2000: длг-окно вообше не отображается, а выполнение идет дальше, то есть модальное окно не модалится2. НА 98: Видно как длг-окно мелькает - в принципе ситуация схожая, как будто вдруг кнопка "ок" взяла да и нажалась после отображения окна3. НА XP: Отображается пустое окно (без компонетов но зато с каптионом), после чего полный зависон проги (подозрение на подвисание сообшения о прорисовке).4. НА 2000 Сервер: А здесь самое интересное - работает нормальноvar DialogBox: TForm; qrADORest: TADOQuery; ListRest: TCheckListBox; i: integer; RestStr: string;begin //restrictions DialogBox := TForm.Create(Self); try DialogBox.SetBounds(0,0,180,190); DialogBox.BorderStyle := bsDialog; DialogBox.Position := poScreenCenter; DialogBox.Caption := ''Accepting Resources''; qrADORest := TADOQuery.Create(DialogBox); // prepare query qrADORest.Connection := MainForm.ADOConnection; qrADORest.SQL.Text := ''SELECT Resource AS Resource FROM Resources ORDER BY Resource''; qrADORest.Open; if not qrADORest.IsEmpty then begin ListRest := TCheckListBox.Create(DialogBox); // prepare restriction list with ListRest do begin Parent := DialogBox; Align := alTop; Realign; Height := DialogBox.ClientHeight - 24; end; with TBitBtn.Create(DialogBox) do begin // prepare ok button Parent := DialogBox; Kind := bkOk; Left := 0; Top := ListRest.Height; Width := DialogBox.ClientWidth; Height := 24; end; ListRest.Items.Clear; // put items to list fro query while not qrADORest.Eof do begin ListRest.Items.Add(qrADORest.FieldByName(''Resource'').AsString); qrADORest.Next; end; qrADORest.Close; qrADORest.Free; for i:=0 to ListRest.Items.Count-1 do ListRest.Checked[i] := true;{!!!} if DialogBox.ShowModal mrOk then begin DialogBox.Release; Exit; end; RestStr := EmptyStr; for i:=0 to ListRest.Items.Count-1 do if ListRest.Checked[i] then begin if RestStr=EmptyStr then RestStr := ''(Source=''''''+ListRest.Items[i]+'''''')'' else RestStr := RestStr+'' or (Source=''''''+ListRest.Items[i]+'''''')''; end; if RestStrEmptyStr then RestStr := ''and (''+RestStr+'')''; ListRest.Free; end; finally DialogBox.Release; end;Заранее огромное спасибо за оказанную помощь.
0