Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Как правильно вызывать форму ui?

Добрый день. Как правильно вызывать форму ui?

Есть две формы MainWindow и widget form_ui2.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "form_ui2.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_pushButton_clicked()
{
    ui->form_ui2->show();
}
При таком подходе получаю ошибку:
error: 'class Ui::MainWindow' has no member named 'form_ui2'
Ответ: Если нужно менять формы, то обычно ненужные скрывают, нужные отображают.
Вопрос: 2 контроллера с одним именем. Как правильно вызывать ?

Привет.
Подскажите как правильно работать с контроллерами в одном проекте, у которых одинаковое имя.


Я так понял, что это можно решить через конфигурацию в роутах. Сделал так:

routes.MapRoute(null, "Prod/List", new { controller = "Prod", action = "List" }, new string[] { "MyProject.Namespace1.Controllers" });
routes.MapRoute(null, "MyProd/List", new { controller = "Prod", action = "List" }, new string[] { "MyProject.Namespace2.Controllers" });


List в MyProd - это частичное представление:

        [ChildActionOnly]
        public PartialViewResult List()
        {            
		    ....
            return PartialView("....", model);
        }			



А вот как правильно вызвать метод второго контроллера я не понял. Пробую так:
@Html.Action("List", "MyProd")


Но получаю рантайм ошибку "В таблице маршрутов нет маршрута, соответствующего предоставленным значениям."

Подскажите как правильно ? Переименовывать контроллер все-же не хочется - раз есть решение через роуты (а я так понял оно есть).
Ответ:
ProBiotek
Я решил, все же, просто переименовать

Правильно.
Вопрос: как правильно вызвать и обработать функцию oracle с параметром out

Есть функция oracle с несколькими параметрами, один из которых out - возвращает курсор с набором данных.
Как правильно вызвать и получить этот набор данных?

Пробовал вызывать так:
DataCommand command = manager.CreateCommand("select FUNC_GET(:p_1,:p_2) from dual"
, new DataParameter("p_1", "test")
, new DataParameter("p_2", null)
);
и так:
DataCommand command = manager.CreateCommand("FUNC_GET");
command.Parameters.Add("p_1", DataType.VarChar, "test", , ParameterDirection.Input);
command.Parameters.Add("p_2", DataType.Xml, null, ParameterDirection.Output);
command.ExecuteNonQuery();

читаю так:

MYDATA rec = null;
rec = (MYDATA)DataManager.GetObject(command.Parameters["p_2"].Value, typeof(MYDATA));

предварительно создав класс:

[Serializable]
public class MYDATA
{
public string FIELD1;
public string FIELD2;
public string FIELD3;
}

Пока безрезультатно.

Подскажите, как правильно вызывать и читать данные в таком случае?
Ответ:
buser
Orion70,




buser, большое спасибо, все получилось.
Вопрос: Синглтон вызывает синглтон

Привет.
Что-то запутался.
Есть Синглтон(надеюсь я его правильно сделал):
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Table extends JTable {
    private static Table table;
 
    public static Table getTable() throws SQLException {
        if(table==null){
            return table = new Table( СИНГЛТОН);
        }
        return table;
    }
 
    public Table(TableModel dm) {
        super(dm);
    }
}
Как правильно записать этот вызов
Java(TM) 2 Platform Standard Edition 5.0
1
return table = new Table( СИНГЛТОН);
И нормально ли когда если Синглтон вызывает Синглтон, который вызывает другой Синглтон и т.д ?
Ответ: Оставьте это внутри условного выражения table = new Table( СИНГЛТОН):, а возвращайте только table.

Сообщение от werrt
И нормально ли когда если Синглтон вызывает Синглтон, который вызывает другой Синглтон и т.д ?
Когда магазин купил пластиковое изделие у оптового поставщика, а тот купил их с завода, который их изготавливает, а этот завод купил пластмассу на хим заводе, который делает пластмассу, а этот завод купил сырьё для пластмассы у... - это же нормально? Вопрос в том, портит или нет данная цепочка архитектуру вашей программы.

