Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Организация ввода/вывода, Большого кол-ва текста 
:(
    Опции темы
Zero
Дата 15.3.2005, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Вообщем у меня есть база данных, в которой таблица с полем Memo, и нужно вывести текст, но так чтобы его было нельзя редактировать, и смотрелся чтобы он как картинка.
Ну как у нас посты на форуме.
Вообщем нужны только советы, как сделать лучше.
Добавлено @ 00:24
Впринципе пока хватило мыслей, выводить всё в Memo, с установкой сво-ва ReadOnly + BirderStyle=bsNone. Но тут продолжает мигать курсор, бесящий меня... smile
PM MAIL ICQ   Вверх
Vit
Дата 15.3.2005, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Компонент называется Lable


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Zero
Дата 15.3.2005, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Vit и какже ты интересно выведеш в него много текста, да чтобы он перескакивал на следующую строку где надо? smile
Добавлено @ 01:20
Впринципе Memo наверно подходит, только скажите мне, как сделать чтобы курсор в нём не мигал, или ещё лучше чтобы компонент не мог получать вообще фокус ввода никогда.
PM MAIL ICQ   Вверх
Alex
Дата 15.3.2005, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Zero, Vit как раз сделает без проблем.

Поставит AutoSize = False, а WordWrap = True, растянет label на столько сколько хочет и загрузит в него текст.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Georg4
Дата 15.3.2005, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: 0
Всего: 10



Странно, а чего он у тебя в мемо мигает???
Ну вообще можно сделать так, чтобы просто компонента другая была активной при старте и при клике на этот лейбл другая компонента становилась активной, тогда курсора точно там не будет (но и не выделишь ничего)


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Zero
Дата 15.3.2005, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Alex а точно + плюс ещё динамически изменять ширену ты забыл сказать...
Вообщем спасибо вам с Витом большое, вопрос закрыт. smile
PM MAIL ICQ   Вверх
Петрович
Дата 15.3.2005, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



А на будущее, у мемо как и у большинства компонент есть такое свойство Enable. Так вот, если оно False, то такой компонент не сможет получть фокус ввода, а соответственно, и курсора там никогда не будет, следовательно и мигать будет некому smile.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Alex
Дата 15.3.2005, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата
А на будущее, у мемо как и у большинства компонент есть такое свойство Enable. Так вот, если оно False, то такой компонент не сможет получть фокус ввода, а соответственно, и курсора там никогда не будет, следовательно и мигать будет некому .

Текст только серым будет, а так все нормально smile


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
ДЫМ
Дата 15.3.2005, 03:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



Попробуй HideCaret(Memo1.Handle);
PM MAIL WWW   Вверх
ДЫМ
Дата 17.3.2005, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



Не раз встречал вопрос как скрыть каретку в элементах редактирования.


В DRKB советуют для этого создать потомка с соответствующими обработчиками, в которых вызывать HideCaret(Handle)
А вот как это можно сделать не создавая потомка.


Надо перехватить оконную процедуру элемента редактирования (edit, Memo и т. д.).


Код

...
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    OldEditsWindowProc: Pointer;
  end;

...
implementation 

// новая оконная процедура
function NewWindowProc(WindowHandle: hWnd; TheMessage: LongInt; ParamW: LongInt;  ParamL: LongInt): LongInt stdcall;
begin
   NewWindowProc := CallWindowProc(Form1.OldEditsWindowProc, WindowHandle,
   TheMessage, ParamW, ParamL);
   HideCaret(WindowHandle);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 OldEditsWindowProc := Pointer(SetWindowLong(Memo1.Handle, GWL_WNDPROC,
 LongInt(@NewWindowProc)));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 // необязательно
 SetWindowLong(Memo1.Handle, GWL_WNDPROC, LongInt(OldEditsWindowProc));
end;




PM MAIL WWW   Вверх
Zero
Дата 17.3.2005, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



ДЫМ а чтобы не мучится можно сделать так: smile
Цитата(Alex @ 15.3.2005, 01:37)
AutoSize = False, а WordWrap = True


Добавлено @ 18:13
Ну всмысле для Label
PM MAIL ICQ   Вверх
ДЫМ
Дата 18.3.2005, 03:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



Цитата
Ну всмысле для Label


Во-первых, в Label не выведешь форматированный цветной текскт, во-вторых нельзя выделить текст мышью и сохранить в буфер.
PM MAIL WWW   Вверх
Zero
Дата 18.3.2005, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата
нельзя выделить текст мышью и сохранить в буфер
Хотя наверное ты прав, лучше подайдёт всётаки Memo, хотя конечно помучится побольше придётся, но ничего страшного. smile
PM MAIL ICQ   Вверх
Alex
Дата 18.3.2005, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата
в Label не выведешь форматированный цветной текскт

Интересно, а в memo ты как его выводить собрался?


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alex
Дата 18.3.2005, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162





--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Bacardi
Дата 18.3.2005, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 8.3.2005
Где: Москва

Репутация: нет
Всего: 1



Народ, а почему ж тут никто ничего не сказал про StaticText?! Это тот же мемо, только как лейбл (многострочный)... помойму он никак лучше подходит тут. или я не прав? smile
--------------------
Необычная смесь. Болтать, но не мешать.http://www.livejournal.com/users/__bacardi__/
PM MAIL WWW ICQ   Вверх
Alex
Дата 18.3.2005, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Bacardi @ 18.3.2005, 23:29)
Народ, а почему ж тут никто ничего не сказал про StaticText?! Это тот же мемо, только как лейбл (многострочный)... помойму он никак лучше подходит тут. или я не прав? 

