Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2

Модерирует : ShIvADeSt

ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы http://forum.ru-board.com/topic.cgi?forum=33&topic=3647&start=2020#lt
Внимание, все большие куски кода (более 5 строк) оформляем в тег [more] дабы уменьшить размер поста.

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:52 20-04-2006 | Исправлено: ShIvADeSt, 02:02 30-06-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Erazer

Цитата:
структра BE_CONFIG  передаваемая lame_enc.dll на с++ передается размером в 331 байт , а из делфей 329 байт

Странно, что у тебя получилось меньше - у меня с ходу получилось больше, но с этим справился, установив выравнивание полей структур в 1... посмотри как в паскаль перевли тип BOOL - это не Boolean (1 байт), а LongBool (4 байта)

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 16:23 21-09-2006
Erazer



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mpglib.dll  
Decoding library for MPEG Layer III and Layer II.
 
Добавлено:
Походу суть проблемы в том что передается след структура
LHV1 = packed record
                         dwStructVersion : DWORD;
                        dwStructSize : DWORD;
            // BASIC ENCODER SETTINGS
            dwSampleRate : DWORD;        // SAMPLERATE OF INPUT FILE
            dwReSampleRate : DWORD;        // DOWNSAMPLERATE, 0=ENCODER DECIDES
            nMode : LongInt;                // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO
            dwBitrate : DWORD;            // CBR bitrate, VBR min bitrate
            dwMaxBitrate : DWORD;        // CBR ignored, VBR Max bitrate
            nPreset : LongInt;            // Quality preset, use one of the settings of the LAME_QUALITY_PRESET enum
            dwMpegVersion : DWORD;        // FUTURE USE, MPEG-1 OR MPEG-2
            dwPsyModel : DWORD;            // FUTURE USE, SET TO 0
            dwEmphasis : DWORD;            // FUTURE USE, SET TO 0
 
            // BIT STREAM SETTINGS
            bPrivate : BOOL;            // Set Private Bit (TRUE/FALSE)
            bCRC : BOOL;                // Insert CRC (TRUE/FALSE)
            bCopyright : BOOL;            // Set Copyright Bit (TRUE/FALSE)
            bOriginal : BOOL;            // Set Original Bit (TRUE/FALSE)
 
            // VBR STUFF
            bWriteVBRHeader : BOOL;    // WRITE XING VBR HEADER (TRUE/FALSE)
            bEnableVBR : BOOL;            // USE VBR ENCODING (TRUE/FALSE)
            nVBRQuality : integer;        // VBR QUALITY 0..9
            dwVbrAbr_bps : DWORD;        // Use ABR in stead of nVBRQuality
            nVbrMethod : VBRMETHOD;
            bNoRes : BOOL;                // Disable Bit resorvoir (TRUE/FALSE)
 
            // MISC SETTINGS
            bStrictIso : BOOL;            // Use strict ISO encoding rules (TRUE/FALSE)
            nQuality : WORD;            // Quality Setting, HIGH BYTE should be NOT LOW byte, otherwhise quality=5
 
            // FUTURE USE, SET TO 0, align strucutre to 331 bytes
            btReserved : array[0..237 + 2] of BYTE;
//            btReserved : array[0..237] of BYTE;
  end;
и все в ней передается как надо, тока вот  bWriteVBRHeader : BOOL; передается lame_enc.dll как false, а не true, это удалось выяснить включением записи логов того что получает lame_enc.dll.
не могу я вкурить почему этот бит на выходе из проги TRUE а на входе в lame FALSE, притом что ни один другой параметр не теряется...
 
Добавлено:

Цитата:
как в паскаль перевли тип BOOL - это не Boolean (1 байт), а LongBool (4 байта)

шото торможу не могу понять фразы...

Всего записей: 1729 | Зарегистр. 02-08-2003 | Отправлено: 16:31 21-09-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Erazer

Цитата:
шото торможу не могу понять фразы...

Посмотри - как у тебя описан тип BOOL (родного то в делфи такого нету) - как Boolean или как LongBool
 
