Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Сегодня :

День славянской письменности и культуры


Загрузка файла из ресурса


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Андрей
Гость







СообщениеПн, 10-Ноя-2003 16:12    Заголовок сообщения: Загрузка файла из ресурса
Цитата

Проблема такова: имеется программа на чистом 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
Откуда: Донецк
СообщениеПн, 10-Ноя-2003 23:52 
Цитата

поместить текст - как и в любой другой контрол
SendMessage(edit_handle, WM_SETTEXT, 0,
integer(указатель на строку));
с помощью функции LoadResource получаешь хендл ресурса с текстом, с помощью функции LockResource получаешь тот самый указатель на твою строку

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Андрей
Гость







СообщениеПт, 14-Ноя-2003 11:55 
Цитата

Я сделал следующий код:

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 текст не переносится на следующую строку, т.е. все идет одной линией и видны знаки разделения строк Shocked
2. В RichEdite все грузится как надо.

Вопрос: Идея! А как убрать глюк с Edit. У меня в свйствах стоит ES_MULTILINE и ES_WANTRETURNS
В начало
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеВс, 16-Ноя-2003 0:04 
Цитата

Да нет, все работает, как и полагается, как с компонентами, так и напрямую с контролом:
Код:

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 - любая байда из Блокнота
Возможно, у тебя как-то неправильно перевод строки там выглядит? Или все-таки ты что-то со стилями перепутал

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Андрей
Гость







СообщениеЧт, 20-Ноя-2003 12:23 
Цитата

Я не делаю контрол при помощи команд. Вся эта шняга грузится из диалогового ресурса и тама все эти стили четко прописаны.

Так что это ГЛЮК Wink
Кстати, для компилирования RES файла я использовал как brcc32 так и Restorator. Так что от компилера это не зависит.

Вот так :(
В начало
Андрей
Гость







СообщениеВт, 27-Янв-2004 12:23 
Цитата

Это не Delphi сглючил, а я Скромный . Я сохранил текст на винт из Linux, а тама Unix перевод строк, поэтому EDIT и глючил, а так все нормально грузится.
В начало
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеСр, 28-Янв-2004 0:32 
Цитата

Цитата:
Возможно, у тебя как-то неправильно перевод строки там выглядит

Это ты два месяца проверял? ;)

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Андрей
Гость







СообщениеЧт, 29-Янв-2004 12:44 
Цитата

Блин, я сессию сдавал. Не до своей программы было. А потом открыл файл в Word и сохранил. Скомпильнул с brcc32 и получил то, что и хотел.

А сессию я все таки сдал :)
В начало
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100