CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Pozycjonowanie okna ShowMessage

Pozycjonowanie okna ShowMessage

dział ogólny

Re: Pozycjonowanie okna ShowMessage

Nowy postprzez marsianinek » piątek, 27 sierpnia 2010, 15:34

Nie będę się już tu wypowiadał, pozostawię tylko przykład użycia tej funkcji, który pojawia się na wielu innych forach:
KOD cpp:     UKRYJ  
TForm* myDLG = CreateMessageDialog("...",...);
myDLG->ShowModal();
myLDG->Release;

W innych przykładem zamiast Release() spotkałem też Free();, ale w tym wypadku możemy potraktować to jako synonim (czym różni się jedno od drugiego to już dyskusja na inny temat).

Jako ciekawostkę można dodać, że tak utworzony dialog możemy dowolnie zmienić, dodając dynamiczne nowe kontrolki, np. TEdit'y oraz podpinać pod nie swoje zdarzenia. Można sobie łatwo zrobić dialog np. do podawania hasła z *** gwiazdkami, wszystko to bazując na CreateMessageDialog() - jeśli będą chętni napiszę o tym.
Avatar użytkownika
marsianinek
 
    Windows XPFirefox

Re: Pozycjonowanie okna ShowMessage

Nowy postprzez marsianinek » piątek, 27 sierpnia 2010, 15:56

Tak się składa, że taka funkcja bardzo mi się przyda (W C++Builder 6 nie znalazłem innej gotowej), toteż wklejam przykład:
KOD cpp:     UKRYJ  
#include <Dialogs.hpp>

bool __fastcall ShowPasswordDialog(String Caption, String Prompt, String& Password)
{
        TForm* f = CreateMessageDialog(Prompt, mtCustom, mbOKCancel);
        f->Caption = Caption;
        f->Height += 29;
        ((TButton*)f->FindComponent("OK"))->Top += 29;
        ((TButton*)f->FindComponent("Cancel"))->Top += 29;
        TEdit* e = new TEdit(f);
        int left = ((TLabel*)f->FindComponent("Message"))->Left;
        e->Parent = f;
        e->Left = left;
        e->Top = 30;
        e->Width = f->ClientWidth - 2*left;
        e->Height = 21;
        e->PasswordChar = '*';
        e->Text = Password;
        bool result = false;
        if (f->ShowModal() == mrOk)
        {
                Password = e->Text;
                result = true;
        }
        delete f;
        return result;
}


Przykład wykorzystania:
KOD cpp:     UKRYJ  
String pass;
if (ShowPasswordDialog("Logowanie", "Podaj hasło:", pass))
{
        ShowMessage("Podano hasło: " + pass);
}
else
{
        ShowMessage("Nie podano hasła.");
}


Możemy oczywiście dodać obsługę minimalnej wymaganej długości hasła itd. ale to już pozostawię czytelnikom do zabawy.
Ostatnio edytowano niedziela, 29 sierpnia 2010, 17:55 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: Poprawiłem błąd, dodałem #include <Dialogs.hpp> niezbędne by funckcja CreateMessageDialog mogła skorzystać z flagi mbOKCancel.
Avatar użytkownika
marsianinek
 
    Windows XPFirefox

Re: Pozycjonowanie okna ShowMessage

Nowy postprzez Cyfrowy Baron » niedziela, 29 sierpnia 2010, 14:30

W zasobach środowiska C++Builder istnieje gotowa funkcja pozwalająca wyświetlić okno dialogowe z żądaniem odpowiedzi, np. do logowania z żądaniem podania hasła:

KOD cpp:     UKRYJ  
 String password = InputBox("Logowanie:", "Podaj hasło:", "");

 if(password != "hasło")
   TaskMessageDlg("Logowanie", "Nieprawidłowe hasło", mtError, TMsgDlgButtons() << mbOK, 0);




W Twoim kodzie jest drobny błąd. Powinno być tak:

KOD cpp:     UKRYJ  
TForm* f = CreateMessageDialog(Prompt, mtCustom, TMsgDlgButtons() << mbOK << mbCancel);


Po pierwsze nie ma wartości o nazwie mbOKCancel i trzeba je wprowadzać pojedynczo, dlatego niezbędny element to TMsgDlgButtons().
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pozycjonowanie okna ShowMessage

Nowy postprzez marsianinek » niedziela, 29 sierpnia 2010, 16:13

Wiem, że istnieje InputBox, ale jest tam zwykłe pole edycyjne z odkrytym tekstem a do wpisywania haseł używa się pól wyświetlających tylko gwiazdki ******.
Oczywiście, istnieje mbOKCancel, ale jeśli faktycznie w wyższych wersjach to usunęli to trzeba wtedy użyć Twojego rozwinięcia.
W BCB6 mbOKCancel występuje w formie definicji:
#define mbOKCancel (System::Set<TMsgDlgBtn, mbYes, mbHelp> () << mbOK << mbCancel )
Ostatnio edytowano niedziela, 29 sierpnia 2010, 17:09 przez marsianinek, łącznie edytowano 1 raz
Avatar użytkownika
marsianinek
 
    Windows XPFirefox

Re: Pozycjonowanie okna ShowMessage

Nowy postprzez Cyfrowy Baron » niedziela, 29 sierpnia 2010, 16:30

Można użyć mbOKCancel, ale dopiero po dołączeniu do projektu biblioteki Dialogs.hpp.

ale sprawdź czy aby na pewno tego nie ma - wpisz i wciśnij na tym F1.


No Co Ty! Poważnie! Tak to się robi?! :lol:
Ostatnio edytowano niedziela, 29 sierpnia 2010, 17:58 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: Ponieważ marsianinek usunął ze swojej wypowiedzi słowa odnoszące się do mnie, ja postąpiłem tak samo.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pozycjonowanie okna ShowMessage

Nowy postprzez marsianinek » niedziela, 29 sierpnia 2010, 17:12

Gdzie jest usuwanie konta z forum? Proszę o usunięcie mojego konta.
Ostatnio edytowano niedziela, 29 sierpnia 2010, 17:59 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: Pozostawiłem tylko prośbę użytkownika marsianinek o usunięcie konta. Nie będę odnosił się do powodów dla ktorych to zrobił. Każdy ma prawo do usunięcia konta.

Avatar użytkownika
marsianinek
 
    Windows XPFirefox

Re: Pozycjonowanie okna ShowMessage

Nowy postprzez polymorphism » niedziela, 29 sierpnia 2010, 17:45

A coś Ty, marsianinek, taki w gorącej wodzie kąpany? Jedno spięcie na forum i od razu uciekasz?

Wyluzuj nieco i będzie git 8-)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 7 gości