fil Posted October 23, 2020 Share Posted October 23, 2020 Hi, Unigui installation includes ShowProgress demo But this demo does not work for me in the following code. When using the UniSession.Synchronize function. function TMainForm.CreateFields():boolean; var i,perRecords:integer; perIBQuery,perIBQuery2:TIBQuery; begin //получаем список всех описаний спейсов UniMainModule.IBDatabase.Connected:=true; perIBQuery:=UniMainModule.MyInitializationTIBQerySelect(perIBQuery); perIBQuery.Active:=false; perIBQuery.SQL.Clear; perIBQuery.SQL.Add('select DESCRIPTION from SPACES group by DESCRIPTION' ); perIBQuery.Active:=true; perIBQuery2:=UniMainModule.MyInitializationTIBQerySelect(perIBQuery); perIBQuery.Last; //очищаем массив и выставляемя размер массива согласно размеру sql запросу SetLength(ParamString,0); SetLength(ParamString,perIBQuery.RecordCount); perIBQuery.first; ShowProgress('Please Wait...'); //запускаем прогрессбар UniSession.Synchronize; perRecords:=perIBQuery.RecordCount-1 ; for i:=0 to perRecords do begin UpdateProgress(i/perRecords, Format('%%%d Completed', [round(100/perRecords*i)])); UniSession.Synchronize; //создаем панельку в которой будем размещать кнопки и ParamString[i].Panel:=TUniPanel.Create(MainForm); ParamString[i].Panel.Parent:= MainForm; ParamString[i].Panel.Left:=10; ParamString[i].Panel.Top:=i*30+30; ParamString[i].Panel.Width:=650; ParamString[i].Panel.Height:=25; ParamString[i].Panel.Name:='panel'+inttostr(i); ParamString[i].Panel.Visible:=false; //скрываем чтобы быстрее грузилось //создаем название спейса ParamString[i].LabelNameSpace:=TUniLabel.Create(ParamString[i].Panel); ParamString[i].LabelNameSpace.Parent:= ParamString[i].Panel; ParamString[i].LabelNameSpace.Left:=5; ParamString[i].LabelNameSpace.Top:=5; ParamString[i].LabelNameSpace.Width:=75; ParamString[i].LabelNameSpace.Height:=25; ParamString[i].LabelNameSpace.Caption:=TRIM(perIBQuery.fieldbyname('DESCRIPTION').asstring); ParamString[i].LabelNameSpace.Name:='Label'+inttostr(i); //выбираем все группы для спейса perIBQuery2.Active:=false; perIBQuery2.SQL.Clear; perIBQuery2.SQL.Add( 'select '+ ' spaces.id, '+ ' spaces.description, '+ ' spaces.name_, '+ ' laws.id_users, '+ ' laws1.id_users admins '+ 'from laws ' + ' right outer join spaces on (laws.id_spaces = spaces.id and laws.id_users = '+inttostr(gperIDuser)+') '+ ' left outer join laws laws1 on (spaces.id = laws1.id_spaces and laws1.id_users = '+inttostr(gperIDcurentuser)+') '+ 'where '+ ' ( '+ ' (description =' +''''+TRIM(perIBQuery.fieldbyname('DESCRIPTION').asstring)+''''+') '+ ' ) ' ); perIBQuery2.Active:=true; perIBQuery2.first; //тут рисуем кнопку none ParamString[i].RadioButton4:=TUniRadioButton.Create(ParamString[i].Panel); ParamString[i].RadioButton4.Parent:= ParamString[i].Panel; ParamString[i].RadioButton4.Left:=600; ParamString[i].RadioButton4.Top:=2; ParamString[i].RadioButton4.Width:=75; ParamString[i].RadioButton4.Height:=25; ParamString[i].RadioButton4.Caption:='None'; ParamString[i].RadioButton4.Name:='RadioButton4_'+inttostr(i); ParamString[i].RadioButton4.Checked:=true; ParamString[i].CheckedID:=-1; while not perIBQuery2.Eof do begin if pos('Admin',perIBQuery2.fieldbyname('NAME_').asstring)>0 then begin ParamString[i].RadioButton1:=TUniRadioButton.Create(ParamString[i].Panel); ParamString[i].RadioButton1.Parent:= ParamString[i].Panel; ParamString[i].RadioButton1.Left:=390; ParamString[i].RadioButton1.Top:=2; ParamString[i].RadioButton1.Width:=60; ParamString[i].RadioButton1.Height:=25; ParamString[i].RadioButton1.Caption:='Admin'; ParamString[i].ID1:=perIBQuery2.fieldbyname('ID').AsInteger; //ЗАПИСЫВАЕМ ID СПЕЙСА КОТОРЕ ПОД ЭТОЙ КНОПКОЙ ParamString[i].RadioButton1.Name:=TRIM(perIBQuery2.fieldbyname('NAME_').asstring); if perIBQuery2.fieldbyname('id_users').AsInteger>0 then begin ParamString[i].RadioButton1.Checked:=true; //выставляем крыжик на правах админа если он админ ParamString[i].CheckedID:=1; //выставляем что админ был end; if (gperIDuser<>gperIDcurentuser)and(gperIDcurentuser<>0) then //если залогиненый пользователь не совпадает с выбранным пользователем и не равен глобальному админу то begin if perIBQuery2.fieldbyname('admins').AsInteger>0 then ParamString[i].Panel.Enabled:=true else ParamString[i].Panel.Enabled:=false; //если это админ спейса делаем возможность выбора, если нет то нет end; end else if (pos('Read',perIBQuery2.fieldbyname('NAME_').asstring)>0)and(pos('ReadWrite',perIBQuery2.fieldbyname('NAME_').asstring)=0) then begin ParamString[i].RadioButton2:=TUniRadioButton.Create(ParamString[i].Panel); ParamString[i].RadioButton2.Parent:= ParamString[i].Panel; ParamString[i].RadioButton2.Left:=450; ParamString[i].RadioButton2.Top:=2; ParamString[i].RadioButton2.Width:=75; ParamString[i].RadioButton2.Height:=25; ParamString[i].RadioButton2.Caption:='Read'; ParamString[i].ID2:=perIBQuery2.fieldbyname('ID').AsInteger; //ЗАПИСЫВАЕМ ID СПЕЙСА КОТОРЕ ПОД ЭТОЙ КНОПКОЙ ParamString[i].RadioButton2.Name:=trim(perIBQuery2.fieldbyname('NAME_').asstring); if perIBQuery2.fieldbyname('id_users').AsInteger>0 then begin ParamString[i].RadioButton2.Checked:=true; ParamString[i].CheckedID:=2; //выставляем что чтение end; end else if pos('ReadWrite',perIBQuery2.fieldbyname('NAME_').asstring)>0 then begin ParamString[i].RadioButton3:=TUniRadioButton.Create(ParamString[i].Panel); ParamString[i].RadioButton3.Parent:= ParamString[i].Panel; ParamString[i].RadioButton3.Left:=510; ParamString[i].RadioButton3.Top:=2; ParamString[i].RadioButton3.Width:=75; ParamString[i].RadioButton3.Height:=25; ParamString[i].RadioButton3.Caption:='ReadWrite'; ParamString[i].ID3:=perIBQuery2.fieldbyname('ID').AsInteger; //ЗАПИСЫВАЕМ ID СПЕЙСА КОТОРЕ ПОД ЭТОЙ КНОПКОЙ ParamString[i].RadioButton3.Name:=trim(perIBQuery2.fieldbyname('NAME_').asstring); if perIBQuery2.fieldbyname('id_users').AsInteger>0 then begin ParamString[i].RadioButton3.Checked:=true; ParamString[i].CheckedID:=3; //выставляем что чтение и запись end; end; perIBQuery2.Next; end; perIBQuery.next; end; HideProgress; //скрываем прогрессбар //ShowToast('Process Finished'); for i:=0 to Length(ParamString)-1 do begin ParamString[i].Panel.Visible:=true; end; perIBQuery.Free; perIBQuery2.Free; end; I get the error --------------------------- Debugger Exception Notification --------------------------- Project Project1.exe raised exception class Exception with message 'Fatal Error: Control can not be created with a nil Owner.'. --------------------------- Break Continue Help --------------------------- Without UniSession.Synchronize; I get no errors. what is the problem? More precisely, how to make a progress bar in real time when the list is loaded. Quote Link to comment Share on other sites More sharing options...
fil Posted October 23, 2020 Author Share Posted October 23, 2020 clarification, I get an error when I try to start more than one session. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.