• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
1,362 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ź 414 wizyt
pytanie zadane 23 czerwca 2022 w C i C++ przez kuki_shin Użytkownik (620 p.)
0 głosów
1 odpowiedź 589 wizyt
0 głosów
1 odpowiedź 353 wizyt

93,164 zapytań

142,175 odpowiedzi

321,925 komentarzy

62,491 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 453p. - Marcin Putra
  2. 453p. - dia-Chann
  3. 447p. - Łukasz Piwowar
  4. 443p. - CC PL
  5. 431p. - Łukasz Eckert
  6. 428p. - rafalszastok
  7. 423p. - Michal Drewniak
  8. 423p. - Adrian Wieprzkowicz
  9. 418p. - rucin93
  10. 415p. - Mikbac
  11. 410p. - Piotr Aleksandrowicz
  12. 408p. - ksalekk
  13. 402p. - Mariusz Fornal
  14. 401p. - Dawid128
  15. 392p. - ikarek-one
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...