MP3
5 отговора
165 прегледа
MP3
Kak da play-vam po vuzmojno nai-lesniq (i bezplaten) nachin MP3-ki???
I osven tova, da vi pitam, tukmo sum vuv foruma, nqkoi znae li kak moga da napravq na delphi sushtoto koeto se pravi na VB sus App.PrevInstance?
Merci
I osven tova, da vi pitam, tukmo sum vuv foruma, nqkoi znae li kak moga da napravq na delphi sushtoto koeto se pravi na VB sus App.PrevInstance?
Merci
Re: MP3
eto ti neshto free koeto az sym polzval kato komponent i raboti bezuprechno: [линк]

Re: MP3
В отговор на:I osven tova, da vi pitam, tukmo sum vuv foruma, nqkoi znae li kak moga da napravq na delphi sushtoto koeto se pravi na VB sus App.PrevInstance?
CreateMutex
Re: MP3
unit unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Procedure FormCreate(Sender: TObject);
private
MessageId: Integer;
{ Private declarations }
public
{ Public declarations }
end;
const
UniqueAppStr : PChar = 'Tova e unikalen string';
MI_FAIL_SUBCLASS = 1;
MI_FAIL_CREATE_MUTEX = 2;
var
Form1: TForm1;
MutHandle: THandle =0;
WProc: TFNWndProc = Nil;
MessageID:integer;
MIError: Integer = 0;
implementation
{$R *.DFM}
Function NewWndProc(Handle: HWND; Msg: Integer; wParam, lParam: Longint): Longint; stdcall;
begin
{ Ако е това съобщение... }
if Msg = MessageID then
begin
{ ако главния прозорец е минимайзнат, да се върне в нормално състояние }
if IsIconic(Application.Handle) then
begin
Application.MainForm.WindowState := wsNormal;
Application.Restore;
end;
SetForegroundWindow(Application.MainForm.Handle);
Result := 0;
end
{ В противен случай предай съобщение към предишната процедура с прозорци }
else
Result := CallWindowProc(WProc, Handle, Msg, wParam, lParam);
end;
Procedure TForm1.FormCreate(Sender: TObject);
begin
MessageID := RegisterWindowMessage(UniqueAppStr);
MutHandle := OpenMutex(MUTEX_ALL_ACCESS, False, UniqueAppStr);
if MutHandle = 0 then
begin
WProc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC,Longint(@NewWndProc)));
{ Сигнализиране за неуспешен subclassing }
if WProc = Nil then
MIError := MIError or MI_FAIL_SUBCLASS;
MutHandle := CreateMutex(Nil, False, UniqueAppStr);
if MutHandle = 0 then
MIError := MIError or MI_FAIL_CREATE_MUTEX;
end else begin
{ Вече е стартиран един екземпляр на програмата }
ShowMessage('Вече е стартиран един екземпляр на програмата');
Application.Terminate;
end;
end;
end.
МОжеш да си разшириш Application като му добавиш нов метод с име примерно AppPrevInnstance : Boolean ;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Procedure FormCreate(Sender: TObject);
private
MessageId: Integer;
{ Private declarations }
public
{ Public declarations }
end;
const
UniqueAppStr : PChar = 'Tova e unikalen string';
MI_FAIL_SUBCLASS = 1;
MI_FAIL_CREATE_MUTEX = 2;
var
Form1: TForm1;
MutHandle: THandle =0;
WProc: TFNWndProc = Nil;
MessageID:integer;
MIError: Integer = 0;
implementation
{$R *.DFM}
Function NewWndProc(Handle: HWND; Msg: Integer; wParam, lParam: Longint): Longint; stdcall;
begin
{ Ако е това съобщение... }
if Msg = MessageID then
begin
{ ако главния прозорец е минимайзнат, да се върне в нормално състояние }
if IsIconic(Application.Handle) then
begin
Application.MainForm.WindowState := wsNormal;
Application.Restore;
end;
SetForegroundWindow(Application.MainForm.Handle);
Result := 0;
end
{ В противен случай предай съобщение към предишната процедура с прозорци }
else
Result := CallWindowProc(WProc, Handle, Msg, wParam, lParam);
end;
Procedure TForm1.FormCreate(Sender: TObject);
begin
MessageID := RegisterWindowMessage(UniqueAppStr);
MutHandle := OpenMutex(MUTEX_ALL_ACCESS, False, UniqueAppStr);
if MutHandle = 0 then
begin
WProc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC,Longint(@NewWndProc)));
{ Сигнализиране за неуспешен subclassing }
if WProc = Nil then
MIError := MIError or MI_FAIL_SUBCLASS;
MutHandle := CreateMutex(Nil, False, UniqueAppStr);
if MutHandle = 0 then
MIError := MIError or MI_FAIL_CREATE_MUTEX;
end else begin
{ Вече е стартиран един екземпляр на програмата }
ShowMessage('Вече е стартиран един екземпляр на програмата');
Application.Terminate;
end;
end;
end.
МОжеш да си разшириш Application като му добавиш нов метод с име примерно AppPrevInnstance : Boolean ;
Re: MP3
Ето и друг вариант който ми дойде на ум ....не е много универсален но е кратък и разбираем
Това ти е "главния" юнит на програмата
program Previousе;
uses
Forms,
Windows,
Previous in 'Previous.pas' {Form1};
{$R *.res}
var
H : Thandle ;
begin
Application.Initialize;
H := FindWindow('TForm1','TestProgram') ;
if H <> 0 then begin
Application.MessageBox('Previous instance detected !','Error',MB_ICONERROR);
Application.Terminate ;
end;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Както забелязваш идеята е да извикаш API'to FindWindow и ако то намери прозорец от клас TForm1 със Caption-а на твоята форма то е много вероятно това да е именно същата програма.(в случая Caption-а на главната форма е 'TestProgram')
Метода ще създава проблеми ако ползваш еднакъв caption за различни програми - например Form1
Това ти е "главния" юнит на програмата
program Previousе;
uses
Forms,
Windows,
Previous in 'Previous.pas' {Form1};
{$R *.res}
var
H : Thandle ;
begin
Application.Initialize;
H := FindWindow('TForm1','TestProgram') ;
if H <> 0 then begin
Application.MessageBox('Previous instance detected !','Error',MB_ICONERROR);
Application.Terminate ;
end;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Както забелязваш идеята е да извикаш API'to FindWindow и ако то намери прозорец от клас TForm1 със Caption-а на твоята форма то е много вероятно това да е именно същата програма.(в случая Caption-а на главната форма е 'TestProgram')
Метода ще създава проблеми ако ползваш еднакъв caption за различни програми - например Form1
Re: MP3
Това сега ли го измисли или по принцип така го правиш???
Много излишен код, subclassing, OpenMutex...
CreateMutex(NULL,true,"IceMutex");
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
ShowMessage("Програмата вече е стартирана!");
return 0;
}
Това е на Билдер, ама лесно се преправя.
Слага се тука
begin
---->>> тука
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Много излишен код, subclassing, OpenMutex...
CreateMutex(NULL,true,"IceMutex");
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
ShowMessage("Програмата вече е стартирана!");
return 0;
}
Това е на Билдер, ама лесно се преправя.
Слага се тука
begin
---->>> тука
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.