| Автор
| Сообщение |
|
|
|
Цитата |
|
Проблема такова: имеется программа на чистом API. Там создано окошко CreateWindowEX(..., 'EDIT','', WS_HSCROLL or WS_VSCROLL or ES_MULTILINE or ES_WANTRETURN or ES_AUTOHSCROLL or ES_AUTOVSCROLL, ...) - т.е. обычный TMemo в VCL. Собственно вопрос: Как туда загрузить текстовый файл из ресурса программы и как вообще грузить текстовые файлы в такие контролы.
Заранее благодарю. |
|
| В начало |
|
 |
|
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
поместить текст - как и в любой другой контрол
SendMessage(edit_handle, WM_SETTEXT, 0,
integer(указатель на строку));
с помощью функции LoadResource получаешь хендл ресурса с текстом, с помощью функции LockResource получаешь тот самый указатель на твою строку _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Я сделал следующий код:
procedure LoadText(WND : HWND; Text : PChar);
var
hResource: THandle;
pData: Pointer;
begin
hResource := LoadResource(hInstance, FindResource(HInstance, Text, 'TEXT'));
try
pData := LockResource(hResource);
if pData <> nil then
begin
SendMessage(WND, WM_SETTEXT, 0, integer(pData));
end;
finally
FreeResource(hResource);
end;
end;
Что получилось:
1. В Edite текст не переносится на следующую строку, т.е. все идет одной линией и видны знаки разделения строк
2. В RichEdite все грузится как надо.
Вопрос: А как убрать глюк с Edit. У меня в свйствах стоит ES_MULTILINE и ES_WANTRETURNS |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Да нет, все работает, как и полагается, как с компонентами, так и напрямую с контролом:
| Код: |
procedure TForm1.Button1Click(Sender: TObject);
var
h, hResource: THandle;
pData: Pointer;
begin
hResource := LoadResource(0, FindResource(0, 'D', RT_RCDATA));
pData := LockResource(hResource);
SendMessage(memo1.Handle, WM_SETTEXT, 0, integer(pdata));
SendMessage(Edit1.Handle, WM_SETTEXT, 0, integer(pdata));
h:=CreateWindow('EDIT','', WS_CHILD or WS_HSCROLL or WS_VSCROLL or
ES_MULTILINE or ES_WANTRETURN or ES_AUTOHSCROLL or ES_AUTOVSCROLL,
10, 10, 200, 200, handle, 0, hinstance, nil);
ShowWindow(h, sw_show);
SendMessage(h, WM_SETTEXT, 0, integer(pdata));
end;
|
Файл ресурсов самый что ни на есть простой:
d rcdata d.txt, в d.txt - любая байда из Блокнота
Возможно, у тебя как-то неправильно перевод строки там выглядит? Или все-таки ты что-то со стилями перепутал _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Я не делаю контрол при помощи команд. Вся эта шняга грузится из диалогового ресурса и тама все эти стили четко прописаны.
Так что это ГЛЮК
Кстати, для компилирования RES файла я использовал как brcc32 так и Restorator. Так что от компилера это не зависит.
Вот так  |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Это не Delphi сглючил, а я . Я сохранил текст на винт из Linux, а тама Unix перевод строк, поэтому EDIT и глючил, а так все нормально грузится. |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
| Цитата: | | Возможно, у тебя как-то неправильно перевод строки там выглядит |
Это ты два месяца проверял?  _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Блин, я сессию сдавал. Не до своей программы было. А потом открыл файл в Word и сохранил. Скомпильнул с brcc32 и получил то, что и хотел.
А сессию я все таки сдал  |
|
| В начало |
|
 |
|