Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Delphi. Вы задаете вопрос, мы отвечаем. | страница 15
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 15 из 16
На страницу: Пред.  1, 2, 3 ... , 14, 15, 16  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал Игры Мечты: «Delphi. Вы задаете вопрос, мы отвечаем.»
auliere
 301 EGP


Рейтинг канала: 1(1)
Репутация: 62
Сообщения: 1013
Откуда: Винница, Украина
Зарегистрирован: 09.02.2008
Jurec :
Точно?

Если не делать - точно меняются Подмигиваю Специально же и проверял.
Jurec :
Ну после загрузки точно могу сказать, что изменяются такие параметры как высота и ширина.

У канваса таких параметров нету подавно Подозрение.
Jurec :
А что тебе мешает задавать шрифт или что там у тебя ПОСЛЕ загрузки picture?

Абсолютно ничего и я так уже давно сделал, мне однако интересно узнать меняются ли все параметры. Оно могло бы стать мне полезным в будущем. Улыбка

Гм. Может быть, канвас просто пересоздается при загрузке рисунка? Хы...
    Добавлено: 22:11 17-06-2009   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Вещий Олежко :
У канваса таких параметров нету подавно

Да, точно. Уже увидел.

Вещий Олежко :
Может быть, канвас просто пересоздается при загрузке рисунка?

Может Улыбка Надо читать мануалы
_________________
MOV topka, C++
    Добавлено: 22:21 17-06-2009   
auliere
 301 EGP


Рейтинг канала: 1(1)
Репутация: 62
Сообщения: 1013
Откуда: Винница, Украина
Зарегистрирован: 09.02.2008
Как сделать автоинкрементацию номера билда? В менюшке Version Info стоит галочка "Auto-increment build number", но ничего не инкрементируется (( Правда, там еще стоит так же галочка Debug build, но я пробовал ее снимать - и результат нулевой.
    Добавлено: 23:46 17-06-2009   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
Поставить галочку и делать билд. Когда нажимаешь F9 проект просто компилится - он не билдится.
_________________
У меня бисера не доxеpа.
    Добавлено: 04:26 18-06-2009   
ТехноМаг
 360 EGP


Рейтинг канала: 2(19)
Репутация: 93
Сообщения: 2516
Откуда: Кронштадт
Зарегистрирован: 09.04.2007
Народ, кто подскажет как вытащить все координаты вершин из ID3DXMesh??? Срочно надо
Пояняю:
есть модель в формате X.

Необходимо выдрать из нее все что надо, сохранить в какой - нить record файл все необходимые переменные и структуры.

А потом создать из этого файла новую структуру ID3DXMesh функцией
D3DXCreateMeshFVF и прорендировать.

Все параметры выдрал(текстуры, материалы, формат вершин, количество вершин), а вот сами вершины не смог=(
_________________
(Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."

Последний раз редактировалось: ТехноМаг (20:23 21-09-2009), всего редактировалось 1 раз
    Добавлено: 20:19 21-09-2009   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
Гм... Это к DX коммюнити... Попробуй геимдев, там тебя обосрут, конечно, но ответ дадут.
_________________
WARNING: By reading this post you accept that this post is genius.
    Добавлено: 12:56 22-09-2009   
Saturos
 





Если есть моделька (файл) в .x формате, то она просто подгружается функцией D3DXLoadMeshFromX().
    Добавлено: 23:37 22-09-2009   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
А посмотреть как себя ведет VCL при bsNone?
_________________
WARNING: By reading this post you accept that this post is genius.
    Добавлено: 23:23 04-11-2009   
Криптон
 1011 EGP


Рейтинг канала: 3(44)
Репутация: 164
Сообщения: 2667
Откуда: Москва
Зарегистрирован: 05.04.2008
Как можно вставить какой-нибудь файл внутрь exe-файла? При помощи Delphi. Причём интересен случай, когда вставляемый файл имеет достаточно большой объём - ну, мегабайт 300 или около того. При попытке вставить файл как ресурс Delphi выдаёт ошибку:
[Error] E2161 RLINK32: Out of memory!

Конечная цель этого меропрятия - создание инсталлятора. Пока что - в целях самообразования.
    Добавлено: 21:31 20-12-2009   
Crimson
 560 EGP


Рейтинг канала: 4(83)
Репутация: 130
Сообщения: 3041

Зарегистрирован: 03.09.2003
Как вариант - учить Portable Executable Format, писать универсальный инсталлятор с "заглушкой", и потом на место заглушки запихивать архив.
    Добавлено: 00:56 21-12-2009   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
Вариант 1

Код:
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Интегрирование в EXE-шник других файлов

Процедура из указанного файла (FileName) создаёт unit в котором объявлен,
заполненный побайтово, массив и процедура сохранения этого массива обратно
в файл. Таким образом можно включить в один EXE-шник множество других
файлов (dll, ocx, dbf и т.п.) - прикрепить их как unit-ы. Фактически,
после сжатия EXE-шника программами типа UPX, получаем довольно компактный
файл, который можно использовать в качестве дистрибутива, например.

Зависимости: SysUtils, System
Автор:       Delirium
Copyright:   Delirium (Master BRAIN)
Дата:        22 мая 2002 г.
***************************************************** }

procedure FileToPas(FileName: string);
var
  BF: file of Byte;
  F: TextFile;
  P, N, S: string;
  BFSize: integer;
  BBB: Byte;
begin
  AssignFile(BF, FileName);
  Reset(BF);
  BFSize := FileSize(BF);
  P := ExtractFilePath(FileName);
  N := ExtractFileName(FileName);
  N := ChangeFileExt(N, '.PAS');
  AssignFile(F, N);
  ReWrite(F);
  Writeln(F, '(* Generated by Master BRAIN (C) 2002 *)');
  Writeln(F, 'unit ' + ChangeFileExt(N, '') + ';');
  Writeln(F);
  Writeln(F, 'interface');
  Writeln(F);
  Writeln(F, 'const FileSize:integer=' + IntToStr(BFSize) + ';');
  Writeln(F, 'FileData:array[0..' + IntToStr(BFSize - 1) + '] of Byte=');
  Writeln(F, '(');
  while not Eof(BF) do
  begin
    S := '';
    while (not Eof(BF)) and (Length(S) < 80) do
    begin
      Read(BF, BBB);
      S := S + IntToStr(BBB) + ',';
    end;
    if Eof(BF) then
      Delete(S, Length(S), 1);
    Writeln(F, S);
  end;
  CloseFile(BF);
  Writeln(F, ');');
  Writeln(F);
  Writeln(F, 'procedure SaveToFile(FileName:String);');
  Writeln(F);
  Writeln(F, 'implementation');
  Writeln(F);
  Writeln(F, 'procedure SaveToFile(FileName:String);');
  Writeln(F, 'var F:File of Byte;');
  Writeln(F, ' i:integer;');
  Writeln(F, 'begin');
  Writeln(F, 'AssignFile(F,FileName);');
  Writeln(F, 'ReWrite(F);');
  Writeln(F, 'for i:=0 to FileSize-1 do Write(F,FileData[i]);');
  Writeln(F, 'CloseFile(F);');
  Writeln(F, 'end;');
  Writeln(F);
  Writeln(F, 'end.');
  CloseFile(F);
end;


Вариант 2

Код:
//Добавить данные в EXE файл и получить их
   
function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
  aStream: TFileStream;
  iSize: Integer;
begin
  Result := False;
  if not FileExists(AFileName) then
    Exit;
  try
    aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
    MemoryStream.Seek(0, soFromBeginning);
    // seek to end of File
    // ans Ende der Datei Seeken
    aStream.Seek(0, soFromEnd);
    // copy data from MemoryStream
    // Daten vom MemoryStream kopieren
    aStream.CopyFrom(MemoryStream, 0);
    // save Stream-Size
    // die Streamgro?e speichern
    iSize := MemoryStream.Size + SizeOf(Integer);
    aStream.Write(iSize, SizeOf(iSize));
  finally
    aStream.Free;
  end;
  Result := True;
end;

function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
  aStream: TFileStream;
  iSize: Integer;
begin
  Result := False;
  if not FileExists(AFileName) then
    Exit;

  try
    aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
    // seek to position where Stream-Size is saved
    // zur Position seeken wo Streamgro?e gespeichert
    aStream.Seek(-SizeOf(Integer), soFromEnd);
    aStream.Read(iSize, SizeOf(iSize));
    if iSize > aStream.Size then
    begin
      aStream.Free;
      Exit;
    end;
    // seek to position where data is saved
    // zur Position seeken an der die Daten abgelegt sind
    aStream.Seek(-iSize, soFromEnd);
    MemoryStream.SetSize(iSize - SizeOf(Integer));
    MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
    MemoryStream.Seek(0, soFromBeginning);
  finally
    aStream.Free;
  end;
  Result := True;
end;

procedure TForm1.SaveClick(Sender: TObject);
var
  aStream: TMemoryStream;
begin
  aStream := TMemoryStream.Create;
  Memo1.Lines.SaveToStream(aStream);
  AttachToFile('Test.exe', aStream);
  aStream.Free;
end;

procedure TForm1.LoadClick(Sender: TObject);
var
  aStream: TMemoryStream;
begin
  aStream := TMemoryStream.Create;
  LoadFromFile('Test.exe', aStream);
  Memo1.Lines.LoadFromStream(aStream);
  aStream.Free;
end;

{

Note:

You can't proof whether additional data is attached or not.
To reach this, you would have to create a checksumm of the
MemoryStream and attach it.

}

_________________
У меня бисера не доxеpа.
    Добавлено: 10:15 21-12-2009   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
А что, финт ушами с константой конца кода и дописыванием в конец - уже запретили? Это-ж еще с DOS'овских времен!
_________________
WARNING: By reading this post you accept that this post is genius.

Последний раз редактировалось: Варсик (01:15 22-12-2009), всего редактировалось 1 раз
    Добавлено: 01:14 22-12-2009   
Криптон
 1011 EGP


Рейтинг канала: 3(44)
Репутация: 164
Сообщения: 2667
Откуда: Москва
Зарегистрирован: 05.04.2008
Warstone :
А что, финт ушами с константой конца кода и дописыванием в конец
Так ширсоновский вариант №2 нечто такое и делает. Подозрение.
    Добавлено: 03:16 22-12-2009   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
Это не мой вариант, я его просто скопипастил

Я бы устроил что-нибудь весёлое и нецивилизованное.
Скажем, загрузка любых данных как картинки в TImageList, что позволяет хранить эти самые данные в exe Подмигиваю
_________________
У меня бисера не доxеpа.

Последний раз редактировалось: Shirson (04:47 22-12-2009), всего редактировалось 1 раз
    Добавлено: 03:58 22-12-2009   
Криптон
 1011 EGP


Рейтинг канала: 3(44)
Репутация: 164
Сообщения: 2667
Откуда: Москва
Зарегистрирован: 05.04.2008
Shirson :
Скажем, загрузка любых данных как картинки в TImageList, что позволяет хранить эти самые данные в exe
Предсказываю, что с большими файлами этот фокус не прокатит, ибо содержимое TImageList, загруженное на этапе проектирования, Delphi хранит в dfm-файле, dfm-файл, при компиляции, запихивается в ресурсы exe`шника, а ресурсы нужного мне объёма, как показывает эксперимент, Delphi не переваривает.
А небольшие файлы можно запихать в ресурсы и обычным способом.

добавлено спустя 15 минут:
Кстати, в функции
function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
Нашлась ошибка:
Там написано
Код:
<...>
    MemoryStream.SetSize(iSize - SizeOf(Integer));
    MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
    MemoryStream.Seek(0, soFromBeginning);
<...>

А должно быть так:
Код:
<...>
    MemoryStream.SetSize(iSize - SizeOf(Integer));
    MemoryStream.Seek(0, soFromBeginning);
    MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
<...>


Последний раз редактировалось: Криптон (05:11 22-12-2009), всего редактировалось 1 раз
    Добавлено: 05:11 22-12-2009   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
Жаль Улыбка
Тогда, конечно, стрим к файлу клеить.
_________________
У меня бисера не доxеpа.
    Добавлено: 01:30 23-12-2009   
S_T_A_J_O_R
 80 EGP


Репутация: 11
Сообщения: 189
Откуда: СПб область
Зарегистрирован: 13.03.2010
Всем мое почтение!
Дайте пожалуйста ссылочку на хороший справочник по Delphi на русском языке.У меня большой перерыв в практике...
_________________
Волнующая, манящая Вселенная... А что будет с нами, если нас найдут?
    Добавлено: 08:56 26-06-2010   
ТехноМаг
 360 EGP


Рейтинг канала: 2(19)
Репутация: 93
Сообщения: 2516
Откуда: Кронштадт
Зарегистрирован: 09.04.2007
http://delphikingdom.com

injoy
_________________
(Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
    Добавлено: 11:24 26-06-2010   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
Вообще можно еще попользовать архиваторы (LZMA есть нативный для дельфи, то есть в pas идет) ну и запись в попу - этого никто не отменял.

А теперь мои вопросы:
 Кошерно-ли это:   (кликните здесь для просмотра)

Код:
unit PatchFileCreation;

interface

uses ULZMAEncoder;

type
  TEncodingCallback=function (Current, Total, UserParam: Cardinal): Boolean;
  TObjectEncodingCallback=function (Current, Total, UserParam: Cardinal): Boolean of object;

function EncodeDirectoryToPatch(Directory, ResultFile, TempDirectory:String; CallBack:TEncodingCallback; UserParam: Cardinal):Boolean; overload;
function EncodeDirectoryToPatch(Directory, ResultFile, TempDirectory:String; CallBack:TObjectEncodingCallback; UserParam: Cardinal):Boolean; overload;

implementation

type
  TPatchEncoder=class
  private
    {Тут будут все переменные, которые когда-либо использовались в RealEncodeDirectoryToPatch}
  public
    constructor Create;
    destructor Destroy; override; {А вот тут они будут удаляться вне зависимости от ошибки в самой процедуре}
    function RealEncodeDirectoryToPatch(Directory, ResultFile, TempDirectory: String; CallBack: Pointer; UserParam:Cardinal; OfObject:Boolean):Boolean;
  end;

function EncodeDirectoryToPatch(Directory, ResultFile, TempDirectory:String; CallBack:TEncodingCallback; UserParam: Cardinal):Boolean; overload;
var
  Encoder: TPatchEncoder;
begin
  Result := False;
  Encoder := TPatchEncoder.Create;
  try
    try
      Result := Encoder.RealEncodeDirectoryToPatch(Directory, ResultFile, TempDirectory, @CallBack, UserParam, False);
    except
      on Exception do
        Result := False;
    end;
  finally
    Encoder.Free;
  end;
end;

function EncodeDirectoryToPatch(Directory, ResultFile, TempDirectory:String; CallBack:TObjectEncodingCallback; UserParam: Cardinal):Boolean; overload;
var
  Encoder: TPatchEncoder;
begin
  Result := False;
  Encoder := TPatchEncoder.Create;
  try
    try
      Result := Encoder.RealEncodeDirectoryToPatch(Directory, ResultFile, TempDirectory, @CallBack, UserParam, True);
    except
      on Exception do
        Result := False;
    end;
  finally
    Encoder.Free;
  end;
end;

end.
Что получается: "Наружу" торчат только 2 типа и 2 процедуры. Внутри создается объект, гасятся все возможные ошибки (В TODO сделать не гашение, а нотификацию статусом), после работы объект - удаляется. Если все var переменные перетащить из процедуры в private секцию объекта и удалять по Destroy, то:
а) Будет-ли такой метод работы защищенным (Тут работа с другими объектами и файлами, возможно, в последствии - разбиение на потоки)?
б) Является ли это "Хорошим тоном" или накладные расходы на объект - признак кривизны рук?
в) Как такое делаете вы?
 Объясните про type of object   (кликните здесь для просмотра)
Вот я передаю параметр TObjectEncodingCallback, это функция of object, то есть в EAX у нее должна стоять ссылка на объект. Как это реализовано? Передается ссылка на структуру типа Фнукция, Объект? Или как-то по другому и что мне будет за то что я ее потом через Pointer передал и, в последствии, буду пользовать как TObjectEncodingCallback(Callback), где Callback типа Pointer

_________________
WARNING: By reading this post you accept that this post is genius.
    Добавлено: 21:25 21-07-2010   
Zachesa
 151 EGP


Рейтинг канала: 4(95)
Репутация: 13
Сообщения: 1420
Откуда: Хабаровск
Зарегистрирован: 12.11.2007
Хотел поиграться с Дельфи 2009 не нашёл вразумительной документации на русском (только старые варианты попадаются в сети), говорят в этой реинкарнации Дельфи стал лучше. Выход подряд 2009 2010 и 2011 с ужасной встроенной документацией (даже на английском) немного настораживает, а не предсмертный ли это всё вздох...
_________________
Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины.
    Добавлено: 21:20 23-07-2010   
Канал Игры Мечты: «Delphi. Вы задаете вопрос, мы отвечаем.»
На страницу: Пред.  1, 2, 3 ... , 14, 15, 16  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: У меня кончились оригинальные ответы на этот вопрос, придумайте сами что вам хочется. (Pegasus о дате запуска ЗВ)

  » Delphi. Вы задаете вопрос, мы отвечаем. | страница 15
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18