Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2011, 17:24   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию ListBox, выход текста за пределы видимости

Вот такая проблема. Как сделать, чтобы текст не выходил за пределы видимости? Ведь перенос строк здесь не выполняется.
_-Re@l-_ вне форума Ответить с цитированием
Старый 20.05.2011, 17:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если не ошибаюсь нужно просто описать события отрисовки OnDrawItem и OnMeasureItem установив стиль lbOwnerDrawVariable
Тогда можно задавать высоту строк Листа и функциями Win API например DrawText с параметром DT_WORDBREAK отрисовывать строки с переносом
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.08.2011, 14:13   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Тема опять актуальна.
И всё-таки, как сделать перенос с помощью этих OnDrawItem, DrawText? Порылся на форуме, в Яндексе, в Гугле - безрезультатно. Хотелось бы увидеть примеры использования.
_-Re@l-_ вне форума Ответить с цитированием
Старый 31.08.2011, 14:51   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно так попробовать, высота текста правда корявым способом определяется да и глянец наводить нужно. В List Box предварительно вставить строки, чтобы пустым не был и не забыть lbOwnerDrawVariable
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ListBox: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure ListBoxDrawItem(Control: TWinControl; Index: Integer; 
        Rect: TRect; State: TOwnerDrawState);
    procedure ListBoxClick(Sender: TObject);
  private
    { Private declarations }
    lPaintBox: TPaintBox;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  lPaintBox:=TPaintBox.Create(Self);
  lPaintBox.Parent:=Self;
  lPaintBox.Left:=0;
  lPaintBox.Top:=0;
  lPaintBox.ClientWidth:=ListBox.ClientWidth;
  lPaintBox.ClientHeight:=ListBox.ClientHeight;
  lPaintBox.Font.Assign(ListBox.Font);
  for i:=0 to ListBox.Items.Count-1 do begin
    ListBox.ItemIndex:=i;
    ListBoxClick(ListBox);
  end;
  ListBox.ItemIndex:=0;
end;

procedure TForm1.ListBoxDrawItem(Control: TWinControl; Index: Integer;
    Rect: TRect; State: TOwnerDrawState);
var s: String;
begin
  s:=ListBox.Items.Strings[Index];
  DrawText(ListBox.Canvas.Handle,PChar(s),Length(s),Rect,DT_WORDBREAK);
end;

procedure TForm1.ListBoxClick(Sender: TObject);
var h: Integer;
    s: String;
    Rect: TRect;
begin
  s:=ListBox.Items.Strings[ListBox.ItemIndex];
  Rect:=lPaintBox.ClientRect;
  h:=DrawText(lPaintBox.Canvas.Handle,PChar(s),Length(s),Rect,DT_WORDBREAK);
  Repaint;
  SendMessage(ListBox.Handle,LB_SetItemHeight,ListBox.ItemIndex,h);
end;

end.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 31.08.2011 в 16:16.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ выход за пределы строки (char) Alex11223 Помощь студентам 4 20.04.2011 20:27
Выравнивание текста в ListBox Clem Microsoft Office Excel 2 22.03.2011 09:49
Поиск текста в Listbox-е Молоток Компоненты Delphi 4 16.03.2011 12:45
C++ - выход за пределы массива kefir Помощь студентам 5 12.06.2010 14:09
Как определить выход курсора за пределы объекта Image Дамир Общие вопросы Delphi 7 29.03.2009 21:59