Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
 Re: от Delphi к CPP  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8256
Dimitry Sibiryakov,
Глобальные методы и переменные не пишу (почти)
15 апр 21, 18:00    [22309475]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8256
Dimitry Sibiryakov,
Логгер P7 отлично останавливается на строке из под студии.
Всяко легче чем лечить по фото с AV.
15 апр 21, 18:14    [22309483]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 507
Добрый день. Еще нужна помощь в разработке

немного переписываю конструктор формы

на делфи было так

constructor TfGraph.Create(AOwner : TComponent; Act : boolean);
begin
 inherited Create(AOwner);
 Action := Act;
end;


ну и соответсвенно при вызове

 try
   fGraph := TfGraph.Create(Self, false);
   try
     fGraph.Show;
   except
     raise;
   end;
 except
   raise;
 end;


а как в Си это смастерить? Спасибо
20 апр 21, 19:33    [22311632]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8256
patrick1968,
Ты начинай писать. Что ты ждешь прямо копи паст банальный.
20 апр 21, 19:41    [22311635]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Пётр Седов
Member

Откуда: Санкт-Петербург
Сообщений: 706
patrick1968
constructor TfGraph.Create(AOwner : TComponent; Act : boolean);
begin
 inherited Create(AOwner);
 Action := Act;
end;
Примерно так:
class TfGraph : public TForm {
public:
  // объявление конструктора
  TfGraph(TComponent* AOwner, bool Act);
  ...
};
// реализация конструктора
TfGraph::TfGraph(TComponent* AOwner, bool Act) :
  TForm(AOwner) // вызов конструктора базового класса
{
  Action = Act;
}

patrick1968
 try
   fGraph := TfGraph.Create(Self, false);
   try
     fGraph.Show;
   except
     raise;
   end;
 except
   raise;
 end;
Странный код. Исключение ловится, и сразу же возбуждается повторно. На C++ будет так:
try {
  fGraph = new TfGraph(this, false);
  try {
    fGraph->Show();
  } catch (...) { // ловим любое исключение
    throw; // возбуждаем повторно пойманное исключение
  }
} catch (...) {
  throw;
}
21 апр 21, 02:03    [22311714]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2114
Пётр Седов
Примерно так:

Прекрасный код, как и изначальный...

Сообщение было отредактировано: 21 апр 21, 10:40
21 апр 21, 10:47    [22311805]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 507
Добрый день. Громадный респект за помощь. Не мог найти решение по синтаксису еще одного вопроса. Нужно поместить картинку из файла в объект Picture в Fastreport, на делфи было так

