Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Перетаскивание файлов мышью


Автор: Rekah 17.9.2007, 15:37
Все добрый день.
У меня непонятка в коде из книги. В книге сказано создать вторую форму, назвать ее ChildForm.
Мне как-то надо включать его в основной код? 
Вобщем выдает ошибку и некомпилица:

MainForm.cpp
Код

#include <vcl.h>
#pragma hdrstop

#include "MainForm.h"

#include "ChildForm.h"
#include "ChildForm.cpp"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 DragAcceptFiles(Handle, True);
};


void __fastcall TForm1:: WMDropFiles(TWMDropFiles &message)
{
  AnsiString FileName;
  FileName.SetLength(MAX_PATH);
  int Count = DragQueryFile((HDROP) message.Drop,
                             0xFFFFFFFF, NULL, MAX_PATH);

  for(int index=0; index<Count; ++index)
{
   FileName.SetLength(DragQueryFile((HDROP) message.Drop,
                                    index, FileName.c_str(), MAX_PATH)
                     );

   if(UpperCase(ExtractFileExt(FileName))==".TXT" ||
      UpperCase(ExtractFileExt(FileName))==".RTF")
   {
    TForm2 *Viewer = new TForm2(Application);
    Viewer->Caption  =FileName;
    Viewer->RichEdit1->Lines->LoadFromFile(FileName);
    Viewer->Show();
   }
 }
 DragFinish((HDROP) message.Drop);

};


MainForm.h
Код

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

#ifndef MainFormH
#define MainFormH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>


//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
 void __fastcall FormCreate(TObject *Sender);

private:    // User declarations
void __fastcall TForm1:: WMDropFiles(TWMDropFiles &message);


public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
      BEGIN_MESSAGE_MAP
       MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WMDropFiles)
      END_MESSAGE_MAP(TForm);

};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif







Автор: Lazin 17.9.2007, 16:06
cpp файл не надо подключать - это дикость

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

Автор: Mihhail 17.9.2007, 16:22
Цитата(Rekah @  17.9.2007,  19:37 Найти цитируемый пост)
   if(UpperCase(ExtractFileExt(FileName))==".TXT" ||
          UpperCase(ExtractFileExt(FileName))==".RTF") { 
    TForm2 *Viewer = new TForm2(Application);
    Viewer->Caption  =FileName;
    Viewer->RichEdit1->Lines->LoadFromFile(FileName);
    Viewer->Show();
   }

Здесь в цикле создаётся несколько объектов(окон) TForm2, следовательно должно быть столько же и указателей. Необходимо объявить массив указателей до цикла for - TForm2 *Viewer[Count];

Автор: Rekah 17.9.2007, 16:37
Цитата

Необходимо объявить массив указателей до цикла for - TForm2 *Viewer[Count];

Ясно, сейчас исправлю.

Добавлено через 13 минут и 57 секунд
У меня код стал компилиться, после того как я убрал из заголовочного файла void __fastcall FormCreate(TObject *Sender);, но не знаю как подключить правильно вторую форму к проекту?

Автор: Lazin 18.9.2007, 07:40
Сеачала нужно её создать: меню Faile->New, затем в мастере выбрать форму.
затем подключить заголовочный файл:
#include "ChildForm.h"
потом можно использовать

Код

TChildForm* f = new TChildForm(this);
f->Parent = this;
f->Show();


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)