Вот такое описание дает положенные 331 байт - Подробнее...

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 17:22 21-09-2006 | Исправлено: RomanTim, 17:26 21-09-2006
xitsmex



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanTim
Не помогает установка фокуса обратно. Эх. Не все так просто.

Всего записей: 58 | Зарегистр. 31-08-2005 | Отправлено: 21:08 21-09-2006
GTA3

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wader
нет так не получается при шелче на кнопку  
Id все время увеличивается
а мне надо так
если в компоненте Edit есть данные то созать строку  
в начале строки должен быть ID + следующий номер
например  
если в первой строке ID01
то в следующей должно быть ID02
 
а тут идет наращивание одной переменной примерно так
 
ID01
ID01
 
нажали на событие шелчек мышки они оба перерастают в:
ID02
ID02
 
 

Всего записей: 114 | Зарегистр. 22-07-2004 | Отправлено: 21:13 21-09-2006
wader



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GTA3
Ясно. Просто из начального вопроса это было непонятно
Счас придумаем что-нибудь.

Всего записей: 113 | Зарегистр. 26-05-2005 | Отправлено: 21:36 21-09-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
xitsmex
А как именно не помогает? Я сейчас попробовал - фокус на листвью не переходит, только Edit.SetFocus надо делать обязательно до raise - иначе на него не попадешь.
Правда, при этом тот итем, по которому кликаешь выделяется, чтобы это задавить можно сделать так:
procedure TForm1.ListView1Changing(Sender: TObject; Item: TListItem;
  Change: TItemChange; var AllowChange: Boolean);
begin
  if Change = ctState then
    AllowChange := Edit1.Text <> '1';  
end;

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 23:18 21-09-2006
xitsmex



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanTim
Наверное, у тебя MultiSelect = false. Если true - по listview начинает бегать прямоугольник выделения элементов.

Всего записей: 58 | Зарегистр. 31-08-2005 | Отправлено: 09:51 22-09-2006
deadbitch



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Непонятки с Canvas.StretchDraw
 
Имеется такая штука: через Picture.LoadFromFile грузится emf, затем этот emf через Image.Canvas.StretchDraw рисуется. И так несколько рисунков подряд (по очереди). После показа рисунка делаю Canvas.FillRect. Image.Alignt = alClient. Рисунки сменяются по клику мышью. Так вот, первый рисунок стречится нормально в границы формы, а остальные рисуются без стречинга В чём может быть проблема? Между рисунками делаю этой отдельной Picture Free, а затем её заново создаю.

Всего записей: 340 | Зарегистр. 13-01-2005 | Отправлено: 10:24 22-09-2006
wader



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deadbitch
приведи код

Всего записей: 113 | Зарегистр. 26-05-2005 | Отправлено: 10:31 22-09-2006
deadbitch



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wader

Цитата:
deadbitch  
приведи код

 
Первая картинка грузится так (в OnShow формы):

Цитата:
 
var
  rect: TRect;