Прав.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Bacardi
Дата 18.3.2005, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 8.3.2005
Где: Москва

Репутация: нет
Всего: 1



smile гыыы
--------------------
Необычная смесь. Болтать, но не мешать.http://www.livejournal.com/users/__bacardi__/
PM MAIL WWW ICQ   Вверх
Zero
Дата 19.3.2005, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Alex @ 18.3.2005, 23:52)
Прав.

Alex а как тогда выделять текст из него и копировать в буфер обмена? Я прочитал в Фаронове про него, там написано что он одним из отличий имеет в свой-ве BorderStyle значение sbsSunken, делает рамку а все остальные сво-ва и методы типа совпадаёт с Label, но в реальности я ненахожу даже свойства WordWrap.
И почему все привязались к Label-подобным компонентам, чем всем Memo не нарвится? smile
PM MAIL ICQ   Вверх
Alex
Дата 19.3.2005, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Zero @ 19.3.2005, 01:19)
Alex а как тогда выделять текст из него и копировать в буфер обмена?

Никак. Изначально ты не ставил задачи копировать текст в буффер.
Цитата(Zero @ 19.3.2005, 01:19)
в реальности я ненахожу даже свойства WordWrap

Можно считать, что оно установлено в True.

PS:
Что ты переживаешь тебе подойдет пример Дым'а с мемо.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Zero
Дата 19.3.2005, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Alex @ 19.3.2005, 01:28)
Никак. Изначально ты не ставил задачи копировать текст в буффер.
Дак я же говорил что я делаю курсач на тему "Создание форума"
Ну а тут хотел рассмотреть всякие предложения, и выбрать лучшее...
Цитата(Alex @ 19.3.2005, 01:28)
Можно считать, что оно установлено в True.

Не работает, уже проверял и проверил ещё раз, вот пример посмотри в прикреплёном файле.
Цитата(Alex @ 19.3.2005, 01:28)
Что ты переживаешь тебе подойдет пример Дым'а с мемо.
smile Да я и не переживаю, просто я ещё не дошёл до создания Memo, пока только профиль оформляю и исправляю некотрые глюки, поэтому пока ещё не поздно изменить решение.
Цитата(Bacardi @ 18.3.2005, 23:29)
Это тот же мемо,

