Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Form Show 
:(
    Опции темы
Kirgston
Дата 18.2.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Сделал как мне надо =) пасиб большое ! Ребята помогите бедному ламо-чайнику освоить С++ )))
Вот щас захотелось мне сделать свою функцию, да или просто процедуру... 

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Forms, StdCtrls, ExtCtrls, ComCtrls, Controls,Registry,shellapi,
  GIFImg, jpeg;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel: TPageControl;
    TabSheet1: TTabSheet;
    PWD: TImage;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Image4Click(Sender: TObject);
  private
    ymin_,xmin_,xmax_,ymax_,step_,old_x,old_y,tabcount:integer;
    id1, id2, id3, id4,id5,id6: Integer;
    round_sleep,j,r,r_step:integer;
    str1,str2,str3,str4:string;
     procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
    { Public declarations }
  end;


ну например я тут спокойно вижу где подключаются библиотеки, где описываются обекты, где процедуры... в каких они разделах (приват, паблик и т.д.)

А в С++...

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"


как-то не очень понятно... сверху вижу что описаны библеотеки. Потом... ресурсы какбы... а где елементы те что я понаставлял? Как мне сделать свою функцию? =) например как её описать я понимаю... но вот... в делфях мне надо было её описать в разделе type типа
type
procedure blablabla;

а тут ничего такого нету. При попытке ввести просто перед началом кода заголовок функции и нажать на Ctr+Shift+C (В делфи автоматом создается "заготовка" процедуры) у меня ничего не получилось... Помогите пожалуйста бедному ламеру =)


Да и ещё один вопросик. Почему при
Код

ShellExecute(0,NULL,"readme.txt",NULL,NULL,NULL);

у меня не происходит открытия ридми? Хотя сайтики открывает хорошо. Да и ехешники тоже. А вот тхт файлы уже не в какую...


Заранее большое спасибо!!!
PM MAIL   Вверх
Dem_max
Дата 18.2.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Цитата

а где елементы те что я понаставлял? Как мне сделать свою функцию? =) 

все описывается в структуре класса который храниться в "Unit1.h"
а вот и сам класс
Код

class TFormMain : public TForm
{
__published:    // IDE-managed Components
        TMemo *ChekTextMemo;
        TButton *BtnOpenFile;
        TButton *BtnPrintFile;
        TOpenDialog *DlgOpenFile;
        TButton *BtnSaveFile;
        TSaveDialog *DlgSaveFile;
        TStatusBar *StatusBar;
        TMenuItem *N1;
        TMenuItem *MenuFilePrint;
        THeaderControl *HeaderControl1;
        THeaderControl *HeaderControl;
        TRadioButton *RButton44mm;
        TRadioButton *RButton58mm;
        TStaticText *StaticText1;
        TComboBox *BoxNumCopys;
        TImageList *ImageList1;
        TTimer *TimerConnect;
        void __fastcall MenuFileOpenClick(TObject *Sender);
        void __fastcall MenuFileNewClick(TObject *Sender);
        void __fastcall MenuFileSaveClick(TObject *Sender);
        void __fastcall MenuFileSaveAsClick(TObject *Sender);
        void __fastcall MenuExitClick(TObject *Sender);
          TStatusPanel *Panel, const TRect &Rect);
private:    // User declarations
public:        // User declarations
        __fastcall TFormMain(TComponent* Owner);
        void __fastcall LoadFromFileData(AnsiString FileName); //вот твои функции
        void __fastcall AddMenuNewItem(void);
        void __fastcall SaveSettings(void);
        void __fastcall WriteIniFile(void);
        void __fastcall NewMenuItemsClick(TObject *Sender);
        void __fastcall DeleteItemMenu(int NumberAction);
        void __fastcall ReadIniFile(void);

};



Цитата

 меня не происходит открытия ридми? Хотя сайтики открывает хорошо. Да и ехешники тоже. А вот тхт файлы уже не в какую...


Код

ShellExecute(Form1->Handle, "open", "notepad", "readme.txt", NULL, SW_SHOW);


Цитата
Ребята помогите бедному ламо-чайнику освоить С++ )))

Ээээ, это как нибудь без нас, литературы куча, примеров тоже + Google + MSDN