begin
 
  pic := TPicture.Create;
  rect.Left := 0;
  rect.Top := 0;
  rect.Right := Form1.Width;
  rect.Bottom := Form1.Height;
 
        pic.LoadFromFile(ExePath + 'EMF\'+map);
        Image1.Canvas.StretchDraw(rect, pic.Graphic);
        Image1.Refresh;
 

 
Остальные так:

Цитата:
 
    pic.Free;
    pic := TPicture.Create;
    Image1.Canvas.Brush.Color := clBtnFace;
    Image1.Canvas.FillRect(Rect);
    Pic.LoadFromFile(ExePath+'EMF\'+img);
    Image1.Canvas.StretchDraw(rect, pic.Graphic);
//rect тут тот же
 

Всего записей: 340 | Зарегистр. 13-01-2005 | Отправлено: 10:42 22-09-2006
wader



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deadbitch
1. Выкини нафиг Image1.
2. Не надо постоянно создавать и уничтожать pic. Не надо. Создай ее один раз, например в OnCreate формы.А уничтожай в OnDestroy.
3. И rect тоже выкинь. Воспользуйся ClientRect формы.
 
Примерно что получилось:
исходник

Всего записей: 113 | Зарегистр. 26-05-2005 | Отправлено: 12:31 22-09-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
xitsmex
Прямоугольник выделения бегает и скроллинг бегает, но элементы то не выделяются - так что все равно пользователь никуда не денется...  
Eсли хочется, чтобы ListView вообще не реагировал на мышь - делай ему Enable/Disable в OnChange событии едита

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 13:21 22-09-2006 | Исправлено: RomanTim, 13:21 22-09-2006
deadbitch



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wader

Цитата:
deadbitch  
1. Выкини нафиг Image1.  
2. Не надо постоянно создавать и уничтожать pic. Не надо. Создай ее один раз, например в OnCreate формы.А уничтожай в OnDestroy.  
3. И rect тоже выкинь. Воспользуйся ClientRect формы.

 
Слушай, этими фокусами я хотел выиграть в скорости от Image.Picture.LoadFromFile, но фактически ничего не выиграл Поскоку также тормозно

Всего записей: 340 | Зарегистр. 13-01-2005 | Отправлено: 15:13 22-09-2006 | Исправлено: deadbitch, 15:14 22-09-2006
vshersh



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hi All!
Может быть у кого-нибудь есть готовое решение для следующей проблемки:
Пытаюсь открыть файл для записи в эксклюзивном режиме (TFileStream.Create('...', fmOpenWrite or fmShareExclusive)), в это же время в этот файл пишет другой процесс - и я получаю исключение.
Как проще всего определить, какой именно процесс заблокировал файл?

Всего записей: 506 | Зарегистр. 12-01-2006 | Отправлено: 15:50 22-09-2006 | Исправлено: vshersh, 15:52 22-09-2006
wader



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deadbitch
Может расскажешь, что у тебя за задача. А так код можно долго переделывать.
Что ты такое интересное делаешь?

Всего записей: 113 | Зарегистр. 26-05-2005 | Отправлено: 16:11 22-09-2006 | Исправлено: wader, 22:46 23-09-2006
GTA3

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wader
идей нету насчет моей проблемы?

Всего записей: 114 | Зарегистр. 22-07-2004 | Отправлено: 16:16 22-09-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
GTA3
Ты напиши по-человечески - что ты хочешь от своей программы... судя по тому, что у тебя на нажатие Button1 стоит  
Memo1.Lines.Text := ...
каждый раз содержимое мемо будет создаваться заново, или имеется в виду Memo1.Lines.Add('IDxx'...), и если мема пустая, то перовй строкой добавить 'TUTDF'... ?

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 16:46 22-09-2006
Erazer



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
короче проблема вот в чем "I investigated that
this was due to the difference in boolean types in
Delphi/C. A 32 bit boolean in Delphi is either all 0's
or all 1's while the C value TRUE is 1 (only 1 bit
set). In BladeMP3EncDLL.c the intialisation routine
perfoms a check  
TRUE == lameConfig.format.LHV1.bWriteVBRHeader
This check fails for the Delphi 32-bit boolean true."
иными словами дельфийский  boolean не катит Lame_enc.dll написанному на С++, ибо в с он представлен 1 битом, а в делфях 32 битами среди которых либо все 0 либо 1 единичка, в отличии от с где на это выделен 1 бит... шо ж мине робить ? падскажить люди добрыя....

Всего записей: 1729 | Зарегистр. 02-08-2003 | Отправлено: 18:01 22-09-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Erazer

Цитата:
иными словами дельфийский  boolean не катит Lame_enc.dll написанному на С++, ибо в с он представлен 1 битом, а в делфях 32 битами среди которых либо все 0 либо 1 единичка, в отличии от с где на это выделен 1 бит... шо ж мине робить ? падскажить люди добрыя....

2 варианта:
- поправить в заголовочном файле в описании поля BOOL на Integer и задавать не False/True, а 0/1
- задавать значение не  lameConfig.format.LHV1.bWriteVBRHeader := True, а Integer(lameConfig.format.LHV1.bWriteVBRHeader) := 1

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 18:13 22-09-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2
ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru