Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];

Вниз

Есть ли в ListBox е полоса прокрутки   Найти похожие ветки 

 
3APA3A   (2003-09-19 00:13) [0]

Не вертикальная, а горизонтальная, то есть если строка целиком не умещается....


 
Andy BitOff   (2003-09-19 00:24) [1]

Есть.


 
Andy BitOff   (2003-09-19 00:36) [2]

http://delphimaster.net/view/11-1042971278/


 
3APA3A   (2003-09-19 01:55) [3]

Полоса появляется, но все равно, более длинные строки не до конца... Можно конечно поставить какое-нибудь заведомо большое число, но
1) Его просто нет ( могут быть строки любой длины)
2) Некрасиво это...

Код такой
j:=0;
for i:=0 to Self.ListBox1.Count-1 do
if ListBox1.Canvas.TextWidth(Self.ListBox1.Items[i]+"x")>j
then j:=ListBox1.Canvas.TextWidth(Self.ListBox1.Items[i]+"x");
SendMessage(ListBox1.Handle,LB_SETHORIZONTALEXTENT,j,0);

Попробуйте сделать сами, на разных строках, достаточно большой длины...


 
Andy BitOff   (2003-09-19 02:13) [4]

Смотря какой шрифт использовать. Если Courier, то там все символы одной ширины, но в основном это не так. Попробуй использовать в своём коде букву "w" она самая длиная.


 
Andy BitOff   (2003-09-19 02:23) [5]

Вот рабочий пример:
begin
LongestLength := 0; //типа integer
LongestString := ""; //типа string
for i := 0 to Listbox1.Items.Count - 1 do
begin
if Length(Listbox1.Items[i]) > LongestLength then
begin
LongestString := Listbox1.Items[i];
LongestLength := Length(Listbox1.Items[i]);
end;
end;
PixelLength := Listbox1.Canvas.TextWidth(LongestString);
PixelLength := PixelLength + Listbox1.Canvas.TextWidth("W");
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, PixelLength, 0);
end;


 
3APA3A   (2003-09-19 03:45) [6]

Шрифт стоит Arial
Прежде чем копировать пример, следовало бы убедится в его работоспособноости... Попробуй добавлять список файлов в ListBox
( у меня просто стоит ScanDirectory - у всех файлов разные имена и символы в имени, достаточно хорошая иллюстрация).

я выкрутился просто тем, что
PixelLength=Round(...Canvas.TextWidth(String)*1.2);


 
Andy BitOff   (2003-09-19 04:03) [7]

Пример 100% рабочий!!!!!!!!!!!!!
На проверь:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
LongestLength: Integer;
LongestString: String;
PixelLength: Integer;
i: Integer;
begin
Listbox1.Items.Add("Line 1");
Listbox1.Items.Add("Line 2 A very long string that is past the size of the listbox");
Listbox1.Items.Add("Line 3");
Listbox1.Items.Add("Line 4");
Listbox1.Items.Add("Line 5");
Listbox1.Items.Add("Line 6");

if Listbox1.Items.Count > 1 then
begin
LongestLength := 0;
LongestString := "";

for i := 0 to Listbox1.Items.Count - 1 do
begin
if Length(Listbox1.Items[i]) > LongestLength then
begin
LongestString := Listbox1.Items[i];
LongestLength := Length(Listbox1.Items[i]);
end;
end;
PixelLength := Listbox1.Canvas.TextWidth(LongestString);
PixelLength := PixelLength + Listbox1.Canvas.TextWidth("W");
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT,
PixelLength, 0);
end;
end;

end.


 
3APA3A   (2003-09-19 04:14) [8]

Да, верно... рабочий...
Странно... но когда у меня динамически добавляются строки
самые длинные получаются тем больше обрезаны, чем больше их длина... Даже и не знаю...


 
Andy BitOff   (2003-09-19 04:27) [9]

А ты как, сначала список забиваешь, потом полосу ставишь?


 
3APA3A   (2003-09-19 14:02) [10]

Да... сначала забиваю, потом весь его пробегаю, вычисляю max длину и ставлю... Может всё дело в этом?..


 
Amoeba   (2003-09-19 15:08) [11]

В книжке Тексейры и Пачеко есть исходники нужного тебе компонента. Электронная версия книги есть где-то в сети.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
14-4116
Triny
2003-09-12 17:40
2003.10.02
Исходники программ


7-4142
Костя
2003-07-03 08:29
2003.10.02
Как насильно закрыть файл


14-4105
Knight
2003-09-13 21:06
2003.10.02
& n b s p ; и другие...


3-3710
Gorn
2003-09-14 17:43
2003.10.02
Как удалить выделенные записи?


3-3799
mfender
2003-09-11 01:10
2003.10.02
Как dataset сделать активным?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский