CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - GDI+ AddString - problem z tekstem

GDI+ AddString - problem z tekstem

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

GDI+ AddString - problem z tekstem

Nowy postprzez pioro700 » sobota, 11 listopada 2017, 11:43

Dzień dobry.
Mam problem z wyświetleniem tekstu w funkcji Gdiplus GraphicsPath.AddString(const WCHAR *string, INT length, const FontFamily *family, INT style, REAL emSize, const Rect &layoutRect, const StringFormat *format)

Żeby nie śmiecić, nie będę wrzucał całego kodu, bo nie ma z nim problemu. Problem jest z tekstem, który chcę wyświetlić, a mianowicie:
jeżeli użyję String tekst = Memo1->Text; a później w funkcji AddString(tekst.c_str(), -1 .......... ) Wszystko jest OK.
natomiast kiedy używam String tekst = Memo1->Lines->Strings[0]; - wtedy na ekranie jest pustka mimo, że funkcja "AddString" zwraca status=OK.
Ma ktoś jakieś pomysły. ???
Wiem, że długość obu ciągów jest różna, różnica dwóch znaków, ale dodawanie "\r", "\n" lub "\r\n" nic nie zmienia ...
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    WindowsMozilla

Re: GDI+ AddString - problem z tekstem

Nowy postprzez Cyfrowy Baron » sobota, 11 listopada 2017, 17:16

Memo1->Lines->Strings[0] oznacza pierwszą linię tekstu z Memo1. Czy ta linia coś zawiera. Najpierw sprawdź czy po takim przypisaniu zmienna tekst coś zawiera:

KOD cpp:     UKRYJ  
String tekst = Memo1->Lines->Strings[0];
ShowMessage(tekst);


Problem nie leży w funkcji AddStrings lecz w przypisaniu wartości do zmiennej tekst.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: GDI+ AddString - problem z tekstem

Nowy postprzez pioro700 » sobota, 11 listopada 2017, 17:47

Cyfrowy Baron napisał(a):Problem nie leży w funkcji AddStrings lecz w przypisaniu wartości do zmiennej tekst.

Tego się domyślam, gdyż kiedy użyję Memo1->Text.SubString(x,x), to też wszystko jest OK, tylko że wszystkie te funkcje zwracają zmienną typu UnicodeString, czyli nie powinno to mieć żadnego znaczenia ... a ma. :roll:
Cyfrowy Baron napisał(a):Czy ta linia coś zawiera. Najpierw sprawdź czy po takim przypisaniu zmienna tekst coś zawiera:

Zanim napisałem, to była to pierwsza rzecz którą sprawdziłem. Co najśmieszniejsze, to to, że nie ma znaczenia czy jest to jedna, czy wiele linii tekstu. :evil:

A na koniec wisienka. Napisałem bardzo durną "przekładankę":

TStringList *lista = new TStringList;
lista->Add(Memo1->Text);
UnicodeString tmp = lista->Strings[0];
delete lista;

użyłem "tmp" w AddSring ... i ..... wyświetla :lol:
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    WindowsMozilla

Re: GDI+ AddString - problem z tekstem

Nowy postprzez Cyfrowy Baron » sobota, 11 listopada 2017, 20:18

Przekombinowane to.

Nie rozumiem dlaczego nie działa z Memo1->Lines->Strings[0]. Cały czas mam wrażenie, że coś mi umyka.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: GDI+ AddString - problem z tekstem

Nowy postprzez pioro700 » sobota, 11 listopada 2017, 21:28

Cyfrowy Baron napisał(a):Przekombinowane to.

Nie powiem ... jestem w tym niezły.
Cyfrowy Baron napisał(a):Nie rozumiem dlaczego nie działa z Memo1->Lines->Strings[0].

Są rzeczy, o których się nawet filozofom nie śniło. .. :o
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    WindowsMozilla

Re: GDI+ AddString - problem z tekstem

Nowy postprzez Cyfrowy Baron » niedziela, 12 listopada 2017, 19:29

pioro700 napisał(a):
Cyfrowy Baron napisał(a):Przekombinowane to.


Przekombinowane, znaczy, że takie rozwiązanie nie jest dobre. Może zamiast Memo1 powinieneś użyć ListBox skoro pobierasz linia , wtedy nie musiałbyś tak kombinować.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: GDI+ AddString - problem z tekstem

Nowy postprzez pioro700 » poniedziałek, 13 listopada 2017, 23:13

Przede wszystkim ogromne dzięki za zainteresowanie.
Cyfrowy Baron napisał(a):takie rozwiązanie nie jest dobre

Doskonale o tym wiem. Tak tylko strzelałem "Ślepakami" na oślep i takie coś wyszło.

Natomiast przez przypadek doprowadziłem do sytuacji, że wyświetlam tekst. A tym przypadkiem było wpisanie
String line = Memo->Lines->Strings[0].w_str();
..
..
Gdiplus::GraphicsPath path;
path.AddString(line.w_str(), .......) i to działa :o
Jestem za cienki, żeby to pojąć. Masz może jakieś wytłumaczenie ??
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    WindowsMozilla

Re: GDI+ AddString - problem z tekstem

Nowy postprzez polymorphism » wtorek, 14 listopada 2017, 11:17

No a tak:
KOD cpp:     UKRYJ  
path.AddString(Memo->Lines->Strings[0].w_str(), .......);

nie działa?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Re: GDI+ AddString - problem z tekstem

Nowy postprzez pioro700 » wtorek, 14 listopada 2017, 15:13

Ano niestety nie ... ale za to
KOD cpp:     UKRYJ  
String linia = ListBox1->Items->Strings[0];
AddString(linia.w_str() .... )
 

już tak, ale
KOD cpp:     UKRYJ  
AddString(ListBox1->Items->Strings[0].w_str() .... )
 

już nie.
Tak w ogóle, to myślałem, że pojmuję, choć w część GDI+ w Builderze, ale szybko się okazało, że poruszam się jak dziecko we mgle.
Teraz mam następną zagwozdkę, a mianowicie Gdiplus::Graphics

Kiedy tworzę obiekt
KOD cpp:     UKRYJ  
HDC hDC = this->Canvas->Handle;
   Gdiplus::Graphics f(hDC);

mogę wtedy rysować, wypełniać, kreślić .... ale nie mogę zmierzyć wielkości ciągu, MeasureString ... nie pokazuje błędu, tylko zwraca RectF(0,0,0,0)
Kiedy zmienię deklarację na:
KOD cpp:     UKRYJ  
Gdiplus::Graphics f(Canvas->Handle);

Otrzymuję właściwe wyniki ...
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    WindowsMozilla

Re: GDI+ AddString - problem z tekstem

Nowy postprzez polymorphism » wtorek, 14 listopada 2017, 19:19

Dziwne...

Dałeś gdzieś na początku aplikacji:
KOD cpp:     UKRYJ  
ULONG gdiplusToken;
Gdiplus::GdiplusStartupInput gdiplusStartupInput;

Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);


I na końcu:
KOD cpp:     UKRYJ  
Gdiplus::GdiplusShutdown(gdiplusToken);

:?:
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Re: GDI+ AddString - problem z tekstem

Nowy postprzez pioro700 » wtorek, 14 listopada 2017, 19:36

Oczywiście. Inaczej zawsze otrzymywałbym "GdiplusNotInitialized" ....
Zaczynam podejrzewać jakieś złośliwe trolle w moim kompie.
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    WindowsMozilla

Re: GDI+ AddString - problem z tekstem

Nowy postprzez Cyfrowy Baron » wtorek, 14 listopada 2017, 22:34

pioro700 napisał(a):Ano niestety nie ... ale za to
KOD cpp:     UKRYJ  
String linia = ListBox1->Items->Strings[0];
AddString(linia.w_str() .... )
 

już tak, ale

A u mnie to nie działa.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: GDI+ AddString - problem z tekstem

Nowy postprzez polymorphism » środa, 15 listopada 2017, 00:57

Fajny ten Builder... :)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Re: GDI+ AddString - problem z tekstem

Nowy postprzez pioro700 » środa, 15 listopada 2017, 08:53

Cyfrowy Baron napisał(a):
pioro700 napisał(a):Ano niestety nie ... ale za to
KOD cpp:     UKRYJ  
String linia = ListBox1->Items->Strings[0];
AddString(linia.w_str() .... )
 

już tak, ale

A u mnie to nie działa.


Właśnie ten kod działa .... może ja umieściłem komentarze w niewłaściwym miejscu.
To co nie działa to (kod poniżej)
KOD cpp:     UKRYJ  
AddString(ListBox1->Items->Strings[0].w_str() .... )
 


polymorphism napisał(a):Fajny ten Builder... :)

Wiele razy myślałem o innym środowisku .... ale chyba za stary jestem ... i za leniwy.
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    WindowsMozilla

Re: GDI+ AddString - problem z tekstem

Nowy postprzez polymorphism » środa, 15 listopada 2017, 11:42

Szczerze mówiąc ciężko mi uwierzyć, żeby inny zapis tego samego może powodować aż takie różnice w działaniu.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

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

cron