powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / от Delphi к CPP
25 сообщений из 93, страница 3 из 4
от Delphi к CPP
    #40059356
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968
Так мне надо чтобы список элементов вектора стал пустым и в дальнейшем его надо было наполнять с нуля, а после clear() ранее занесенные элементы не удалились.

А как вы определили, что они не удалились?
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40059357
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался, спасибо.
Вот тут еще у меня заминка
есть фрагмент
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void __fastcall TMainForm::Rec(TObject *SenderVal,TObject *SenderTime,double MaxValue,bool CColor)
{
 if (CColor == true)
   {
	(SenderVal as TEdit).Color = clRed;
	(SenderVal as TEdit).Font.Color = clWhite;
   }

}


кусок, что по IF оставил написанным на Delphi, а как такая подстановка будет в CBuilder
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40059372
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dynamic_cast
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40059386
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выглядеть будет так?
Код: plaintext
1.
dynamic_cast<TEdit*>(SenderVal)->Color = clRed;
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40059454
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968, dynamic_cast<TEdit*>(...) проверяет реальный тип объекта, правда ли что объект класса TEdit, или производного. Если нет, то возвращает NULL (nullptr в современном C++). static_cast<TEdit*>(...) не проверяет реальный тип объекта, а верит на слово программисту. Поэтому можно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
#include <assert.h>
...
assert(dynamic_cast<TEdit*>(SenderVal) != NULL); // объект должен быть класса TEdit, или производного
TEdit* e = static_cast<TEdit*>(SenderVal);
e->Color = clRed;
e->Font->Color = clWhite;

assert -- отладочная проверка для debug build-а. В release build-е (когда определён глобальный макрос NDEBUG) выражение в assert-е не вычисляется.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40059457
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пётр Седов,

Мне иногда кажется, что я копипаст вижу "аналоговым" способом. Как картинку. Даже не читая кода.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40059472
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пётр СедовЕсли нет, то возвращает NULL (nullptr в современном C++).

Он в принципе способен выкидывать std::bad_cast и только в этом случае является аналогом
дельфийского as.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40059483
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Он в принципе способен выкидывать std::bad_cast
Да, если dynamic_cast ссылок, а не указателей.

Dimitry Sibiryakov
и только в этом случае является аналогом дельфийского as.
Судя по коду, программист явно уверен, что объект класса TEdit, поэтому я бы и в Delphi написал без оператора as:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
  e: TEdit;
begin
  Assert(SenderVal is TEdit); // проверяется реальный тип объекта, но только в debug build-е
  e := TEdit(SenderVal); // не проверяется реальный тип объекта
  e.Color := clRed;
  e.Font.Color := clWhite;
end;
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40061514
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер.
Столкнулся тут я снова с непонятным. Нужно было мне настроить отображение ячеек StringGrid, ну я по обыкновению
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void __fastcall TMainForm::sgMainDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
          TGridDrawState State)
{
  if (ACol = 1) { sgMain->Canvas->Brush.Color = clWhite; }
			  else { sgMain->Canvas->Brush->Color = clLime; }
  sgMain->Canvas->FillRect(Rect);
  if (ACol = 1) { sgMain->Canvas->Font->Color = clBlack; }
			  else { sgMain->Canvas->Font->Color = clBlue; }
  text = sgMain->Cells[ACol, ARow];
  DrawText(sgMain.Canvas.Handle, PChar(text), Length(text), Rect, DT_CENTER or DT_VCENTER);

}



на что у меня на заголовке процедуры вываливается ошибка

[bcc32 Error] Main.cpp(808): E2015 Ambiguity between 'Gridseh::TGridDrawState' and 'Vcl::Grids::TGridDrawState'

Я так понял, тут какое то разночтение типов, только что с этим делать? Заранее благодарен.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40061534
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,

явно специфицировать тип параметра Gridseh::TGridDrawState State
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40061538
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968
Код: plaintext
1.
if (ACol = 1) ...

Надо так:
Код: plaintext
1.
if (ACol == 1) ...
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40061840
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за подсказки - проделал
в заголовке MainForm.h также прописал

void __fastcall sgMainDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
Gridseh::TGridDrawState State);

но получил ошибку

[bcc32 Error] Main.h(118): E2090 Qualifier 'Gridseh' is not a class or namespace name
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40061841
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очевидно надо как-то правильно прописать пространство имен?
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40061846
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40061874
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968, надо в MainForm.h написать include до прототипа функции:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
// MainForm.h
...
#include <заголовочный файл, в котором определяется namespace Gridseh>
...
// прототип функции
void __fastcall sgMainDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
Gridseh::TGridDrawState State);
...

В заголовочном файле (который написан авторами библиотеки) должно быть это:
Код: plaintext
1.
namespace Gridseh
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40062029
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Спасибо за разъяснение
просто сделал
Код: plaintext
1.
2.
void __fastcall sgMainDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
Grids::TGridDrawState State);


и всё сработало как надо
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40062793
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Еще ситуация, непонятная получается. Регулярно при запуске приложения возникает ошибка "access violation". Но потом спустя время, ну может при перезагрузке IDE или компа. Не изменяя никак приложение всё нормально. Чем это объяснено. Уж больно глюк напоминает?
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40062798
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968
Добрый день.

Еще ситуация, непонятная получается. Регулярно при запуске приложения возникает ошибка "access violation". Но потом спустя время, ну может при перезагрузке IDE или компа. Не изменяя никак приложение всё нормально. Чем это объяснено. Уж больно глюк напоминает?
Переменные забываешь обнулить при старте программы.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40062803
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968Уж больно глюк напоминает?

Это и есть глюк. В твоей программе. Отлаживайся. Адрес в ошибке выводится, сопоставить его
с исходниками - простая техническая задача.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40062815
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,
Ловить надо. Это наша работа.
Оберни код при старте в try и лови
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40062817
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AV не ловится try. Да и толку от его поимки ещё меньше, чем от простого сообщения об ошибке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40062821
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
AV не ловится try. Да и толку от его поимки ещё меньше, чем от простого сообщения об ошибке.
каждый судит со своей колокольни.
Ты новичку предложил дамп расшифровать.
Я предложил занятся пошаговой отладкой.
Дай тест на то что не ловится. Я проверю.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40062823
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40062824
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpДай тест на то что не ловится.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
int main()
{
   try
   {
     int a = *(int*)0;
   }
   catch(...)
   {}
}


Ну и удачи в отладке этого:
Код: sql
1.
2.
3.
4.
5.
int a = *(int*)0;

int main()
{
}
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40062826
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Пошаговая работает
...
Рейтинг: 0 / 0
25 сообщений из 93, страница 3 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / от Delphi к CPP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]