C++ Builder 6 problem z kontrolą edit

0

Witam,
Staram się pobrać dane z kontrolki edit w ten sposób:

DWORD dlugosc = GetWindowTextLength(Edit1);
LPSTR Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 );
GetWindowText(Edit1, Bufor, dlugosc + 1 );

Sposób ten jest podany w wielu miejscach, niestety "Bufor" pozastaje u mnie pusty.

0

Najprościej laxical_cast z Boost zapewne

Dzieje się to w ten sposób, że algorytm przetwarza ciąg znaków i buduje z tego liczbę. Najprostszym i przenośnym* jest użycie modyfikacji algorytmu do liczb całkowitych. Niemniej nie weźmie on pod uwagę specyficznych właściwości typów zmiennoprzecinkowych dostępnych na danej platformie, więc konwersja będzie zawierała więcej niedokładności niż przy wykorzystaniu algorytmów pisanych pod konkretne typy (np. IEEE-754 Single). Żeby jednak napisać ten ostatni, musisz poznać dobrze tak liczby zmiennoprzecinkowe, jak i niuanse ich implementacji na danej platformie.

0

Ja chce tylko pobrać stringa z edit, czy moglibyście podać jakiś przykład? jak mówiłem dopiero zaczynam przygodę z programowaniem.

0

DWORD dlugosc = GetWindowTextLength(hText);
LPSTR Bufor = (LPSTR)GlobalAlloc(GPTR, ++dlugosc);
GetWindowText(hText, Bufor, dlugosc);
SetWindowText(hwnd, Bufor);
GlobalFree(Bufor);

hText - pole edit;

To wpisujesz jeżeli button zostanie wciśnięty.

HWND hText
DWORD dlugosc = GetWindowTextLength(hText);
LPSTR Bufor = (LPSTR)GlobalAlloc(GPTR, ++dlugosc);
GetWindowText(hText, Bufor, dlugosc);
MessageBox(NULL,"jakis tekst",Bufor,MB_OK)
GlobalFree(Bufor);

0

Niestety wyświetla mi jedynie "jakis tekst" a z pola edit nie pobiera

void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND Edit1;
DWORD dlugosc = GetWindowTextLength(Edit1);
LPSTR Bufor = (LPSTR)GlobalAlloc(GPTR, ++dlugosc);
GetWindowText(Edit1, Bufor, dlugosc);
MessageBox(NULL,"jakis tekst",Bufor,MB_OK);
GlobalFree(Bufor);
}

0

HWND Edit1;
DWORD dlugosc = GetWindowTextLength(Edit1);

A Edit1 to niby czego uchwytem tu jest?

Piszesz, że używasz Buildera 6, więc albo tak:

HWND Edit1 = NazwaTEditaTwojego->Handle;
//... dalej Twój kod

lub nie łatwiej tak:

AnsiString as_text = NazwaEditaTwojego->Text;
ShowMessage(as_text);
0

No Edit1 to nazwa mojego edita, kolego ja naprawdę rano włączyłem pierwszy raz buildera, wcześniej z c++ miałem do czynienia tylko na lekcjach, ale to same podstawy

0

No to zamiast tego:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND Edit1;
DWORD dlugosc = GetWindowTextLength(Edit1);
LPSTR Bufor = (LPSTR)GlobalAlloc(GPTR, ++dlugosc);
GetWindowText(Edit1, Bufor, dlugosc);
MessageBox(NULL,"jakis tekst",Bufor,MB_OK);
GlobalFree(Bufor);
}

wstaw to:

void __fastcall TForm1::Button1Click(TObject *Sender)
 {
     ShowMessage(Edit1->Text);
 }
0

Dzięki działa; ]
A jak mam zrobić, żeby to zapisać do jakiej kol wiek zmiennej string?? bo muszę podać to jako argument funkcji. Kiedyś używałem Borland Delphi 7, ale z tego co pamiętam tam nie było takich problemów bo podawałem jako argument po prostu nazwę edita.

0

Jeśli to ma być std::string to:
string str = Edit1->Text.c_str();

0

Dzięki wielkie kolego.
Pozdrawiam i jeszcze raz dziękuję za pomoc,
Adrian.

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