Member
Статус: Не в сети Регистрация: 23.12.2004 Откуда: Беларусь, Минск
Значицца учу ОпенГЛ по книге Краснова. Правда без исходников примеров, поэтому "взять и посмотреть" не могу. Есть пара примеров Jan Horn - с водичкой и капельками...
Так вот. Сделал кубик...
1. Он почему-то не освещается светом...
2. Почему-то не идентивицируется переменная типа glUnit - чтоб текстурки использовать. Сравнивал с прогой Яна Хорна - у него ничего необычного в юзесах не прописано, но при этом glUnit не вызывает проблем. В чём дело?
Вот текст (правда не совсем кубик - всего 3 видимые грани
Код:
H:=GetDC(Panel1.Handle); //if H<>0 then showMessage('success'); SetDCPixelFormat(H); HRC:=wglCreateContext(H); wglMakeCurrent(H,HRC);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glClearColor(1,1,1,1); glClearColor(0.5, 0.5, 0.5, 0.5); // цвет фона glClear(GL_COLOR_BUFFER_BIT); // очистка буфера цвета glViewPort(0,0,Panel1.Width,Panel1.Height);
Добавлено спустя 1 минуту, 54 секунды Собственно, из-за невозможности использовать пдГтше - не работает LoadTExture - выдранный из примера Яна... Он закомментирован должен быть.
_________________ ASUS A4M88T-M, Athlon II X3 425, 2GB NCP, video - internal ATI 4250, 200GB Samsung HDD, Win7 x64
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
Атцы, не подскажите какой такой хитрой переменной можно заменить путь к директории, в которой находится скомпилированный экзешник программы. В инсталляторе NSIS, например, похожую функцию выполняет переменная $INSTDIR. А как эта переменная правильно пишется в Делфи?
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
Frags, благодарю.
Xupyp1 писал(а):
ExtractFilePath(Application.Exename)
Спасибо огромное, теперь всё отлично работает. В общем мне это было нужно для того, чтобы указать путь к ini-файлу (решил написать прогу, которая через ini-файл изменяет параметры приложения). Но тут я вспомнил, что некоторые приложения (в основном игры) хранят свои ini-файлы с в папке "Мои документы". А в этой директории не хотелось бы размещать свою программу (т. е. ExtractFilePath(Application.Exename) здесь уже нельзя использовать, т. к. папка из которой будет запускаться программа никак не привязана к директории, где хранится нужный ini-файл). По сему возникает вопрос как указать путь к ini-файлу, если файл располагается например в директории C:\Documents and Settings\Имя пользователя\Мои документы\My Games? Меня интересует чем можно заменить имя пользователя, которое у всех конечно же разное. Наверняка для этого есть какая-то константа или т. п. Подскажите, плиз, кто сталкивался. P. S. Знаю как можно это всё сделать через реестр (параметр RegisteredOwner из ветки HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion), но не хочется что-то огород городить (да и не рационально, ИМХО).
Но тут я вспомнил, что некоторые приложения (в основном игры) хранят свои ini-файлы с в папке "Мои документы".
Ага. И не зря! Если предполагается, что ПО будет использоваться не только админами и пользователями с необходимыми правами, но и "бесправными" , то так и нужно делать!
Shader 3.0 писал(а):
По сему возникает вопрос как указать путь к ini-файлу, если файл располагается например в директории C:\Documents and Settings\Имя пользователя\Мои документы\My Games?
Получить путь к папке "Мои документы" для текущего пользователя, добавить "\My Games" и имя ini-файла. Собсно вот:
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } iName: String; // Иям ini-файла wFolder: String; // Рабочая папка function GetSpecialFolderPath(const Folder: Integer; const CanCreate: Boolean): string; end;
var Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 } // Собсно юзается SHGetSpecialFolderPath для удобства "обернутая" в данный вариант. // Указывается константа нужной папки и необходимость создания оной в случае отсутствия. function TForm1.GetSpecialFolderPath(const Folder: Integer; const CanCreate: Boolean): string; var Path: array [0..MAX_PATH] of Char; begin SHGetSpecialFolderPath(0, Path, Folder, CanCreate); Result:= Path; end;
procedure TForm1.FormCreate(Sender: TObject); begin wFolder:= '\Shader 3.0\'; // Нафиг '\My Games' ... гулять - так гулять... ;) if not DirectoryExists(GetSpecialFolderPath(CSIDL_PERSONAL, False) + wFolder) then ForceDirectories(GetSpecialFolderPath(CSIDL_PERSONAL, False) + wFolder); iName:= GetSpecialFolderPath(CSIDL_PERSONAL, False) + wFolder + ChangeFileExt(ExtractFileName(Application.ExeName), '.ini'); Form1.Caption:= iName; // Типа глянуть end;
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
_SGK Уфф, спасибо. Ещё раз убедился, что одну и ту же задачу в программировании можно решить множеством способов. Я попробовал указать путь к ини-файлу, используя класс TRegistry (как писал выше), и всё вроде работает. В общем я так сделал.
Код:
procedure TForm1.FormCreate(Sender: TObject); var Ini: TIniFile; begin R:=TRegistry.Create; R.RootKey:=HKEY_LOCAL_MACHINE; R.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion', False); s:=R.ReadString('RegisteredOwner');\\отсюда в общем-то и выковыриваю имя пользователя R.Free; Ini:= TIniFile.Create('C:\Documents and Settings\'+s+'\Мои документы\My Games\Oblivion\Oblivion.ini');
Ну, в общем-то, все несколько сложнее. Простой пример: На компьютере 3 учетных записи! Папа(админ) + детишки Саня и Ваня. Каждый пользователь соответственно имеет свою папку "Мои Документы" и свои варианты сохраненных данных. Так вот, с помощью предложенного мною кода пользователь Саня точно получит возможность получить путь к своим данным. А с помощью Вашего нет! А если, к примеру, предположить, что Папа (админ) , создал шаловливому сыну Ване гостевую учетную запись , то бедный Ваня вообще не сможет воспользоваться Вашим софтом, потому как нужных прав у него нет , для того, чтобы поучить инфу из реестра по пути: "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
Для этого нужно как минимум изменить Ваш код с:
Код:
R:=TRegistry.Create;
На:
Код:
R:=TRegistry.Create(KEY_READ);
Хотя и после этого в "Свои Документы" он не попадет!
Также далеко не факт, что путь к папке "Мои Документы" будет обязательно начинаться: 'C:\Documents and Settings\...'. Многие его меняют из определенных соображений , также известны случаи, когда Винда устанавливается, к примеру, на раздел D:\
Даже не знаю как это описать...
В общем, у меня в проге используется множство rtf-файлов.
Как-бы сделать так, чтоб все файлы засунуть в один?
Точнее проблема не в объединении - это можно и текстовым редактором сделать Геморр в последующем вычленении нужного из "кучи".
Member
Статус: Не в сети Регистрация: 06.02.2006 Откуда: Одесса
Xupyp1 писал(а):
Геморр в последующем вычленении нужного из "кучи"
добавь разделители - например так :
<тут текст 1го файла>
<**************************************> это разделитель(врядли такое попадется в реальном файле)
<тут текст след файла> ну и тд.
Вопрос может не совсем в тему но все же... Был программа написанная в Делфи3 сделан инстлятор ИнсталШилтодм из тойже делфи, этот инстлятор собственно устанавливал Саму прогу,Базу данных,Справку по проге и BDE .... вообщем эту прогу нужно немного отредоктировать и перекомпилить в 7 Делфи, все что нужно сделал, теперь осталось сделать новый Инстлятор, но я не могу понять как засунуть в него этот BDE ... подскажите как это все сделать ....
Member
Статус: Не в сети Регистрация: 06.02.2006 Откуда: Одесса
Цитата:
А как считать rtf-файл построчно?
тока через обычное открытие фала...
не средствами memo или richedit Добавлено спустя 1 минуту, 5 секунд как вариант - грузить весь файл целиком а затем обрабатывать на наличие разделителей
Крупненький файлик получится... Интересно, а можно-ли как-то узнать состояние загрузки? И вообще как-то залезть в процесс загрузки, хотябы Application.ProcessMessages добавить
PS: Почему-то кажется, что какую-то глупость сморозил
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения