проблеммы перевода кода с Delphi на Си Билдер
От: Аноним  
Дата: 17.08.05 16:28
Оценка:
Приветствую.
Ситуация следующая, возникла необходимость перевести небольшой кусок работоспособного кода (всего несколько функций) с Delphi на Си Билдер, дабы использовать его в программе написанной с помошью второго. Сразу скажу что с Си знаком плохо и переводил используя в основном встроенный Си-шный хелп.
Так вот проблемма в след.:
1) как в Си Билдере заменить оператор (или как правильно) INHERITED?
2) как заменить оператор IS и AS в конструкции типа If (TObject is TButton) Then...

ЗЫ: Соответствий по справке не нашел, других же источников информации пока не имею, прошу помощи
Re: проблеммы перевода кода с Delphi на Си Билдер
От: Rius Россия  
Дата: 17.08.05 16:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Приветствую.

А>Ситуация следующая, возникла необходимость перевести небольшой кусок работоспособного кода (всего несколько функций) с Delphi на Си Билдер, дабы использовать его в программе написанной с помошью второго. Сразу скажу что с Си знаком плохо и переводил используя в основном встроенный Си-шный хелп.
А>Так вот проблемма в след.:
А>1) как в Си Билдере заменить оператор (или как правильно) INHERITED?
А>2) как заменить оператор IS и AS в конструкции типа If (TObject is TButton) Then...

А>ЗЫ: Соответствий по справке не нашел, других же источников информации пока не имею, прошу помощи


1. http://www.rsdn.ru/Forum/?mid=1294527
2. is что-то типа
if(AnsiString(Sender.ClassName()) == "TButton") {}


as —
TButton *b = (TButton *)Sender;

или
TButton *b = dynamic_cast<TButton*>(Sender);
//Если перевод не удался, то b = NULL
Re: проблеммы перевода кода с Delphi на Си Билдер
От: wildwind Россия  
Дата: 17.08.05 17:19
Оценка:
Здравствуйте, Аноним, Вы писали:

Найди человека, знающего Билдер. Совет от всего сердца!
Re: проблеммы перевода кода с Delphi на Си Билдер
От: yuha Беларусь  
Дата: 18.08.05 11:03
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Приветствую.

А>Ситуация следующая, возникла необходимость перевести небольшой кусок работоспособного кода (всего несколько функций) с Delphi на Си Билдер, дабы использовать его в программе написанной с помошью второго. Сразу скажу что с Си знаком плохо и переводил используя в основном встроенный Си-шный хелп.
А>Так вот проблемма в след.:
А>1) как в Си Билдере заменить оператор (или как правильно) INHERITED?
А>2) как заменить оператор IS и AS в конструкции типа If (TObject is TButton) Then...

Попробуй так:
//AS:
TButton* button = dynamic_cast<TButton*>(obj)

//IS:
if (dynamic_cast<TButton*>(obj)) {
     ...
}
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: проблеммы перевода кода с Delphi на Си Билдер
От: The_Only  
Дата: 18.08.05 16:21
Оценка:
Что касается 2-го вопроса — все ОК.

Суть первого тоже вроде бы понял, НО так и не смог найти соответсвующую процедуру. Вот куски кода:


class TForm1 : public TForm
{          
...................................

protected:
    void __fastcall WMSYSCOMMAND(TMessage Message);
        BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, WMSYSCOMMAND)
        END_MESSAGE_MAP(TForm)
};
....................................

void __fastcall TForm1::WMSYSCOMMAND(TMessage Message)

{
 if (Message.WParam == SC_MINIMIZE) {
   HideItemClick(Application->MainForm); //некая описанная выше функция
   exit;
 }
 if (Message.WParam == SC_CLOSE) {
   HideItemClick(Application->MainForm);
   exit;
//<<<<< тут долже был быть inherited;
 }



Как наверное видно, сделанна попытка перехватить сообщение Виндовоза, отследить что собственно юзер хочет сделать и если нечто не предусмотренное, то выполнить стандартную обработку (перетаскивать окно к примеру). В данном случае я затрудняюсь сказать какую именно функцию предка следует вызывать, может Вы поможете? Исследование исходников TForm ни к чему не привело (
Re[2]: проблеммы перевода кода с Delphi на Си Билдер
От: Oleg A. Bachin Украина  
Дата: 19.08.05 12:11
Оценка:
Здравствуйте, The_Only, Вы писали:

T_O>Как наверное видно, сделанна попытка перехватить сообщение Виндовоза, отследить что собственно юзер хочет сделать и если нечто не предусмотренное, то выполнить стандартную обработку (перетаскивать окно к примеру). В данном случае я затрудняюсь сказать какую именно функцию предка следует вызывать, может Вы поможете? Исследование исходников TForm ни к чему не привело (


хм... чувствуется влияние VC, а нельзя дешево и сердито
procedure WndProc(var Message: TMessage); override;
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[2]: проблеммы перевода кода с Delphi на Си Билдер
От: yuha Беларусь  
Дата: 19.08.05 15:15
Оценка:
Здравствуйте, The_Only, Вы писали:

T_O>Что касается 2-го вопроса — все ОК.


T_O>Суть первого тоже вроде бы понял, НО так и не смог найти соответсвующую процедуру. Вот куски кода:



T_O>
T_O>class TForm1 : public TForm
T_O>{          
T_O>...................................

T_O>protected:
T_O>    void __fastcall WMSYSCOMMAND(TMessage Message);
T_O>        BEGIN_MESSAGE_MAP
T_O>        MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, WMSYSCOMMAND)
T_O>        END_MESSAGE_MAP(TForm)
T_O>};
T_O>....................................

T_O>void __fastcall TForm1::WMSYSCOMMAND(TMessage Message)

T_O>{
T_O> if (Message.WParam == SC_MINIMIZE) {
T_O>   HideItemClick(Application->MainForm); //некая описанная выше функция
T_O>   exit;
T_O> }
T_O> if (Message.WParam == SC_CLOSE) {
T_O>   HideItemClick(Application->MainForm);
T_O>   exit;
T_O>//<<<<< тут долже был быть inherited;
T_O> }
T_O>



T_O>Как наверное видно, сделанна попытка перехватить сообщение Виндовоза, отследить что собственно юзер хочет сделать и если нечто не предусмотренное, то выполнить стандартную обработку (перетаскивать окно к примеру). В данном случае я затрудняюсь сказать какую именно функцию предка следует вызывать, может Вы поможете? Исследование исходников TForm ни к чему не привело (



Предлагаю заменить оконную процедуру.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    //заменяем процедуру
        WindowProc = WndProcHandler;
}

//новая оконная процедура
void __fastcall TForm1::WndProcHandler(Messages::TMessage & Message)
{
    if (Message.Msg == WM_SYSCOMMAND) {
        if (Message.WParam == SC_MINIMIZE) {
            //...
        }
        else if (Message.WParam == SC_CLOSE) {
            //...
        }
    }
    WndProc(Message);
}

//добавляем в обьявление класса
void __fastcall WndProcHandler(Messages::TMessage & Message);
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: проблеммы перевода кода с Delphi на Си Билдер
От: SilverCloud Россия http://rodonist.wordpress.com
Дата: 20.08.05 15:05
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>возникла необходимость перевести небольшой кусок кода с Delphi на Си Билдер, дабы использовать его в программе написанной с помошью второго.


А что, разве в Билдер компилятор паскаля больше не входит?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.