![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разработка конвертора VCL to KOL [Delphi, Windows]
BaryVetaL © (2005-12-22 15:36:00)Начал разработку как и обещал...
Сейчас делаю модуль VCLtoKOL который содержит переопределение процедур из VCL в KOL (например int2str в IntToStr), а так же неторые классы, константы и типы, которые не содержаться в модуле KOL.
У кого есть какие нибудь идеи по разработке прошу ... не стесняйтесь :-)
BaryVetaL (2005-12-30 09:24:00) [1]Спасибо! Обязательно тебя впишу как участника проекта VCL to KOL :-)
BaryVetaL (2005-12-30 09:18:00) [2]Давай...
Muxaspb (2005-12-29 18:56:00) [3]BaryVetaL, надо удалять все лишние пробелы, энтэры, и заголовок. Я тебе на мыло скину пример, как делать. У меня все вышло.
BaryVetaL (2005-12-29 13:04:00) [4]Muxaspb мне нужно получить из dfm файла (VCL) картинку, и сконвертировать ее в PBitmap (KOL). Полученные после преобразования HexToStream, данные являются каким-то форматом хранения данных Delphi. Формат начинается с TBitmap......... или TJPEGImage..............
Через поток
Str := NewStrList;
St := NewMemoryStream;
HexToStream(S, St);
Str.LoadFromStream(St, false);
// сохраним чтобы посмотреть что получилось
Str.SaveToFile('1.bmp');
// пытаемся загрузить
Image1.Bitmap.LoadFromStream(St);
Image1.Refresh;
мы ничего не получим... Можешь проверить.
Muxaspb (2005-12-28 16:54:00) [5]А что не работает? Картинку на диск сохранить не смог или что?
BaryVetaL (2005-12-28 15:28:00) [6]2Muxaspb: Чего то не работает твой метод.
BaryVetaL (2005-12-28 09:22:00) [7]2Thaddy: I need to consider only a picture from *.dfm a file, whether I do not know it is necessary to use your library, it can is possible easier? Well and if you not difficultly please send on barilkovetal@mail.ru. Thanks Thaddy!
Thaddy (2005-12-27 23:16:00) [8]2BarryVetal,
You can also use my GDIPLUS library to use like graphics.pas.
It is a wrapper for GDIPLUS.DLL that works from Windows 98 and is standard from ME/Win2000.
It automatically supports formats like GIF, JPEG, TIFF, BMP, WMF etc. and the DLL 3is almost always loaded anyway, because windows needs it. ;) Win95 doesn't work.
I can mail you an updated version that can do even more.
Muxaspb (2005-12-27 15:15:00) [9]Внимательней посмотрел. В заголовке в Picture.Data может быть TJPEGImage, TGIFImage и т.д + какие-то параметры. Если это ImageList, то там будет IL.
Muxaspb (2005-12-27 14:40:00) [10]По заголовку. Например, в bmp сигнатура BM, в jpg - JFIF, в ico не помню.
Можно посмотреть в исходниках каких-нибудь компонент для работы с графическими форматами.
BaryVetaL (2005-12-27 14:01:00) [11]Кстати, а как определять тип рисунка? (jpg, bmp, ico...)
Muxaspb (2005-12-27 13:57:00) [12]А эта функция наоборот:
function StreamToHex(Buf: PStream): string;
const
Convert: array[0..15] of Char = '0123456789ABCDEF';
var
i, p: integer;
B: byte;
begin
SetLength(Result, Buf.Size * 2);
p := Buf.Position;
Buf.Position := 0;
for i := 1 to Buf.Size do
begin
Buf.Read(B, 1);
Result[(i * 2) - 1] := Convert[B shr $4];
Result[(i * 2)] := Convert[B and $F];
end;
Buf.Position := p;
end;
Полученный текст помещаем Picture.Data = {Сюда}
Muxaspb (2005-12-27 13:41:00) [13]<<Используй эту функцию:>>
Извините описался - процедуру.
Muxaspb (2005-12-27 13:40:00) [14]Используй эту функцию:
procedure HexToStream(Hex: string; Buf: PStream);
const
Convert: array['0'..'f'] of SmallInt =
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 10, 11, 12, 13, 14, 15);
var
i, p: integer;
B: Byte;
begin
if Buf.Size < Length(Hex) div 2 then
Buf.Size := Length(Hex) div 2;
p := Buf.Position;
Buf.Position := 0;
i := 1;
while i <= Length(Hex) do
begin
if not (Hex[i] in ['0'..'f'])
or not (Hex[i + 1] in ['0'..'f']) then
Break;
B := Byte((Convert[Hex[i]] shl 4) + Convert[Hex[i + 1]]);
Buf.Write(B, 1);
Inc(i, 2);
end;
Buf.Position := p;
end;
Например так:
var
St: PStream;
begin
St := NewMemoryStream(FileName);
HexToStream(Memo1.Text, ST);
St.Free;
дальше просо из памяти загружай рисунок.
Кстати в приведенном случае этот рисунок в JPG формате.
BaryVetaL (2005-12-27 13:10:00) [15]Кто знает в каком формате Delphi хранит рисуки в Image, понятно, что в dfm файле, но
...
object Image1: TImage
Left = 16
Top = 132
Width = 241
Height = 217
Picture.Data = {
0A544A504547496D616765F1050000FFD8FFE000104A46494600010200006400
640000FFEC00114475636B79000100040000003C0000FFEE000E41646F626500
64C000000001FFDB0084000604040405040605050609060506090B080606080B
0C0A0A0B0A0A0C100C0C0C0C0C0C100C0E0F100F0E0C1313141413131C1B1B1B
1C1F1F1F1F1F1F1F1F1F1F010707070D0C0D181010181A1511151A1F1F1F1F1F
1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
1F1F1F1F1F1F1F1F1F1F1F1FFFC0001108002D002D03011100021101031101FF
C4008E0000030003010000000000000000000000040506020307000100030101
0100000000000000000000000203040100051000010303020306040505000000
00000002010304111205000621131431415161221532422307716224161781A1
52335311000202010204030607000000000000000001110212210331418104A1
3213F05161719122C1D1E142628214FFDA000C03010002110311003F0042F6E5
CE46CB4A8C325A96EB1916A2358F56D39CE30E08911A282A2A597F1251B786BD
FCDA7D48576D4754E1A9AB73CA42E4EE7DC12E663CB0C0DB50654D76101BE688
4F2B026A6489CB7396356945178AFE5D65AEDF03B6FB6A553CFCCAA9FCA7A87C
EDF73D86B1F968C1CB80C48763E7A118899B42C382D3A6063C56C53BBCD3C341
6B07B5DAAD6AF8C7DAFE651E437464D77BE0F038C745B83249C4C8CAB44D54BA
7390DB4DAAF0AD8DD497C0874BB3376B697A6ECF8F2FAC188EE8DDEDED899303
24DF591F70FB436E2C76EDE424C489551FF2F55FFDB496515DBA64947ED9F092
859CFEE673EE44CDBCB9044C64608A623C96B98BD44790E1229D3B8A3A53877E
820EC2BE9CC6A4A61F6F4981372725E92321322FF50802D2B6A14016D06B79DD
E904EE4D7A55D0F2B777159552518A8019DB01D7A747938DC9BB8E6DA9273498
46C5E1E73A24264DA9AFD3BAF5AA714AF1A682D51FB7DD426AD5CB48E83B8DB2
A3037121B263ED8D3525A951DE0275C7FABE2E913CA694525AAAFA5740D1CB7D
B6DBF369D20DB84FB70F634B6F2C5C9217B238F3CE9C8649C7249BECAC7F51A3
A1658D2A08F05EC4D298F7DC6594AF378060FDB4CF3B8A938E1CE4606A4E5573
2AE7406A62F2C9495627EAD12DBC69D9D9A53636BBF5998E51C7A7B872D6C1DC
6DEE893B993350D6649160099F6F7796891DA79A4A7EB2EE29217BFBB41905EA
571C63C7F404E978F66AFC8F2711166A6E6A36720C082719B6A5449724C9F65C
7490A22B5C12D75A4A173BC385342EC51B5B55756DCE8D78F41244DE1BD24E35
B971931C869841CDBA2E34F0A2FA8AE647EAAD2A21F1AAF0F05EE5BB157F9F6D
38D7CD8FB681392FB9D9E8B1A7BF0998E44DC5C6CD86C391DD256DA9A88AE149
247C11102E411A222A92F6705D036329DAD749F7BF0E876988D1208DCA8A544A
AA2512BE4955D26CC9921872FE969723208EE93CB56E449881CADB5899939B93
25ABA60346D3468E1812347447111048782D52EFE9E5AC760EB6B250B808C762
618371B6E3C11070B1E02639B804F388483CC57550C16824DADF6AB6554A517C
B40D94ADDB63CF2992957676CCC83D291D8ECBEE6411AEB011D2FAA8C7169084
4E8A8DFCA94E1DDA07632B7BA8F815B051831B59711C46FD2B42BD529E2B555A
FE3A53672431E5FA34121413DD2796A8C89F1393EECCBE4636E86778B2DC95C1
E025A636438222B18A1B8AAD4F7AB75CA412140694A7D2AEB64B76B6D638737A
FE5EDF129570B8997F78979D158902EEDE17094C00D097ACB44B8A2A2FA7857C
342DE80A6D6D7F6FC0D3BCB6CC0D953717BEB078D0B312AB0F2F0980143760CB
710515A4FF00A32E90D8894F4FA7B342AD3A07B76774EADF12EF61ED66B05841
128ED31939E673B2CAD0A2214B904AE38954ED1052B03F2A26976B4837B4B2A2
CF4E960C095DE9F9657FC145BBF0A71ECD3B5144E07F1CFED07E9D1FED4A9F51
D9D256FF005DDF2D2FF8BCFB75BAC8DFBB2FE47B03FC63EFB17DA3A3F7BE913A
4E57FBFA2EEB3BF93E1F2D758E42B671AF01967BF607BFE13DFF00A3F7ABCFD8
BAAB7997D42EE55DC2B7594FCD4A71D0EA7532871C0AC0B7BB4B04CF5869FFD9}
end
...
Как мне попиксельно считать в PImage рисунок?
Поиск формата в лоб не работает :-)
Выяснил, что если сохранить рисунок, то
/отсюда картинка...
(заголовок)FFD8FFE000104A464...(далее до конца рисунок)
как мне читать заголовок?
Заранее спасибо!
BaryVetaL (2005-12-26 13:09:00) [16]Не Barloggg, лучше в моем новом модуле VCLtoKOL просто создать какой нибудь новый класс, который будет на основе KOLmdvXLGrid, добавить для аналога с VCL пару свойств и методов и все...
Barloggg (2005-12-26 12:23:00) [17]Обычный ListView спокойно заменяет Stringgrid.
Ну, точнее не спокойно, придется много дорабатывать, но думаю как аналог сойдет очень даже нормально. Правда я еще сам не закончил эту работу по преобразованию.
BaryVetaL (2005-12-26 12:02:00) [18]2Vedun: Извини но я работаю в FireFox в IE почти никогда... Попробовал в FireFox показывает какую то картинку если перейти по ссылке, а IE предлагает сохранить файл... Так что в какой то степени виноват я...
2MTsv DN: ShowQuestionEx и MessageBox не дает полной аналогии с MessageDlg
MTsv DN (2005-12-26 11:17:00) [19]Привет...
Может я ошибаюсь, но кажется:
MessageDlg -> MessageBox, если стандартные кнопки MB_OK, MB_YES и т.д.
MessageDlg -> KOL.ShowQuestion(Ex), если кнопки определяет пользователь...
С Уважением MTsv DN
Vedun (2005-12-26 10:23:00) [20]2 BaryVetaL
Странно, сам проверял ссылку. Работала. Тогда я скину этот архив тебе на мыло.