Цитата(Alex @ 19.3.2005, 01:28)
Цитата (Zero @ 19.3.2005, 01:19)
Alex а как тогда выделять текст из него и копировать в буфер обмена?

Никак.

Тогда не тотже. smile

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  Пример.zip
PM MAIL ICQ   Вверх
Zero
Дата 19.3.2005, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Эх.. Рано я обрадывался, на счёт снятися указателя с Memo. В реальном моём приложении, я Memo, создаю динамически. И там не работает код:
Код

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    OldEditsWindowProc: Pointer;
  end;

var
  Form1: TForm1;
  m:TMemo;

implementation

{$R *.dfm}

function NewWindowProc(WindowHandle: hWnd; TheMessage: LongInt; ParamW: LongInt;  ParamL: LongInt): LongInt stdcall;    
begin
   NewWindowProc := CallWindowProc(Form1.OldEditsWindowProc, WindowHandle,
   TheMessage, ParamW, ParamL);    
   HideCaret(WindowHandle);    
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldEditsWindowProc := Pointer(SetWindowLong(m.Handle , GWL_WNDPROC, LongInt(@NewWindowProc)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  m:=TMemo.Create(form1);
  m.Parent:=form1;
end;

PM MAIL ICQ   Вверх
Bacardi
Дата 20.3.2005, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 8.3.2005
Где: Москва

Репутация: нет
Всего: 1



не, слух... ты хочешь копировать содержимое, но не хочешь указателя в мемо... как одно без другого?! выбирай или - или...
и неужели не работает Memo1.Enabled:=False?! может где повесишь кнопку... или popupmenu с пунктом "копировать содержимое в буффер" или что-то в этом плане? smile
--------------------
Необычная смесь. Болтать, но не мешать.http://www.livejournal.com/users/__bacardi__/
PM MAIL WWW ICQ   Вверх
Zero
Дата 20.3.2005, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Bacardi @ 20.3.2005, 00:55)
не, слух... ты хочешь копировать содержимое, но не хочешь указателя в мемо... как одно без другого?! выбирай или - или...

Я не хочу выбирать, мне нужно всё... и это возможно, покрайней мере статически работает, а при динамическом создании глючит.
Цитата(Bacardi @ 20.3.2005, 00:55)
и неужели не работает Memo1.Enabled:=False?

Нет. Серый текст+нельзя выделять, тогда уж лучше будет Label.
Цитата(Bacardi @ 20.3.2005, 00:55)
или popupmenu с пунктом "копировать содержимое в буффер" или что-то в этом плане?

<CTRL>+<C>
PM MAIL ICQ   Вверх
ДЫМ
Дата 20.3.2005, 02:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



Цитата
Интересно, а в memo ты как его выводить собрался?


Не в Memo, конечно, я имел в виду RichEdit.

Цитата
Эх.. Рано я обрадывался, на счёт снятися указателя с Memo. В реальном моём приложении, я Memo, создаю динамически. И там не работает код:


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

OldEditsWindowProc := Pointer(SetWindowLong(m.Handle , GWL_WNDPROC, LongInt(@NewWindowProc))) 
из обработчика TForm1.FormCreate в то место, где ты содаешь контрол.

Код будет выглядеть так:

Код

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    OldEditsWindowProc: Pointer;
  end;

var
  Form1: TForm1;
  m:TMemo;
implementation

{$R *.dfm}
function NewWindowProc(WindowHandle: hWnd; TheMessage: LongInt; ParamW: LongInt;  ParamL: LongInt): LongInt stdcall;
begin
   NewWindowProc := CallWindowProc(Form1.OldEditsWindowProc, WindowHandle,
   TheMessage, ParamW, ParamL);
   HideCaret(WindowHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 m:=TMemo.Create(Form1);
 m.Parent:=Form1;
 // вот сюда
 OldEditsWindowProc := Pointer(SetWindowLong(m.Handle , GWL_WNDPROC, LongInt(@NewWindowProc)));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
// OldEditsWindowProc := Pointer(SetWindowLong(m.Handle , GWL_WNDPROC, LongInt(@NewWindowProc)));
end;


А вообще, зачем ты создаешь объекты динамически? Экономишь память?

Я всегда в таких случаях кидаю Memo на форму, устанавливаю минимальные размеры и отодвигаю куда-нибудь в уголок, чтобы не мешался, ставлю Visible:=False, а в нужном месте программы нужно лишь передвинуть Memo куда надо, установить нужные размеры и Visible:=True.

Если позволишь, несколько советов. Как я понял ты делаешь что-то вроде форума и хочешь, чтобы все выглядело соответственно (похожим на HTML-страницу в броузере). Вот некоторые говорят - зачем скрывать курсор? А вы видели мигающий курсор на HTML-странице (кроме полей ввода)? Тем не менее на ней можно выделить текст.

Идеальным решением для твоей задачи было бы использование TWebBrowser, но раз ты не хочешь разбираться с HTML-кодом, то бросай Memo и используй RichEdit. Тогда ты сможешь вывести красивый текст, если напряжешься - то и таблицы, если же использовать RxRichEdit, можно также вставить картинки, например аватары или смайлы (в DRKB написано как это сделать). Причем, в переход с Memo на RichEdit не вызовет никакаих трудностей (по крайней мере курсор скрывается тем же способом).

Желаю удачи.



Это сообщение отредактировал(а) ДЫМ - 20.3.2005, 03:11
PM MAIL WWW   Вверх
Zero
Дата 20.3.2005, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Блин, опять я не всё сказал, насамом деле я их создаю в некотрос кол-ве, и там работает только одна, остальные глючат. И при выходе из программы тоже глюк выдаётся. smile
Код

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    OldEditsWindowProc: Pointer;
  end;

var
  Form1: TForm1;
  m:array of TMemo;
  i:integer;

implementation

{$R *.dfm}

function NewWindowProc(WindowHandle: hWnd; TheMessage: LongInt; ParamW: LongInt;  ParamL: LongInt): LongInt stdcall;
begin
   NewWindowProc := CallWindowProc(Form1.OldEditsWindowProc, WindowHandle,
   TheMessage, ParamW, ParamL);
   HideCaret(WindowHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetLength(m,0);
  SetLength(m,StrToInt(edit1.Text));
  for i:=0 to StrToInt(edit1.Text)-1 do
    begin
      m[i]:=TMemo.Create(form1);
      with m[i] do
        begin
          parent:=form1;
          OldEditsWindowProc := Pointer(SetWindowLong(m[i].Handle , GWL_WNDPROC, LongInt(@NewWindowProc)));
          left:=i*200
        end;
    end;
end; 

Добавлено @ 10:27
Цитата
А вообще, зачем ты создаешь объекты динамически? Экономишь память?

Просто их кол-во заранее не известно. Ну т.е. это содержимое постов.
Цитата
используй RichEdit. Тогда ты сможешь вывести красивый текст

Можно конечно и RichEdit, но там гемора больше... а по скольку у меня цель ─ научится работать с БД на данный момент а не Delphi, то и Memo пойдёт.
PM MAIL ICQ   Вверх
ДЫМ
Дата 21.3.2005, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



Видимо для каждого контрола нужна "персональная" оконная процедура...

Ну ничего, прорвемся! Делать нечего - воспользуемся советом из DRKB и создадим потомка TMemo с соответствующими обработчиками.

Код

unit Unit1;

interface

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

type

  TMyMemo=class (TMemo)
   private
    procedure WMPaint(var Msg: TMessage); message WM_Paint;
    procedure WMSetFocus(var Msg: TMessage); message WM_SetFocus;
    procedure WMNCHitTest(var Msg: TMessage); message WM_NCHitTest;
  end;


  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  m:array of TMyMemo;

implementation

{$R *.dfm}

procedure TMyMemo.WMPaint(var Msg: TMessage);
begin
 inherited;
 HideCaret(Handle);
end;
procedure TMyMemo.WMSetFocus(var Msg: TMessage);
begin
 inherited;
 HideCaret(Handle);
end;
procedure TMyMemo.WMNCHitTest(var Msg: TMessage);
begin
 inherited;
 HideCaret(Handle);
end;


procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin

  SetLength(m,0);
  SetLength(m,StrToInt(edit1.Text));

  for i:=0 to StrToInt(edit1.Text)-1 do
    begin
      m[i]:=TMyMemo.Create(form1);
      with m[i] do
        begin
          parent:=form1;
          left:=i*200
        end;
    end;
end;

end.

Слушай, а зачем для каждого поста создавать Memo, не проще ли их поместить в одно окно?
PM MAIL WWW   Вверх
Bacardi
Дата 22.3.2005, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 8.3.2005
Где: Москва

Репутация: нет
Всего: 1



народ, а можно вас попросить вставлять в исходники комментарии? smile
--------------------
Необычная смесь. Болтать, но не мешать.http://www.livejournal.com/users/__bacardi__/
PM MAIL WWW ICQ   Вверх
Zero
Дата 22.3.2005, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Спасибо большое ДЫМ, очень помог... smile Я уже и ненадеялся получить ответ.
Цитата(Bacardi @ 22.3.2005, 01:21)
народ, а можно вас попросить вставлять в исходники комментарии?
Да тут смысл в том, что из старого имеющегося класса TMemo, получен потомок "другой мемо"
Цитата
зачем для каждого поста создавать Memo, не проще ли их поместить в одно окно?
Всмысле, посты у меня и находятся в одном окне, в компоненте скролбох, на панельках, которые тоже динамически создаются, а на этих панельках куча других элементов, где всё создаётся динамически. А мемы их полюбому на каждой панельки по одной штуке надо создавать.
PM MAIL ICQ   Вверх
Bacardi
Дата 22.3.2005, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 8.3.2005
Где: Москва

Репутация: нет
Всего: 1



smile ё моё!!! сказал ты про панельки и я тут же вспомнил клевый компонент, организующий вывод инфы из БД!!! DBCtrlGrid! Таблица из панелей. Кидаешь на панельки ДБлэйблс, ДБмемо, все, что тебе нужно для одного поста, ну и потом само создается динамически и не надо ничего лишнего придумывать!

А еще момент... может тебе попробывать для 1 поста использовать РичЭдит и пихать туда отформатированные уже заголовки, темы, текст, ссылки и еще чего... допустим...

Это сообщение отредактировал(а) Bacardi - 22.3.2005, 09:24
--------------------
Необычная смесь. Болтать, но не мешать.http://www.livejournal.com/users/__bacardi__/
PM MAIL WWW ICQ   Вверх
Zero
Дата 22.3.2005, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Bacardi @ 22.3.2005, 09:23)
вспомнил клевый компонент, организующий вывод инфы из БД!!! DBCtrlGrid!
Да компонент действительно клёвый, но имеет недостаток: например у него размер всех панелек одинаковый, т.е. один чел напишет одну строку, а другой 1000 строк, а займут оба поста на 2000 строк, а при прибавлении каждого последующего ─ будет Max из какого-либо поста умноженое на кол-во постов ─ выводится строк.
Да и вообще я уже всё это сделал, переделывать не имеет смысла.
PM MAIL ICQ   Вверх
Bacardi
Дата 22.3.2005, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 8.3.2005
Где: Москва

Репутация: нет
Всего: 1



я полностью солидарен с тобой! smile
--------------------
Необычная смесь. Болтать, но не мешать.http://www.livejournal.com/users/__bacardi__/
PM MAIL WWW ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0777 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.