• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Builder - wywołanie funkcji z innej Formy

Object Storage Arubacloud
+1 głos
1,304 wizyt
pytanie zadane 24 kwietnia 2015 w C i C++ przez niezalogowany

No wię tak: mam guzik ResetButton na Form1 (patrz obrazek poniżej), i dokładnie taki sam w Form2. Oba mają takie same funkcje, np. OnMouseUp. No i chciałbym z Form2 wywołać Form1->ResetButton->OnMouseUp(), no ale właśnie nie działa. Chciałem zrobić OnClick, lecz to samo. Oto error: [C++ Error] Unit2.cpp(46): E2192 Too few parameters in call. Skapnąłem się już, że w nawiasie jest za mało parametrów, ale nie wiem czy to i tak zadziała... POMOCYYY!!! Tutaj jest obrazek:

Nie patrzcie na przycisk Builderowy, tylko ten zrobiony przeze mnie. Oto mój kod z Form1:

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#include "mmsystem.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "trayicon"
#pragma resource "*.dfm"
TForm1 *Form1;

    //ilosc sekund
    int s=5;

    int godzin,minut,sekund;
    AnsiString godz,min,sek;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    s--;

    godzin=s/3600;
    godz=IntToStr(godzin);
    if(godzin<10) godz="0"+godz;

    minut=(s-godzin*3600)/60;
    min=IntToStr(minut);
    if(minut<10) min="0"+min;

    sekund=s-godzin*3600-minut*60;
    sek=IntToStr(sekund);
    if(sekund<10) sek="0"+sek;

    Label1->Caption=godz+":"+min+":"+sek;

    if(s<=0)
    {
        sndPlaySound("Dzwieki/alarm.wav",SND_ASYNC);
        Form2->Show();
        Label1->Top=56;
        Label1->Font->Size=18;
        Label1->Caption="KONIEC CZASU!!!";
        ResetButton->Visible=true;
        reset->Visible=true;
        Timer1->Enabled=false;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrayIcon1Click(TObject *Sender)
{
    Show();
    Application->BringToFront();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::resetClick(TObject *Sender)
{
    s=5;

    godzin=s/3600;
    godz=IntToStr(godzin);
    if(godzin<10) godz="0"+godz;

    minut=(s-godzin*3600)/60;
    min=IntToStr(minut);
    if(minut<10) min="0"+min;

    sekund=s-godzin*3600-minut*60;
    sek=IntToStr(sekund);
    if(sekund<10) sek="0"+sek;

    Label1->Top=40;
    Label1->Font->Size=36;
    Label1->Caption=godz+":"+min+":"+sek;

    reset->Visible=false;
    Form1->Visible=false;

    Timer1->Enabled=true;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::ResetButtonMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
    ResetButton->Cursor=crHandPoint;
    if((X>10&&X<151)&&(Y>10&&Y<39))
    ResetButton->Picture->LoadFromFile("Obrazki/button najechany.bmp");
    else ResetButton->Picture->LoadFromFile("Obrazki/button niewcisniety.bmp");
}
//---------------------------------------------------------------------------


void __fastcall TForm1::ResetButtonMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    ResetButton->Picture->LoadFromFile("Obrazki/button wcisniety.bmp");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ResetButtonMouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    s=5;

    godzin=s/3600;
    godz=IntToStr(godzin);
    if(godzin<10) godz="0"+godz;

    minut=(s-godzin*3600)/60;
    min=IntToStr(minut);
    if(minut<10) min="0"+min;

    sekund=s-godzin*3600-minut*60;
    sek=IntToStr(sekund);
    if(sekund<10) sek="0"+sek;

    Label1->Top=40;
    Label1->Font->Size=36;
    Label1->Caption=godz+":"+min+":"+sek;

    reset->Visible=false;
    Form1->Visible=false;

    Timer1->Enabled=true;
}
//---------------------------------------------------------------------------

A to z Form2:

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

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm2::resetClick(TObject *Sender)
{
    Form1->reset->Click();
    Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm2::ResetButtonMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
    ResetButton->Cursor=crHandPoint;
    if((X>10&&X<151)&&(Y>10&&Y<39))
    ResetButton->Picture->LoadFromFile("Obrazki/button najechany.bmp");
    else ResetButton->Picture->LoadFromFile("Obrazki/button niewcisniety.bmp");    
}
//---------------------------------------------------------------------------

void __fastcall TForm2::ResetButtonMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    ResetButton->Picture->LoadFromFile("Obrazki/button wcisniety.bmp");    
}
//---------------------------------------------------------------------------

void __fastcall TForm2::ResetButtonMouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    Form1->ResetButton->OnMouseUp(); // i tutaj mi nie działa!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Close();
}
//---------------------------------------------------------------------------

Ufff... Się napisałem! Mam nadzieję, że coś z tego zrozumiecie i spróbujecie mi pomóc :3

1 odpowiedź

0 głosów
odpowiedź 24 kwietnia 2015 przez piotrek77 Nowicjusz (220 p.)
A nie lepiej kod wywoływany przycikiem zapisać jako oddzielną metodę, którą wołałbyś zarówno z "natywnej" formy (dla wydarzenia myszy) jak i z drugiej formy?
komentarz 25 kwietnia 2015 przez niezalogowany
Tak też spróbowałem wcześniej, ale też cosik nie działało :/

Podobne pytania

0 głosów
1 odpowiedź 246 wizyt
pytanie zadane 23 czerwca 2022 w C i C++ przez kuki_shin Użytkownik (620 p.)
0 głosów
1 odpowiedź 403 wizyt
0 głosów
1 odpowiedź 203 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...