Это сообщение отредактировал(а) Dem_max - 18.2.2009, 15:39


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Kirgston
Дата 18.2.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Ой пасиб большое!!! Да я не такой чтобы постоянно спрашивать =) мне бы просто какбы... привыкнуть к среде =) вот остался только вопросик... в Делфи я когда обявлял функцию\процедуру я мог описать её и нажать Ctr+Shift+C и автоматически создавался обработчик под мою функцию\процедуру. Тут этакое не катит =) может есть какие-то аналоги? А то описывать свою функцию вручную не очень удобно. Простой пример:
Код

type
   procedure read; //пишу это и зажимаю Ctr+Shift+C


Получаю:

Код

procedure TForm1.read;
begin

end;



Вот что-то на подобии этакого =)

Заранее большое спасибо!!!

З.Ы. я тоже хочу научится так шайтанить в С++ как вы  smile 
PM MAIL   Вверх
TopCore
Дата 22.8.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 17.8.2009

Репутация: нет
Всего: нет



Kirgston, ну как, стал шайтаном? smile  smile Если да, то передай опыт и мне. Только по-шамански.
PM MAIL   Вверх
dasknix
  Дата 7.11.2009, 03:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Цитата(Dem_max @ 17.2.2009,  16:41)
тады держи
Делаешь форму, которая будет изображать SplashScreen;
Делаешь WinMain вида:
и форма должна быть project->Options->Forms->Available Forms
Код

#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("MainForm.cpp", Main);
USEFORM("splash.cpp", SplashForm); 
//---------------------------------------------------------------------------
#include "splash.h"

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 SplashForm = new TSplashForm(Application);
                 SplashForm->Show();
                 SplashForm->Update();

                 Application->Initialize(); 
                 Application->Title = "Редактор шрифтов и графики принтера";
                 Application->CreateForm(__classid(TMain), &Main);
                 SplashForm->Hide();
                 SplashForm->Close(); 
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        catch (...)
        {
                 try
                 {
                         throw Exception("");
                 }
                 catch (Exception &exception)
                 {
                         Application->ShowException(&exception);
                 }
        }
        return 0;
}


ок, а такой вопрос:

после сидения часов, этак, шести-восьми с Брукландом, и уже мирно покуривая вместе
с его ближним братом Дебаггером Мне явила свой лик сама Суть предложенного
тобой кода. Она, как я понял заключается в том что это неудобно, ибо убить форму-сплеш,
созданную в главном сурсе проекта не имеется никакой возможности! Т.е. мы можем работать
с внутренними элеметами управления и другими объектами на форме, но прочитать её свойства
или повлиять на них напрямую изнутри не имеется никакой возможности! Это не есть гуд, ибо,
например в моей ситуации как ты уже понял я скрываю/закрываю её сам, после того, как например
моя прога отыскала конфиг, или не отыскала и выходит с предупреждением..

Вопрос: можно ли сделать это, не загружая основную форму, при чём не в основном сурсе (как то
не правильно с точки зрения распределения кода получиться), а в сурсе модуля, который как раз управляет
этой формой?..

E.G.:

[MainProjectSource].cpp
Код

...

#include "SplashForm.h"
//---------------------------------------------------------------------------
USEFORM("Main.cpp", frmMain);
USEFORM("ClientAddForm.cpp", frmClientAdd);
USEFORM("SplashForm.cpp", frmSplash);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
        Application->Initialize();
        Application->Title = "AppTitle";
        Application->CreateForm(__classid(TfrmMain), &frmMain);
        Application->ShowMainForm = false;

        frmSplash = new TfrmSplash(Application);
        frmSplash->FormStyle = fsStayOnTop;
        frmSplash->Show();
//        frmSplash->Update();

        Application->Run();
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }

...


SplashForm.cpp
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <windows.h>
#include "SplashForm.h"
#include "Main.h"

