Builder+WinAPI - akcja przed zamknięciem+wyświetlanie zmiennej

0

Witam, jestem początkujący, jeśli chodzi o WinAPI, więc proszę wybaczyć, jeśli pytania będą się Wam wydawać trywialne, ale nie znalazłem nigdzie odpowiedzi na nie. Mianowicie chodzi mi o takie dwie rzeczy:
1.) jak zrobić (a raczej gdzie umieścić kod akcji), żeby zaraz po wyjściu z programu (po wciśnięciu x) wykonywała się dana akcja (chodzi mi zapis np pewnych danych do pliku, wyświetlenie komunikatu, itd)
2.) jak wyświetlić string? np za pomocą ShowMessage? Teraz robię tak, że konwertuje (używam metody AnsiStringa) do AnsiStringa, ale to trochę bez sensu. Pewnie da się jakoś łatwiej.
Z góry dzięki.

1

No to ma być Builder czy WinApi ;
W Builder w zdarzaniu OnClose:

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
      Action = caFree ;

      /* tutaj zwalnianie zasobów lub zapisy do pliku */

}

W WinApi w obsłudze komunikatu WM_CLOSE .
Ale jeśli chodzi o wyświetlenie komunikatu np. z zapytaniem o zamknięcie aplikacji to raczej OnCloseQuery .
Drugiego pytania nie rozumiem kompletnie .
ShowMessage normalnie przecież jako parametr przyjmuje AnsiString ...

// AnsiString
String a = "ala ma kota" ;
ShowMessage(a) ;
//
// std::string
std::string b = "bleble" ;
ShowMessage(b.c_str());
//
// C string 
   const char* a = "Ala ma kota" ;
   ShowMessage(a);  // bez problemu i tak nastąpi niejawna konwersja do AnsiString
0

Chodziło mi o Buildera, namieszałem.

Ok, wielkie dzięki, co do drugie pytanie, to napiszę inaczej.
Mam jeden plik nagłówkowy, dajmy mu nazwę osoba.h z jakąś tam klasą.
Klasa ta ma funkcję składową, która będzie mi wypełniała ListBox1, czyli zawiera takie coś (fragment):

ListBox1->Items->Add(temp->nazwa.c_str());

I wyrzuca mi błąd, że nie zna ListBoxa...

[C++ Error] osoba.h(248): E2451 Undefined symbol 'ListBox1'

A mam to zrobione w taki sposób, że mam plik main.cpp i w nim, zaraz po bibliotekach załączam osoba.h:

include "osoba.h"

Jak to powinno być zrobione, żeby znał tego ListBoxa1 w funkcji składowej?
(oczywiście, że mogę to zrobić bez tej funkcji, ale ciało jest spore, więc wolałbym jednak z nią)

1

Trochę mało kodu podałeś ...
Ale ogólnie jeśli chcesz korzystać z komponentów VCL we własnych klasach nie zwalnia to z obowiązku dołącznia
w haderach plików nagłówkowych gdzie znajdują się deklaracje odpowiednich komponentów .
Deklaracja TListBox jest w -

#include <StdCtrls.hpp>

i jeśli chcesz użyć TListBox w osobnym pliku z własną
klasą to powinieneś dołączyć ten nagłówek w "osoba.h"
Nie wiem jak tam tworzysz tego ListBoxa , tu też może być problem ....
Jeśli ListBox należy do Form1 to musisz jawnie wskazać że chodzi o ten ListBox ,
a więc w pliku cpp dać extern TForm1 *Form1, lub dołączyć nagłówek do "osoba.h" gdzie jest deklarowana klasa zawierająca ListBox ( standardowo "Unit1.h" )
a w funkcji odnosić się jawnie :
Form1->ListBox1->Items->Add(.....) ;
Nie wiem , zbyt skromny opis aby udzielić 100% odpowiedzi ...

Proponuję odwiedzić stronę : http://programowanie.cal.pl/cyfbar/
Oraz : http://www.programowanie.cal.pl/forum/index.php
tam masz speca od C++ Builder ...

0

Dziękuję Ci.
Pomogło dorzucenie biblioteki + jawne wywołanie w funkcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1