И ещё я бы посоветовал писать методы ПОСЛЕ конструктора класса.
Вопрос: Помогите разобраться как правильно писать функции???

По заданию нужно найти список сотрудников с определенными полями, с этим проблем нет, но вот поле дата изменения должности вызывает проблему
select SLRDepartmentapi.GetHeadLIne(SLRDepartment.Id, 'FULL') as sDepartment, -- подразделение
substr(trim(Slrcard.sTabNum),length(SLRCard.sTabNum)-5,6) as sTabNum, --таб. номер
SLRKadr.Ssecondname||' '||SLRKadr.Sfirstname||' '||SLRKadr.Sthirdname as sKadr, --ФИО
lower(SLRDecode('lSex', SLRKadr.lSex, 0)), -- пол
SLRKadr.Dbirthdate as sBirthdte, --дата рождения
USRSLRRep_Utils.GetAge(SLRKADR.Dbirthdate,sysdate,2)as sAge, --возраст
slrrep_utils.GetStaffPos(slrcard.id, sysdate) sStaff, --должность
CardIn.dBegin as sDateEdit, --дата изменения должности

from SLRCard, SLRCardAccept, SLRCategory, SLRCardType, SLRStaffPos, SLRDepartment, SLRGraphic, SLRCardGraphic, SLRKadr,
(select MoveIn.idCard, MoveIn.idDepartment, MoveIn.idStaffPos, MoveIn.idCategory,MoveIn.dBegin,
SLRFnc.GetIdCardAcceptExt(MoveIn.idCard, MoveIn.dBegin) as idCardAccept,
SLRFnc.GetIdCardGraphicExt(MoveIn.idCard, sysdate) as idCardGraphic
from
(select SLRMove.idCard, SLRMove.idDepartment, SLRMove.idStaffPos, SLRMove.idCategory, SLRMove.dBegin
from SLRMovement SLRMove,
---дата изменения должности
(select idCard, Max(dBegin) as dBegin
from SLRMovement
where sysdate between SLRMovement.dBegin and nvl(SLRMovement.dEnd, sysdate)
and SLRMovement.idFactory = 1
group by idCard
) CurMove,
(select SLRMovement.idCard, Max(SLRMovement.dBegin) as dBegin
from SLRMovement
-->>USR
,SLRCardAccept ca
--<<USR
where SLRMovement.dBegin <= sysdate
and SLRMovement.idFactory = 1
-->>USR если не уволен то не показываем работающим там где его давно нет
and SLRMovement.Idcard=ca.Idcard and ca.Ddismissed=SLRMovement.Dend
--<<USR
group by SLRMovement.idCard
) PrevMove,
(select idCard, min(dBegin) as dBegin
from SLRMovement
where SLRMovement.dBegin > sysdate
and SLRMovement.idFactory = 1
group by idCard
) NextMove,
(select SLRDepartment.Id, SLRDepartment.sNm
from SLRDepartment
connect by prior SLRDepartment.Id = SLRDepartment.IdParent
start with SLRDepartment.Id = 2
) Deps
where SLRMove.idCard = CurMove.idCard(+)
and SLRMove.idCard = PrevMove.idCard(+)
and SLRMove.idCard = NextMove.idCard(+)
and SLRMove.dBegin = nvl(CurMove.dBegin, nvl(NextMove.dBegin, PrevMove.dBegin))
and SLRMove.idFactory = 1
and SLRMove.idDepartment = Deps.id
) MoveIn
) CardIn,
(select distinct SLRChangeFIO.IdKadr
from SLRChangeFIO
where upper(SLRChangeFIO.sSecondName) like '%%'
and upper(SLRChangeFIO.sFirstName) like '%%'
and nvl(upper(SLRChangeFIO.sThirdName), '~') like '%%'
) Fio
where CardIn.idCard = SLRCard.id
and CardIn.idDepartment = SLRDepartment.id
and CardIn.idCategory = SLRCategory.id
and CardIn.idStaffPos = SLRStaffPos.id
and CardIn.idCardAccept = SLRCardAccept.id
and SLRCardAccept.idCardType = SLRCardType.id
and CardIn.idCardGraphic = SLRCardGraphic.id
and SLRCardGraphic.idGraphic = SLRGraphic.id
and SLRCard.idKadr = SLRKadr.id
and SLRCard.sTabNum like '%%'
and (('ALL' = 'ALL') or (SLRKadr.lSex = 'ALL')) -- Пол
and ((1 = 0) or
-- по ФИО
and SLRCard.idKadr = FIO.idKadr

Сам код написан с датой изменения должности, но выводит он последнее перемещение по должности, а должен я так думаю именно ту дату на которую стоит назначенная должность
Вот код который выводит ту саму дату изменения должности
select f1.idm,f1.idprof,f2.dbegm from
(
select m.idcard idm,p.idprofession as idprof
from
(select slrmovement.idcard,slrmovement.iddepartment,
slrmovement.idstaffpos,slrmovement.dbegin,slrmovement.dend
from slrmovement,
(select idcard,
max(dbegin) as dmax from slrmovement
where (dbegin <='15.07.2015'
and (dend is null or dend >='15.07.2015'))
group by idcard) ffsp

where ffsp.idcard=slrmovement.idcard
and ffsp.idcard=16
and slrmovement.dbegin=ffsp.dmax ) m,slrstaffpos p

where
m.idcard=16 and
m.idstaffpos=p.id ) f1,

(
select m.idcard idm,m.dbegin dbegm,p.idprofession as idprof
from
(select slrmovement.idcard,slrmovement.iddepartment,
slrmovement.idstaffpos,slrmovement.dbegin,slrmovement.dend
from slrmovement,
(select m.idcard, f.id,
min(m.dbegin) as dmin from slrmovement m, slrstaffpos p, slrprofession f
where (m.dbegin <=SLRUtils.LastDate('15.07.2015')) and
m.idstaffpos=p.id and p.idprofession=f.id and m.idcard=16
group by m.idcard,f.id) ffsp

where ffsp.idcard=slrmovement.idcard
and ffsp.idcard=1695186
and slrmovement.dbegin=ffsp.dmin ) m,slrstaffpos p

where
m.idcard=16 and
m.idstaffpos=p.id) f2
where f1.idm=f2.idm and f1.idprof=f2.idprof
Помогите пожалуйста разобраться почему не работает этот код как функция

function GetDataStaffposCard(p_idCard SLRCard.id%type
,p_Date date
) return varchar2

is
/* vRezId Slrmovement.Id%rowtype
vRezProf Slrmovement.Idprofession%rowtype*/
vResult date;
begin
vResult:= SLRUtils.LastDate(p_Date);

Select /*f1.idm,f1.idprof,*/f2.dbegm
into vResult
from
(
select m.idcard idm,
p.idprofession as idprof
from
(select slrmovement.idcard,
slrmovement.iddepartment,
slrmovement.idstaffpos,
slrmovement.dbegin,
slrmovement.dend
from slrmovement,
(select idcard,
max(dbegin) as dmax
from slrmovement
where (dbegin <=p_Date
and (dend is null or dend >=p_Date))
group by idcard) ffsp

where ffsp.idcard=slrmovement.idcard
and ffsp.idcard=p_idCard
and slrmovement.dbegin=ffsp.dmax ) m,slrstaffpos p
where m.idcard=p_idCard
and m.idstaffpos=p.id ) f1,

(
select m.idcard idm,m.dbegin dbegm,p.idprofession as idprof
from
(select slrmovement.idcard,
slrmovement.iddepartment,
slrmovement.idstaffpos,
slrmovement.dbegin,
slrmovement.dend
from slrmovement,
(select m.idcard,
f.id,
min(m.dbegin) as dmin
from slrmovement m,
slrstaffpos p,
slrprofession f
where (m.dbegin <=SLRUtils.LastDate(p_Date))
and m.idstaffpos=p.id
and p.idprofession=f.id
and m.idcard=p_idCard
group by m.idcard,
f.id) ffsp

where ffsp.idcard=slrmovement.idcard
and ffsp.idcard=p_idCard
and slrmovement.dbegin=ffsp.dmin ) m,slrstaffpos p

where m.idcard=p_idCard
and m.idstaffpos=p.id) f2
where f1.idm=f2.idm
and f1.idprof=f2.idprof;
return vResult;
end;
Ответ:
Ayu
Помогите разобраться как правильно писать функции???

Во-первых, обратиться в правильный форум. В Вашем случае, судя по упоминанию sysdate, это Oracle.

Во-вторых, раз уж у Вас есть задание - внятно и чётко сформулировать это задание, а лучше приложить его в точности.

В-третьих, показать то, что Вы сделали или пытались сделать, не забыв оформить это тегом [ S R C ].

И наконец, объяснить, что у Вас вызывает проблему, какую и почему.
Вопрос: Добавление функции, чтобы ее можно было вызывать с функции загрузки формы

Здравствуйте! Подскажите как правильно добавить функцию, чтоб ее можно было вызывать с функции загрузки формы, функция без каких либо параметров!
Ответ:
Сообщение от BroDMax
TheSecret, ну и что не понятного? Или вопрос в том "как правильно добавить функцию"? Тогда поясните, что Вы имеете ввиду.
private void Function()
{
MessageBox.Show("Hello World!");
}
private void Form1_Load(object sender, EventArgs e)
{
Function();
}
спасибо
Вопрос: Как правильно создавать элементы меню в dxButton, cxbkOfficeDropDown?

Добрый день!

Вот что получилось у меня:

procedure TframePKExportParams.BPresetsDropDownMenuPopupEx(Sender: TObject;
  var APopupMenu: TComponent; var AHandled: Boolean);
var BB: TdxBarButton;
begin

  try
    (APopupMenu as TdxBarPopupMenu).ItemLinks.BeginUpdate;
    (APopupMenu as TdxBarPopupMenu).ItemLinks.Clear;

    with DM.RunQuery do
    begin
      Close;
      SelectSQL.Clear; SelectSQL.Add('select ID, NAME from TEXPRESETS where IDPKKIND='+IntToStr(Self.Tag)+' order by NAME');
      Open; First;
      while not EOf do
      begin
        BB := TdxBarButton((APopupMenu as TdxBarPopupMenu).ItemLinks.AddButton.Item);
        BB.ButtonStyle := bsDefault;
        BB.Caption := FieldByName('NAME').AsString;
        BB.Tag := FieldByName('ID').AsInteger;
        BB.OnClick := AClick;
        BB.Name := 'PRESET'+FieldByName('ID').AsString;
        Next;
      end;
      Close;
    end;

  finally
    (APopupMenu as TdxBarPopupMenu).ItemLinks.EndUpdate;
  end;
end;


Однако, меню появляется только один раз; когда его вызываешь второй раз, то вываливается ошибка Component named PRESET1 already exists. Если заремарить строчку с присвоением BB.Name, то меню работает, но мне 1) хотелось бы контролировать имя (не знаю зачем, поэтому "бы"); 2) кажется, что происходит утечка памяти.
Подскажите, как правильно создавать такие элементы?

Спасибо!
Ответ:
X-Cite
не вызывает Free для внутренних элементов

X-Cite, да, спасибо, получилось
Вопрос: Как правильно сделать получение почты в отдельном потоке?

Всем добрый вечер.
Пытаюсь получать определенные письма с почт посредством либлы mailkit.
Все хорошо получается. Но программа на 3-4 секунды подвисает.
Появилась идея воспользоваться потоками , но как правильно сделать представления нет.

C#
1
public static List<MimeMessage> getMails(string host, int port, bool ssl, string user, string pass, string text)
Вызываю это дело таким безобразным кодом.


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int srav = Convert.ToInt32(email.Count);
              for (int i = 0; i < srav; i++)
            {
                pisma = getMails("imap.mail.ru", 993, true, email[i], pass[i], "suspended");
                if (pisma.Count == 1)
                {
 
                  
                    listView1.Items.RemoveAt(i);
                  email.RemoveAt(i);
                   pass.RemoveAt(i);
                    
                   i--;
                   srav = srav- 1;
 
                }
                else
                {
 
 
 
                    listView1.Items[i].SubItems[2].Text = "Бана нет";
                    
                   
                    
                    
 
                }
            }
            MessageBox.Show("Проверено " + email.Count + "почт," + "\n Действующих" + listView1.Items.Count);
        }
Как можно ускорить работу?
Аккаунтов много.
Ответ:
Сообщение от TopLayer
И, в свою очередь, этот метод тоже через await вызывать.
Сложновато конечно.
Методом проб и ошибок надеюсь дойду.
Вопрос: Открытие формы. Как правильно?

Здравствуйте,

Подскажите, как правильно открывать дочернюю форму.

  with TMyForm.Create(AOwner) do
  try
    ParentWindow:=?
    ShowModal;
  finally
    free;
  end;

Ситуации:
а) форма может вызываться из другой (родительской) формы.
б) форма может вызываться еще до показа главной формы.
в) у юзера может быть 2 монитора (2 десктопа).

Нужно добиться, чтобы во всех случаях форма отображалась по центру, и "не пряталась" за другие формы.

Вопрос 1. Что указывать в качестве AOwner, родительскую форму (self: TComponent), nil или Application? Чем плохо или хорошо nil ?
Вопрос 2. Надо ли у вызванной формы до показа указывать свойство ParentWindow:=хэндл родительской формы ? А если нет родительской формы (еще не создана)?
Вопрос 2. В свойствах вызываемой формы что должно стоять в Position (poMainFormCenter, poOwnerFormCenter, poScreenCenter) ?

Пишите ваши мысли.
Ответ:
m52
Однако, вызываемая форма у одного моего пользователя открывалась где-то внизу экрана и залазила за пределы десктопа внизу
Вопрос: Как правильно получить PAnsiChar из cdecl-функции

Добрый день. Есть функция из dll:
Код Delphi
1
function LoCase(CStr: PAnsiChar): PAnsiChar; cdecl; external 'caseudf_from_source.dll';
Долго не мог понять, как её вызывать, чтоб не получить Access Violation. Потом на одном нашёл и сделал по образцу:
Код Delphi
1
2
3
4
5
6
7
8
9
10
function CallLoCase(AStr: AnsiString): AnsiString;
var
  p1, p2: PAnsiChar;
begin
  GetMem(p1, 255); // initialize
  GetMem(p2, 255);
  StrPLCopy(p2, AStr, 255); // prevent buffer overrun
  StrPLCopy(p1, LoCase(p2), 255); // make a copy since dll will free its internal buffer
  Result := p1;
end;
Но почему нельзя так?
Код Delphi
1
2
3
4
5
6
7
8
function CallLoCase(AStr: AnsiString): AnsiString;
var
  p2: PAnsiChar;
begin
  GetMem(p2, 255);
  StrPLCopy(p2, AStr, 255); // prevent buffer overrun
  Result := LoCase(p2);
end;
Какие-то проблемы могут возникнуть?
Может быть, можно ещё проще?
Почему нельзя использовать PAnsiChar()?
Ответ:
Сообщение от magicxor
Почему происходит конкретно так, а не иначе - понять не смог
Так на этом и надо сосредоточиться, а не упираться рогом про "какая разница" !)

Сообщение от magicxor
Если я буду вызывать функции из sqlite3.dll или libcurl.dll
Да нахрена оттуда-то вызывать, если эта либа специально заточена для использования в составе Interbase/Firebird-серверов ?)