Ĺadny brzuch
Witam,
czy jest jakiś sposób aby długość pola w TStatusBar ustawiała się automatycznie do podanego tekstu?
Witam,
czy jest jakiś sposób aby długość pola w TStatusBar ustawiała się automatycznie do podanego tekstu?
Jeżeli nie ma takiej właściwości to zrób komponent i sprawdzaj długość tekstu (w TCanvas) i odpowiednio ustawiaj szerokość.
// @Down: nie wykracza ;). Może nie zrobisz tego w parę minut ale jak się zaprzesz to na pewno dasz radę (ewentualnie z pomocą google ;)).
Użytkownik Ali240 edytował ten post 26 wrzesień 2007, 19:14
ojoj xD
to chyba wykracza ponad moje mozliwości. Ale spróbuję ;)
Dzięki.
Jeżeli nie ma takiej właściwości to zrób komponent i sprawdzaj długość tekstu (w TCanvas) i odpowiednio ustawiaj szerokość.
// @Down: nie wykracza ;). Może nie zrobisz tego w parę minut ale jak się zaprzesz to na pewno dasz radę (ewentualnie z pomocą google ;)).
hmmm to nie jest najlepszy pomysł. Policz ilosc liter w stringu i w zależności od ilości liter zrób długość paska.
hmmm to nie jest najlepszy pomysł. Policz ilosc liter w stringu i w zależności od ilości liter zrób długość paska.
A można wiedzieć co w tym pomyśle nie tak (pewnie trzeba by dodać parę px bo textwidth zwraca trochę mniej)? Bo akurat twój sposób sprawdziłby się tylko przy czcionkach monospace...
A można wiedzieć co w tym pomyśle nie tak (pewnie trzeba by dodać parę px bo textwidth zwraca trochę mniej)? Bo akurat twój sposób sprawdziłby się tylko przy czcionkach monospace...
Wcale by się nie sprwdził. Wystarczy, że Windows ma inną wielkość czcionki niż domyślną to nawet monospace nie pomoże.
@statjacek: a czemu to jest zły pomysł? Moim zdaniem jest to świetny sposób - zawsze z niego korzystam i jestem zadowolony ze sposobu działania. Wystarczy coś a'la StatusBar1.Panel[0].Width:= Statusbar.Canvas.TextWidth('jakiś tekst') + 10; i masz gotowy elo pro sposób (lub coś w tym stylu - nie chce mi się delphi odpalać).
Wcale by się nie sprwdził. Wystarczy, że Windows ma inną wielkość czcionki niż domyślną to nawet monospace nie pomoże.
@statjacek: a czemu to jest zły pomysł? Moim zdaniem jest to świetny sposób - zawsze z niego korzystam i jestem zadowolony ze sposobu działania. Wystarczy coś a'la StatusBar1.Panel[0].Width:= Statusbar.Canvas.TextWidth('jakiś tekst') + 10; i masz gotowy elo pro sposób (lub coś w tym stylu - nie chce mi się delphi odpalać).
Oczywiscie, że sie sprawdzi i zaraz powiem czemu:
1) Liczysz ilosc liter w łancuchu: .np. I:=length(Edit1.text);
2) Na listwie pokazujesz graficznie ile jeszcze User może wpisac znaków.
Natomiast jeśli malujesz text to istotnie twoj sposob jest ok.
Oczywiscie, że sie sprawdzi i zaraz powiem czemu:
1) Liczysz ilosc liter w łancuchu: .np. I:=length(Edit1.text);
2) Na listwie pokazujesz graficznie ile jeszcze User może wpisac znaków.
Nie rozumiem. Jak dla mnie to nie będzie działać. Przecież faktyczna długość tekstu nie jest równa ilości znaków w łańcuchu.
Np. mam łańcuch 'abc'
Więc z tego co rozumiem to chcesz zrobić StatusBar.Panels[0].Width:= Length('abc'); //przecież to ustawi szerokość na 3px
Natomiast mój sposób pokaże faktyczną, wymaganą długość panelu czyli w tym wypadku ok. 20px. I wcale nic nie muszę rysować
StatusBar.Panels[0].Width:= Statusbar.Canvas.TextWidth('abc'); StatusBar.Panels[0].Text:= 'abc';
Chyba, że Twój sposób ma jakoś inaczej działać. W każdym bądź razie nie rozumiem jak z treści Twojego postu - proszę o dokładniejsze wyjaśnienie wraz z kodem (chyba, że naprawdę jasno wyjaśnisz ideę to wtedy bez kodu).
Nie rozumiem. Jak dla mnie to nie będzie działać. Przecież faktyczna długość tekstu nie jest równa ilości znaków w łańcuchu.
Np. mam łańcuch 'abc'
Więc z tego co rozumiem to chcesz zrobić StatusBar.Panels[0].Width:= Length('abc'); //przecież to ustawi szerokość na 3px
Natomiast mój sposób pokaże faktyczną, wymaganą długość panelu czyli w tym wypadku ok. 20px. I wcale nic nie muszę rysować
StatusBar.Panels[0].Width:= Statusbar.Canvas.TextWidth('abc'); StatusBar.Panels[0].Text:= 'abc';
Chyba, że Twój sposób ma jakoś inaczej działać. W każdym bądź razie nie rozumiem jak z treści Twojego postu - proszę o dokładniejsze wyjaśnienie wraz z kodem (chyba, że naprawdę jasno wyjaśnisz ideę to wtedy bez kodu).
Pomyślalem sobie, że Autor postu robi ograniczenie w ilości wpisanych znaków np. do Edita. Ja czesto robie takie ograniczenie. Dodatkowo założyłem, że chce przedstawić graficznie w postaci paska ile jeszcze znaków może tam wprowadzić. Naturalnie, że przy zmianie czcionki tekst będzie dłuższy. Pisząc ten post niezakładałem, że User bedzie miał możliwość zmiany czcionki.
Miałem dokładnie to samo na myśli co i ty. Jeśli autor postu zakłada wpisywanie tak krótkiego tekstu na 3 znaki to ja bym zrobił coś takiego:
I:=Length(edit1.Text) + 10; StatusBar.Panels[0].Width:= I;
tekst ma być sieżką, więc 5 znaków raczej nie będzie miał.
Dzięki wszystkim za pomoc.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
czy jest jakiś sposób aby długość pola w TStatusBar ustawiała się automatycznie do podanego tekstu?
Witam,
czy jest jakiś sposób aby długość pola w TStatusBar ustawiała się automatycznie do podanego tekstu?
Jeżeli nie ma takiej właściwości to zrób komponent i sprawdzaj długość tekstu (w TCanvas) i odpowiednio ustawiaj szerokość.
// @Down: nie wykracza ;). Może nie zrobisz tego w parę minut ale jak się zaprzesz to na pewno dasz radę (ewentualnie z pomocą google ;)).
Użytkownik Ali240 edytował ten post 26 wrzesień 2007, 19:14
ojoj xD
to chyba wykracza ponad moje mozliwości. Ale spróbuję ;)
Dzięki.
Jeżeli nie ma takiej właściwości to zrób komponent i sprawdzaj długość tekstu (w TCanvas) i odpowiednio ustawiaj szerokość.
// @Down: nie wykracza ;). Może nie zrobisz tego w parę minut ale jak się zaprzesz to na pewno dasz radę (ewentualnie z pomocą google ;)).
hmmm to nie jest najlepszy pomysł. Policz ilosc liter w stringu i w zależności od ilości liter zrób długość paska.
hmmm to nie jest najlepszy pomysł. Policz ilosc liter w stringu i w zależności od ilości liter zrób długość paska.
A można wiedzieć co w tym pomyśle nie tak (pewnie trzeba by dodać parę px bo textwidth zwraca trochę mniej)? Bo akurat twój sposób sprawdziłby się tylko przy czcionkach monospace...
A można wiedzieć co w tym pomyśle nie tak (pewnie trzeba by dodać parę px bo textwidth zwraca trochę mniej)? Bo akurat twój sposób sprawdziłby się tylko przy czcionkach monospace...
Wcale by się nie sprwdził. Wystarczy, że Windows ma inną wielkość czcionki niż domyślną to nawet monospace nie pomoże.
@statjacek: a czemu to jest zły pomysł? Moim zdaniem jest to świetny sposób - zawsze z niego korzystam i jestem zadowolony ze sposobu działania. Wystarczy coś a'la StatusBar1.Panel[0].Width:= Statusbar.Canvas.TextWidth('jakiś tekst') + 10; i masz gotowy elo pro sposób (lub coś w tym stylu - nie chce mi się delphi odpalać).
Wcale by się nie sprwdził. Wystarczy, że Windows ma inną wielkość czcionki niż domyślną to nawet monospace nie pomoże.
@statjacek: a czemu to jest zły pomysł? Moim zdaniem jest to świetny sposób - zawsze z niego korzystam i jestem zadowolony ze sposobu działania. Wystarczy coś a'la StatusBar1.Panel[0].Width:= Statusbar.Canvas.TextWidth('jakiś tekst') + 10; i masz gotowy elo pro sposób (lub coś w tym stylu - nie chce mi się delphi odpalać).
Oczywiscie, że sie sprawdzi i zaraz powiem czemu:
1) Liczysz ilosc liter w łancuchu: .np. I:=length(Edit1.text);
2) Na listwie pokazujesz graficznie ile jeszcze User może wpisac znaków.
Natomiast jeśli malujesz text to istotnie twoj sposob jest ok.
Oczywiscie, że sie sprawdzi i zaraz powiem czemu:
1) Liczysz ilosc liter w łancuchu: .np. I:=length(Edit1.text);
2) Na listwie pokazujesz graficznie ile jeszcze User może wpisac znaków.
Nie rozumiem. Jak dla mnie to nie będzie działać. Przecież faktyczna długość tekstu nie jest równa ilości znaków w łańcuchu.
Np. mam łańcuch 'abc'
Więc z tego co rozumiem to chcesz zrobić StatusBar.Panels[0].Width:= Length('abc'); //przecież to ustawi szerokość na 3px
Natomiast mój sposób pokaże faktyczną, wymaganą długość panelu czyli w tym wypadku ok. 20px. I wcale nic nie muszę rysować
StatusBar.Panels[0].Width:= Statusbar.Canvas.TextWidth('abc'); StatusBar.Panels[0].Text:= 'abc';
Chyba, że Twój sposób ma jakoś inaczej działać. W każdym bądź razie nie rozumiem jak z treści Twojego postu - proszę o dokładniejsze wyjaśnienie wraz z kodem (chyba, że naprawdę jasno wyjaśnisz ideę to wtedy bez kodu).
Nie rozumiem. Jak dla mnie to nie będzie działać. Przecież faktyczna długość tekstu nie jest równa ilości znaków w łańcuchu.
Np. mam łańcuch 'abc'
Więc z tego co rozumiem to chcesz zrobić StatusBar.Panels[0].Width:= Length('abc'); //przecież to ustawi szerokość na 3px
Natomiast mój sposób pokaże faktyczną, wymaganą długość panelu czyli w tym wypadku ok. 20px. I wcale nic nie muszę rysować
StatusBar.Panels[0].Width:= Statusbar.Canvas.TextWidth('abc'); StatusBar.Panels[0].Text:= 'abc';
Chyba, że Twój sposób ma jakoś inaczej działać. W każdym bądź razie nie rozumiem jak z treści Twojego postu - proszę o dokładniejsze wyjaśnienie wraz z kodem (chyba, że naprawdę jasno wyjaśnisz ideę to wtedy bez kodu).
Pomyślalem sobie, że Autor postu robi ograniczenie w ilości wpisanych znaków np. do Edita. Ja czesto robie takie ograniczenie. Dodatkowo założyłem, że chce przedstawić graficznie w postaci paska ile jeszcze znaków może tam wprowadzić. Naturalnie, że przy zmianie czcionki tekst będzie dłuższy. Pisząc ten post niezakładałem, że User bedzie miał możliwość zmiany czcionki.
Miałem dokładnie to samo na myśli co i ty. Jeśli autor postu zakłada wpisywanie tak krótkiego tekstu na 3 znaki to ja bym zrobił coś takiego:
I:=Length(edit1.Text) + 10; StatusBar.Panels[0].Width:= I;
tekst ma być sieżką, więc 5 znaków raczej nie będzie miał.
Dzięki wszystkim za pomoc.