TfrxPictureView(frxReport1.FindObject('Picture4').Picture.LoadFromFile("maingr.bmp");


но в С++
frxReport1->FindObject('Picture4') нет Picture и LoadFromFile тоже
хотя можно через поток, но это слишком нагромождено, может есть более простое и правильное решение? Спасибо.
24 апр 21, 14:58    [22313590]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Пётр Седов
Member

Откуда: Санкт-Петербург
Сообщений: 706
patrick1968
TfrxPictureView(frxReport1.FindObject('Picture4').Picture.LoadFromFile("maingr.bmp");
Здесь явно не хватает закрывающей круглой скобки. В Delphi, выражение:
TfrxPictureView(obj_reference)
это приведение типа. В C++ будет так:
static_cast<TfrxPictureView*>(obj_pointer)
24 апр 21, 17:46    [22313663]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 507
Ну примерно так я и представлял
сделал следующее
 ss = "maingr.bmp";
TMemoryStream *st = new TMemoryStream;
Graphics::TBitmap *bm = new Graphics::TBitmap();
bm->Handle = LoadBitmap(HInstance, ss.c_str());
bm->SaveToStream(st);
static_cast<TfrxPictureView*>(frxReport1->FindObject("Picture4")->LoadFromStream(st));

Пришлось делать через поток
,но всё-таки, что-то пошло не так
получается ошибка [bcc32 Error] Sert.cpp(122): E2031 Cannot cast from 'void' to 'TfrxPictureView *'
- что-то я не допонял
25 апр 21, 11:15    [22313867]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

Скобки надо расставлять правильно, а не от балды.

Posted via ActualForum NNTP Server 1.5

25 апр 21, 12:21    [22313886]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 507
Ошибку понял - LOadFrom за скобками быть должен
Еще растолкуйте, пожалуйста такую тему, просто привычка от делфи в свете видимости переменных

есть у меня структура, объявленная в разделе PUBLIC в файле abc.h
   struct TMyPoint {
	  int PInd;
	  double Moment;
	  };

в форме (при создании) определяю массив

TMyPoint* Points = new TMyPoint[3];

и мне нужно, что бы он был виден по всех процедурах формы единообразно, как его нужно представлять в этих формах?
25 апр 21, 12:55    [22313899]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

patrick1968
Ошибку понял - LOadFrom за скобками быть должен

А что, в оригинальном тексте на Дельфи он был внутри скобок?..

Posted via ActualForum NNTP Server 1.5

25 апр 21, 13:08    [22313903]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 507
про делфи - это к другому вопросу
25 апр 21, 13:13    [22313907]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
didgik
Member

Откуда:
Сообщений: 987
patrick1968
Добрый день. Громадный респект за помощь. Не мог найти решение по синтаксису еще одного вопроса. Нужно поместить картинку из файла в объект Picture в Fastreport, на делфи было так

TfrxPictureView(frxReport1.FindObject('Picture4').Picture.LoadFromFile("maingr.bmp");


но в С++
frxReport1->FindObject('Picture4') нет Picture и LoadFromFile тоже
хотя можно через поток, но это слишком нагромождено, может есть более простое и правильное решение? Спасибо.


А в самом отчете если, типа:
void Picture1OnBeforePrint(TfrxComponent Sender)
{
  Picture1.FileLink=<WorkDir>+"photo\\"+<frxDBDataset1."photo">;
}
25 апр 21, 14:00    [22313913]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 507
Ну да, тут есть варианты

Я тут спрашивал по массиву, поможете? А то мне непонятно почему теряются значения массива. Наверное неверное объявление, при показе формы они проставляются, а в другой процедуре теряют значения.
25 апр 21, 15:15    [22313928]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 507
Добрый день.

Для отображения картинки в отчете
делаю следующее
Chart1->SaveToBitmapFile("maingr.bmp");
 ss = "maingr.bmp";
TMemoryStream *st = new TMemoryStream;
Graphics::TBitmap *bm = new Graphics::TBitmap();
bm->Handle = LoadBitmap(HInstance, ss.c_str());
bm->SaveToStream(st);
static_cast<TfrxPictureView*>(frxReport1->FindObject("Picture4"))->LoadFromStream(st);


В последнем операторе при выполнении ошибка, что файл неверного типа, очевидно, что у frxReport1->FindObject("Picture4") нет Picture, как в делфи, тогда как же поступить?
26 апр 21, 17:56    [22314644]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
didgik
Member

Откуда:
Сообщений: 987
patrick1968, а типа такого:
((TfrxPictureView*) Rep->FindObject("Picture4"))->Picture->LoadFromFile(photoname);
28 апр 21, 00:22    [22315376]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Пётр Седов
Member

Откуда: Санкт-Петербург
Сообщений: 706
patrick1968
в форме (при создании) определяю массив

TMyPoint* Points = new TMyPoint[3];

и мне нужно, что бы он был виден по всех процедурах формы единообразно, как его нужно представлять в этих формах?
Массив должен быть полем класса. Если длина известна на этапе компиляции, то обычный массив:
class TfGraph : public TForm {
public:
  ...
private:
  TMyPoint _points[3];
};
Если длина не известна на этапе компиляции, то можно использовать std::vector:
#include <vector>

class TfGraph : public TForm {
public:
  TfGraph(TComponent* AOwner, bool Act);
  ...
private:
  std::vector<TMyPoint> _points;
};

TfGraph::TfGraph(TComponent* AOwner, bool Act) :
  TForm(AOwner)
{
  _points.resize(3);
}
28 апр 21, 02:29    [22315385]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
Все форумы / C++ Ответить