// INTERNAL CONFIGURATION
#define iOC_CONF_FILE "iOC_console_config.icf"
#define iOC_BINPATH "Consoles\\"
#define iOC_DATAPATH "Consoles\\UserData\\"
#define iHOMEPATH "C:\\Program Files\\[....]\\[....]\\Bin\\"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmSplash *frmSplash;
//---------------------------------------------------------------------------
__fastcall TfrmSplash::TfrmSplash(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TfrmSplash::iOC_Splash_Prepare()
{
    HANDLE hOCConfFile;

    lblProgress->Caption = "Поиск данных конфигурации..";
    hOCConfFile = CreateFile(iOC_CONF_FILE,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_READONLY,NULL);
    if(hOCConfFile==INVALID_HANDLE_VALUE){
     lblProgress->Caption = "Ошибка загрузки конфигурационных данных с диска";
        Application->MessageBox("msg","title",MB_OK+MB_ICONERROR);
        frmMain->Close();
    }
    lblProgress->Caption = "Применение конфигурации..";
    //applying conf..
    CloseHandle(hOCConfFile);

    Application->ShowMainForm = true;
//    frmSplash->Visible = false;
//    frmMain->Show();
//    frmSplash->Close();
}
//---------------------------------------------------------------------------


void __fastcall TfrmSplash::FormShow(TObject *Sender)
{
    iOC_Splash_Prepare();
}
//---------------------------------------------------------------------------



SplashForm.h
Код

...ude <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TfrmSplash : public TForm
{
__published:    // IDE-managed Components
    TImage *imgOC_Logo;
    TLabel *lblProgress;
    void __fastcall FormShow(TObject *Sender);
private:    // User declarations
public:        // User declarations
    __fastcall TfrmSplash(TComponent* Owner);
    void __fastcall iOC_Splash_Prepare();
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmSplash *frmSplash;
//---------------------------------------------------------------------------

#endif


т.е. сплеш либо сам сворачивает свои причиндалы, если всё нормально, либо выходит из программы, если error.. (e.g. file not found..)

PS Application->MainForm == frmMain ..

Это сообщение отредактировал(а) dasknix - 7.11.2009, 03:19
PM MAIL   Вверх
dasknix
  Дата 7.11.2009, 03:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



хехе, покумекал тут и нашёл временное решение:
перенёс

Код

Application->CreateForm(__classid(TfrmMain), &frmMain);


из главного сурса (MainProjectSource) в iOC_Splash_Prepare(),
и добавил туда

Код

Application->ShowMainForm = true;


и всё это будет выполняться только если препарирование
прошло нормально, иначе приложение закрывается.. (exe
завершает работу, проверял), но это всё равно не совсем
гуд имхо.., я не очень понимаю что делает App->Run(); и
времени нету, может кто поделиться сжатым куском
полезной инфы?.. smile 

Это сообщение отредактировал(а) dasknix - 7.11.2009, 03:42
PM MAIL   Вверх
Anikmar
Дата 7.11.2009, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(dasknix @  7.11.2009,  03:39 Найти цитируемый пост)
хехе, покумекал тут и нашёл временное решение:
перенёс

Главное правило программера: работает - не трогай.  smile 
Цитата(dasknix @  7.11.2009,  03:39 Найти цитируемый пост)
 не очень понимаю что
делает App->Run(); и времени нету

В кратце - вызывает вашу программу
А коль времени нету - тогда шаманьте хоттабыча... Иначе - Программирование занимает большую часть свободного времени.
PM MAIL ICQ   Вверх
Dmi3ev
Дата 7.11.2009, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



 smile 
Цитата

Главное правило программера: работает - не трогай. 

Понравилось высказывание smile 
Применил его к некоторым жизненным вещам(не компьютерным) и повеселился smile 



--------------------

PM MAIL   Вверх
A5uKa
Дата 7.11.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16



по поводу сплэшки мне кажется проще всего так

Код

                 SplashForm = new TSplashForm(Application);
                 SplashForm->Show();
                 SplashForm->Update();
                 // А в этом месте мы спим или думаем зачем вообще нам сплка или делаем свои дела
                 Application->Initialize(); 
                 SplashForm->Close(); 
                 delete SplashForm;


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

Код

Application->ShowMainForm=false;


и 

Код

void __fastcall TMainForm::FormCreate(TObject *Sender)
{
        Application->CreateForm(__classid(TSplash), &Splash);
        Splash->Show();
}


а там уже что угодно ...
PM   Вверх
dasknix
  Дата 10.11.2009, 04:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Цитата(A5uKa @ 7.11.2009,  10:45)
по поводу сплэшки мне кажется проще всего так..

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

мне нужно делать именно с самой сплешкой "что-то" =)

а форму я просто потом включу ShowMainForm'ом, это не проблема,
проблема в том, что я не могу получить доступ к форме, созданной
и вызванной в главном файле кода! Она не может сама себя закрыть,
а вместо этого вылетает с exception'ом.. т.е.:

пишу в SplashForm:
Код

frmSplash->Close();

или 
Код

frmSplash->Color = clBlack;

в общем, не важно, что, любое обращение к ней завершается бесполезным бубном и 2-3 пачками сигарет,
после которых уже даже киберпанк муви смотреть не хочется.. =\

PS и грузить из главной формы эту - не вариант, у меня MainForm массивный и башущий вобщем), поэтому сначала
сплеш проверяет версию ОСи, стека и прпр, наличие и состояние конфигов, а уже после релизит конф-инфу из источника
данных и приминяет их на форму, после чего она уже появляется, причем без глюков с постепенной прорисовкой и прпр..

