Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Вниз

WM_COPYDATA   Найти похожие ветки 

 
NaRuTo ©   (2008-03-09 19:51) [0]

Привет мастерам Delphi! У меня страшная проблема...Я уже месяц работаю над тем как бы мне открыть файлы со с помощью своей программы... Есть ParamStr, но если открывать сразу несколько файлов он абсолютно бесполезен....Он начинает по очереди открывать добавлять в список каждый мной открытый файл...Если выделить ну где-т допустим файла 4...Будет заметно мерцание в списке с открытыми файлами...Есть ли какое-то другое средство....Работающее быстрее..Т.е эти файлы будут добавлены одним разом в один с список..А не постоянно проверять запущено ли приложение, а затем WM_COPYDATA


 
Loginov Dmitry ©   (2008-03-09 20:06) [1]

Мдя...


 
trubin ©   (2008-03-09 20:14) [2]

Ничего не понял, какой список?

Особенно круто следующее
> А не постоянно проверять запущено ли приложение, а затем
> WM_COPYDATA


причем тут WM_COPYDATA


 
NaRuTo ©   (2008-03-09 20:44) [3]

Вот код!


 
NaRuTo ©   (2008-03-09 20:46) [4]

program player;

uses
Windows,
 Messages,
 SysUtils,
 Variants,
 Classes,
 Graphics,
 Controls,
 Forms,
 Dialogs,
 ExtCtrls,
 StdCtrls,
 ComCtrls,
 main in "main.pas" {PogiForm},
 splash in "splash.pas" {SplashForm},
 playlist in "playlist.pas" {PlaylistForm},
 video in "video.pas" {Form1};

{$R *.res}
var

 i: integer;
 hMainForm: HWND;
 copyDataStruct: TCopyDataStruct;
 ParamString: string;
 WParam, LParam: integer;
 Count: Integer;
begin
  hMainForm := FindWindow("TPogiForm",nil);
   if hMainForm = 0 then begin
 SplashForm:= TSplashFOrm.Create(Application);
 SplashForm.Show;
 SplashForm.Update;
 Application.Title := "POGi - Media Player";
   
   Application.CreateForm(TPogiForm, PogiForm);
 Application.CreateForm(TPlayListForm, PlayListForm);
 Application.CreateForm(TForm1, Form1);
 for i := 1 to ParamCount do begin

     PlayListForm.OpenFileMusic(ParamStr(i));

 end;
 repeat
 Application.ProcessMessages;
 until SplashForm.CloseQuery;
   SplashForm.Hide;
 SplashForm.Free;

 Application.Run;
end
else begin
ParamString := "";
   for i := 1 to ParamCount do
   begin
     // caieoeaaai ana ia?aiao?u a iaio no?ieo n ?acaaeeoaeyie ?13

     ParamString := ParamString + ParamStr(i) + #13;
   end;
   // nicaaai caienu oeia TCopyDataStruct

   CopyDataStruct.lpData := PChar(ParamString);
   CopyDataStruct.cbData := Length(ParamString);
   CopyDataStruct.dwData := 0;
   WParam := Application.Handle;
   LParam := Integer(@CopyDataStruct);
   // ionueaai niiauaiea WM_COPYDATA aeaaiiio ieio ioe?uoiai i?eei?aiey

   SendMessage(hMainForm, WM_CopyData, WParam, LParam);
   Application.Terminate;
 end;
end.


В главной форме:

procedure TPogiForm.AddFile(FileName: String; param: Integer);
var
Caption: String;
Time: String;
Name: String;
i: integer;
Fil: String;

Artist, Title: String;
begin

Name:= FileName;
for i:= 1 to Length(FileName) - 1 do begin
Name[i]:= FileName[i];
end;
delete(Name,Length(FileName),Length(FileName));
if ParamCount = 1 then begin
PlayListForm.List.Clear;
PlayListForm.List.Items.Add(IntToStr(PlayListForm.List.Items.Count) + ". " + ExtractFileName(ChangeFileExt(Name,"")));
nummusic:= 0;
end;
PlayListForm.CountMusic[PlayListForm.List.Items.Count - 1]:= Name;
PlayListForm.TimeCount[PlayListForm.List.Items.Count - 1]:= PlayListForm.GetTimeMusic(PlayListForm.CountMusic[PlayListForm.List.Items.Count - 1]);
Label2.Caption:= PlayListForm.List.Items.Strings[PlayListForm.List.Items.Count - 1];
if Param = ParamCOunt then
PlayStream(PlayListForm.CountMusic[PlayListForm.List.Items.Count - 1]);
PlayListForm.List.ItemIndex:= PlayListForm.List.Items.Count - 1;
PlayListForm.ScrollList.Size:= PlayListForm.List.Count;
PlayListForm.ScrollList.Position:= PlayListForm.List.Count;
PlayListForm.PositionScroll:= PlayListForm.List.Count;

end;
procedure TPogiForm.CopyData(var Msg: TWMCopyData);

var

 ParamStr: string;
 CopyDataStructure: TCopyDataStruct;
 i: integer;
 len: integer;

begin
 inc(param);
 CopyDataStructure := Msg.CopyDataStruct^;
 ParamStr := "";

 len := CopyDataStructure.cbData;

 for i := 0 to len - 1 do
 begin
   ParamStr := ParamStr + (PChar(CopyDataStructure.lpData) + i)^;
 end;

 i := 0;
 while not (Length(ParamStr) = 0) do
 begin

   if isDelimiter(#13, ParamStr, i) then
   begin

     AddFile(ParamStr,param);

     ParamStr := Copy(ParamStr, i + 1, Length(ParamStr) - i - 1);
   end;
   inc(i);
 end;
 param:= 0;

 inherited;
end;


 
Loginov Dmitry ©   (2008-03-09 20:59) [5]

> Вот код!


Круто!
А вопрос в чем все-таки?


 
NaRuTo ©   (2008-03-09 21:33) [6]


> Loginov Dmitry ©   (09.03.08 20:59) [5]
А вопрос в чем все-таки?


> NaRuTo ©   (09.03.08 19:51)
> Есть ли какое-то другое средство....Работающее быстрее.


 
trubin ©   (2008-03-09 21:54) [7]

Я так понял тормоза именно в получении инфы из файла? Если так, то можно логику изменить, сначала получать инфу, а затем заполнять список. Юзеру в это время чтобы не скучал - или курсор в виде часиков, или прогресс бар показывать. Или я не правильно понял.


 
trubin ©   (2008-03-09 21:54) [8]

Я так понял тормоза именно в получении инфы из файла? Если так, то можно логику изменить, сначала получать инфу, а затем заполнять список. Юзеру в это время чтобы не скучал - или курсор в виде часиков, или прогресс бар показывать. Или я не правильно понял.


 
VirEx ©   (2008-03-10 10:15) [9]

Не понял в чем проблема, но логика такая:

Первый запуск (предположим): Pogi.exe 1.mp3 2.mp3 3.mp3 4.mp3
1. Запускается программа
2. Через ParamStr() заполняется список файлов
3. Первый файл начинает проигрываться

Второй запуск (При этом предыдущую копию программы не закрываем):
Pogi.exe 5.mp3 6.mp3 7.mp3 8.mp3
1. Запускается вторая копия программы
2. Через ParamStr() заполняется список файлов
3. Если предыдущая копия программы запущена (найден хэндл через FindWindow) значит посылаем первой копии через SendMessage список файлов по одному "5.mp3 6.mp3 7.mp3 8.mp3"
4. Закрываемся

1. Первая копия программы "ловит" название файла и добавляет его в список
2. Если список был пустой, то начинаем проигрывать этот файл, если уже проигрывается какой-либо файл то ничего не делаем (он уже в списке)

При этом не нужно отправлять содержимое файла, достаточно только его имя и место расположения.


 
VirEx ©   (2008-03-10 10:53) [10]

WParam := Application.Handle;
for i := 1 to ParamCount do begin
 CopyDataStruct.lpData := PChar(ParamStr(i));
 CopyDataStruct.cbData := Length(CopyDataStruct.lpData);
 CopyDataStruct.dwData := 0;
 LParam := Integer(@CopyDataStruct);
 SendMessage(hMainForm, WM_CopyData, WParam, LParam);
end;


----

procedure TPogiForm.CopyData(var Msg: TWMCopyData);
var
 ParamStr: string;
 CopyDataStructure: TCopyDataStruct;
begin
// заполняем ParamStr
while length(ParamStr)<Msg.CopyDataStruct^.cbData do
 ParamStr:=ParamStr+(Pchar(Msg.CopyDataStruct^.lpData)+length(ParamStr))^;

// если в списке нет, то добавляем
if PlayListForm.List.IndexOf(ParamStr)=-1 then PlayListForm.List.Add(ParamStr);
...
end;


а зачем у тебя PlayListForm.List.Clear ?
ты очищаешь список и заново всё запихиваешь? Нафги?


 
Leonid Troyanovsky ©   (2008-03-10 11:46) [11]


> VirEx ©   (10.03.08 10:53) [10]

> // заполняем ParamStr
> while length(ParamStr)<Msg.CopyDataStruct^.cbData do
>  ParamStr:=ParamStr+(Pchar(Msg.CopyDataStruct^.lpData)+length(ParamStr))^;

Что это.

--
Regards, LVT.


 
VirEx ©   (2008-03-10 11:56) [12]


>  [11] Leonid Troyanovsky ©   (10.03.08 11:46)

Это извращение без дополнительной переменной-счетчика


 
Leonid Troyanovsky ©   (2008-03-10 12:11) [13]


> VirEx ©   (10.03.08 11:56) [12]

> Это извращение без дополнительной переменной-счетчика

Видим, что извращение.
SetString, RTFM.

--
Regards, LVT.


 
NaRuTo ©   (2008-03-10 18:55) [14]


> VirEx ©   (10.03.08 10:53) [10]

А что толку та в ParamStr() действует только если самому прописывать много параметров....А если просто щёлкаешь на нескольких файлах открыть ситуация остаётся прежней



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.006 c
15-1203934641
Kerk
2008-02-25 13:17
2008.04.06
Посоветуйте хороший сниффер


2-1204978768
avptt
2008-03-08 15:19
2008.04.06
вопрос по поводу воспроизведения mp3


15-1203539159
Petr V. Abramov
2008-02-20 23:25
2008.04.06
так рождаются легенды...


2-1205235920
Vikindos
2008-03-11 14:45
2008.04.06
Как считать всю Physical Memory?


11-1187120723
Delphuk
2007-08-14 23:45
2008.04.06
Утечка памяти в dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский