|
|
|
Канал Игры Мечты: «Delphi. Вы задаете вопрос, мы отвечаем.» |
|
|
auliere
301 EGP
   Рейтинг канала: 1(1) Репутация: 62 Сообщения: 1013 Откуда: Винница, Украина Зарегистрирован: 09.02.2008
 |
|
Если не делать - точно меняются Специально же и проверял.
Jurec : |
Ну после загрузки точно могу сказать, что изменяются такие параметры как высота и ширина.
|
У канваса таких параметров нету подавно
Jurec : |
А что тебе мешает задавать шрифт или что там у тебя ПОСЛЕ загрузки picture?
|
Абсолютно ничего и я так уже давно сделал, мне однако интересно узнать меняются ли все параметры. Оно могло бы стать мне полезным в будущем.
Гм. Может быть, канвас просто пересоздается при загрузке рисунка?
|
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Вещий Олежко : |
У канваса таких параметров нету подавно
|
Да, точно. Уже увидел.
Вещий Олежко : |
Может быть, канвас просто пересоздается при загрузке рисунка?
|
Может Надо читать мануалы
_________________ MOV topka, C++ |
|
|
auliere
301 EGP
   Рейтинг канала: 1(1) Репутация: 62 Сообщения: 1013 Откуда: Винница, Украина Зарегистрирован: 09.02.2008
 |
|
Как сделать автоинкрементацию номера билда? В менюшке Version Info стоит галочка "Auto-increment build number", но ничего не инкрементируется (( Правда, там еще стоит так же галочка Debug build, но я пробовал ее снимать - и результат нулевой.
|
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Поставить галочку и делать билд. Когда нажимаешь F9 проект просто компилится - он не билдится.
_________________ У меня бисера не доxеpа. |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Народ, кто подскажет как вытащить все координаты вершин из ID3DXMesh??? Срочно надо
Пояняю:
есть модель в формате X.
Необходимо выдрать из нее все что надо, сохранить в какой - нить record файл все необходимые переменные и структуры.
А потом создать из этого файла новую структуру ID3DXMesh функцией
D3DXCreateMeshFVF и прорендировать.
Все параметры выдрал(текстуры, материалы, формат вершин, количество вершин), а вот сами вершины не смог=(
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (20:23 21-09-2009), всего редактировалось 1 раз |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Гм... Это к DX коммюнити... Попробуй геимдев, там тебя обосрут, конечно, но ответ дадут.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Saturos
|
|
Если есть моделька (файл) в .x формате, то она просто подгружается функцией D3DXLoadMeshFromX().
|
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
А посмотреть как себя ведет VCL при bsNone?
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Как можно вставить какой-нибудь файл внутрь exe-файла? При помощи Delphi. Причём интересен случай, когда вставляемый файл имеет достаточно большой объём - ну, мегабайт 300 или около того. При попытке вставить файл как ресурс Delphi выдаёт ошибку:
[Error] E2161 RLINK32: Out of memory!
Конечная цель этого меропрятия - создание инсталлятора. Пока что - в целях самообразования.
|
|
|
Crimson
560 EGP
    Рейтинг канала: 4(83) Репутация: 130 Сообщения: 3041
Зарегистрирован: 03.09.2003
 |
|
Как вариант - учить Portable Executable Format, писать универсальный инсталлятор с "заглушкой", и потом на место заглушки запихивать архив.
|
|
|
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а. |
|
|
Варсик
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 раз |
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Warstone : |
А что, финт ушами с константой конца кода и дописыванием в конец
|
Так ширсоновский вариант №2 нечто такое и делает.
|
|
|
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 раз |
|
|
Криптон
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 раз |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Жаль
Тогда, конечно, стрим к файлу клеить.
_________________ У меня бисера не доxеpа. |
|
|
S_T_A_J_O_R
80 EGP
 Репутация: 11 Сообщения: 189 Откуда: СПб область Зарегистрирован: 13.03.2010
 |
|
Всем мое почтение!
Дайте пожалуйста ссылочку на хороший справочник по Delphi на русском языке.У меня большой перерыв в практике...
_________________ Волнующая, манящая Вселенная... А что будет с нами, если нас найдут? |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
http://delphikingdom.com
injoy
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
Варсик
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. |
|
|
Zachesa
151 EGP
  Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1420 Откуда: Хабаровск Зарегистрирован: 12.11.2007
 |
|
Хотел поиграться с Дельфи 2009 не нашёл вразумительной документации на русском (только старые варианты попадаются в сети), говорят в этой реинкарнации Дельфи стал лучше. Выход подряд 2009 2010 и 2011 с ужасной встроенной документацией (даже на английском) немного настораживает, а не предсмертный ли это всё вздох...
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины. |
|
|
|
|
|
Канал Игры Мечты: «Delphi. Вы задаете вопрос, мы отвечаем.» |
|