вот такие дела. неужели никто не знает как правильно поступить, форум же вроде набит гуру..

И почините поиск по разделу уже, я 4м модерам сообщил недели полторы назад - ноль внимания..!  smile  smile  smile 

Код

Query failed: connection to localhost:3312 failed.


Это сообщение отредактировал(а) dasknix - 10.11.2009, 04:13
PM MAIL   Вверх
A5uKa
Дата 10.11.2009, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16



frmSplash->Hide() или закрыть её на активации MainForm не вариант ?
PM   Вверх
dasknix
  Дата 13.11.2009, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



2A5uKa

нет, не вариант. Автоматическая инициализация
формы - не выход, т.к. она большая и нагруженная,
должна быть запущена только, если код сплеша
сообщит что ошибок нет и можно загружать главную
форму. Других вариантов не дано, если нужно чтобы
работало быстро, а это нужно.

Пример: ты грузишь Photoshop CS3 на компе 1гГц + 256 RAM,
у тебя вылезает сплешь, в фоне грузиться workspace,
и после того как у тебя 200 метров мозгов забито тебе
сообщают, что файл конфигурации не найден или не может
быть сохранён (если его нету, то он автосгенериться..).
Причем сообщение сразу не вылезет как-раз потому что
будет грузить проц и вообще комп загружающаяся форма.

Так вот, повторюсь:
как можно вызвать из кода сплеша [SplashForm.cpp]
закрытие его формы [frmSplash->Close();], учитывая
то, что сам он создан фрагментом главного кода проекта [имя_проекта].cpp:
Код

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
...
    Application->ShowMainForm = false;

    frmSplash = new TfrmSplash(Application);
    frmSplash->FormStyle = fsStayOnTop;
    frmSplash->Show();
//    frmSplash->Update();
    frmSplash->Visible = false;
    frmSplash->Close();

    Application->Run();
...


...?

PS Вот что не работает [SplashForm.cpp]:
Код

void __fastcall TfrmSplash::FormActivate(TObject *Sender)
{
    iOC_Splash_Prepare();    
}

void TfrmSplash::iOC_Splash_Prepare()
{
    //init
    if(ApplyEnvParams()){
     Application->MessageBox("Существующая операционная система"
                             " не отвечает минимальным требованиям"
                                " запуска консоли.....\n\nЗа разрешением"
                                " проблемы обратитесь к ИТ-специалисту вашей компании"
                                " или в Службу Поддержки\n\nкомпании ....."
                                " ..... Software по тел. в Санкт-Петербурге:\n\n    +7 (***) *******","title"
                                " | Ошибка совместимости",MB_OK+MB_ICONERROR);
    }

    //configuring OC
    if(ApplyConf2UI()) return;

    //loading OC
    lblProgress->Caption = "Загрузка консоли оператора комплекса .....";
    Application->CreateForm(__classid(TfrmMain), &frmMain);
    Application->ShowMainForm = true;

    frmSplash->Close();     [color=crimson]< Exception![/color] Это не работает


Это сообщение отредактировал(а) dasknix - 13.11.2009, 00:46
PM MAIL   Вверх
dasknix
Дата 13.11.2009, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Цитата(Anikmar @ 7.11.2009,  03:48)
Цитата(dasknix @  7.11.2009,  03:39 Найти цитируемый пост)
 не очень понимаю что
делает App->Run(); и времени нету

В кратце - вызывает вашу программу
А коль времени нету - тогда шаманьте хоттабыча... Иначе - Программирование занимает большую часть свободного времени.

почитал 
http://msdn.microsoft.com/ru-ru/library/ms157902.aspx

вот бы узнать, что происходит, и что обрабатывает 
этот Run(), если форма ещё не создана..

и опять же, переписана ли Borland'овская Run() корректно,
или могут возникнуть проблемы, которые при тестировании
выявить трудно?.. Кто может подсказать?..
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0973 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.