|
Программирование >> Перегруженные имена функций и идентификаторы
Application->CreateForm( classid(TForm1), &Form1); Application->Run(); catch (Exception &exception) Application->ShowException(&exception); CloseHandle(hFile); return 0; Это, в принципе, универсальный способ, устойчивый к некорректному завершению программы, основным недостатком которого является появление лишнего файла на диске. Как на C++ выглядит паскалевский is? dynamic cast<...>(...); Пример: Паскаль: if Screen.Forms[I] is FormClass then begin C++: if (dynamic cast<FormClass*>(Screen->Forms[I])){ Как сделать окно как у WinAMP? Установки формы: = Object Inspector = BorderIcons=[] BorderStyle=bsNone Если таскаем за TLabel, то поместить на форму один Label и 3 кнопки SpeedButton (свернуть, развернуть, закрыть), в процедуре на событие onMouseDown поместить следующие строчки: void fastcall TForm1::Label1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) const int SC DRAGMOVE = 0xF012; if(WindowState!=wsMaximized) чтобы не таскать развернутое окно ReleaseCapture(); Perform(WM SYSCOMMAND, SC DRAGMOVE, 0); на кнопки в событии onClick свертывание формы void fastcall TForm1::SpeedButton1Click(TObject *Sender) Perform(WM SYSCOMMAND,SC MINIMIZE,0); развертывание/восстановление формы void fastcall TForm1::SpeedButton2Click(TObject *Sender) if(WindowState==wsMaximized) тут не плохо бы сменить рисунок на кнопке Perform(WM SYSCOMMAND,SC RESTORE,0); else Perform(WM SYSCOMMAND,SC MAXIMIZE,0); закрытие формы void fastcall TForm1::SpeedButton3Click(TObject *Sender) Perform(WM SYSCOMMAND,SC CLOSE,0); Все объекты могут находиться на панели (TPane1) - но проще поместить Bevel на форму. Почему не работает код: Variant v = Variant::CreateObject( Excel.Application ); v.OlePropertySet( Visible ,true); Из-за особенностей реализации OLE-сервера Exce1 русской локализации. В Borlands examples сказано, что примеры с OLE работают, только если у вас стоит английская версия Word или Excel. Необходимо использовать библиотеку типов Excel. Как показать ProgressBar на StatusBarе? Предположим, что вы хотите показать CProgressCtrl на весь StatusBar. Для этого необходимо проделать следующее: Выберите пункт меню View ❖ Resource Symbols. Нажмите кнопку New и добавьте новое имя, в нашем примере это будет ID PROGRBAR. В файле MainFrm.cpp найдите объявление массива indicators (он находится сразу после END MESSAGE MAP) и отредактируйте его к следующему виду: static UINT indicators[] = ID PROGRBAR В файле MainFrm.h создайте protected переменную m bCreated типа BOOL и public переменную m progress типа CProgressCtl. В файле MainFrm.cpp отредактируйте конец функции int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) таким образом: if (!m wndStatusBar.Create(this ) !m wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof (UINT))) TRACE0( Failed to create status bar\n ); return -1; fail to create добавьте следующую строку: else { m wndStatusBar.SetPaneInfo(0,ID PROGRBAR,SBPS STRETCH,10); Кроме того, добавьте инициализацию нашей переменной m bCreated:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |