• 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

VPS Starter Arubacloud
+1 głos
1,300 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ź 240 wizyt
pytanie zadane 23 czerwca 2022 w C i C++ przez kuki_shin Użytkownik (620 p.)
0 głosów
1 odpowiedź 390 wizyt
0 głosów
1 odpowiedź 190 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...