Problème avec les commandes DDE (WM_DDE_INITIATE) sous WinXP ...

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 - 8 avril 2011 à 12:47
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 - 8 avril 2011 à 12:50
Bonjour à tous,

voilà, j' utilise mon compo TcyDDECmd qui est ici
Composants Cindy pour Delphi
dans un programme qui permet d' ouvrir les fichiers *.tif sous Windows XP simplement en double cliquant sur un fichier tif sous Windows Explorer.

Le programme fonctionne à merveille sous Windows Vista dans les 2 cas de figure possible:
- le programme n' est pas ouvert: il s' ouvre et visualise bien le fichier tif cliqué sous Windows Explorer.
- le programme est déjà ouvert: le fichier tif cliqué s' ouvre.

Le problème est que le même programme ne fonctionne pas dans le 1er cas de figure (le programme n' est pas encore ouvert) sous WinXP alors que j' ai déjà utilisé mon compo pour d' autres extensions de fichiers sans aucun problème de ce genre.

Étant donné que je n' ai pas delphi sous WinXp, il est très difficile de cerner le problème mais j' ai remarqué que, lorsque le programme n' est pas encore ouvert donc et que je double clique sur un fichier tif, le message WM_DDE_INITIATE n' est pas reçut par mon compo ni par la form principale.

Merci de votre aide.

Maurício

le code de la form:
unit f_Prin;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ieview, imageenview, StdCtrls, Buttons, ExtCtrls, Printers, imageenio, cyDDECmd, cyBasePanel, cyPanel, cyBaseSpeedButton, cySpeedButton,
pngimage, shlObj, cyObj, cySys, cyStrUtils, cySearchFiles;

type
TfrmPrin = class(TForm)
PanPreview: TPanel;
PrintDialog1: TPrintDialog;
CyPanel2: TCyPanel;
Panel1: TPanel;
LblPages: TLabel;
SBPriorPage: TcySpeedButton;
SBNextPage: TcySpeedButton;
ImageEnView1: TImageEnView;
CyPanel1: TCyPanel;
SBPrint: TcySpeedButton;
cyDDECmd1: TcyDDECmd;
CyPanel3: TCyPanel;
Panel3: TCyPanel;
SBPriorImage: TcySpeedButton;
SBNextImage: TcySpeedButton;
SBOpen: TcySpeedButton;
OpenDialog1: TOpenDialog;
CBZoomDeplacement: TCheckBox;
cySearchFiles1: TcySearchFiles;
LBFiles: TListBox;
procedure ImageEnView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure CBZoomDeplacementClick(Sender: TObject);
procedure SBPriorPageClick(Sender: TObject);
procedure SBNextPageClick(Sender: TObject);
procedure SBPrintClick(Sender: TObject);
procedure cyDDECmdTiffReceiveCommand(Sender: TObject; Command: string);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SBOpenClick(Sender: TObject);
procedure SBPriorImageClick(Sender: TObject);
procedure cySearchFiles1ValidateFile(Sender: TObject; ValidMaskInclude, ValidMaskExclude, ValidAttributes: Boolean; var Accept: Boolean);
private
public
NbPages: Integer;
CurrentPageNr: Integer;
CurrentImageFile: String;
procedure OPEN_IMAGE(Ficheiro: String);
procedure UPDATE_PAGE_INFO;
end;

var
frmPrin: TfrmPrin;

implementation

{$R *.dfm}

procedure TfrmPrin.FormCreate(Sender: TObject);
begin
CurrentImageFile := '';
CurrentPageNr := 0;
NbPages := 0;
SBPriorPage.Enabled := false;
SBNextPage.Enabled := false;
SBPrint.Enabled := false;
end;

procedure TfrmPrin.FormShow(Sender: TObject);
var VersionInfo: TOSVersionInfo;
begin
if AnsiLowerCase( ParamStr(1) ) = 'register'
then begin
// Tiff :
cyDDECmd1.RegisterOptions.ExtensionDescription := 'Ficheiros tiff';
cyDDECmd1.RegisterOptions.ExtensionKey := 'imageview-tiff';
cyDDECmd1.RegisterOptions.FileExtension := '.tiff';
if not cyDDECmd1.RegisterOpenCmd(true)
then begin
Mensagem(' Não tem direitos de administrador para executar esta tarefa!');
Exit;
end;

// Tif :
cyDDECmd1.RegisterOptions.ExtensionDescription := 'Ficheiros tif';
cyDDECmd1.RegisterOptions.ExtensionKey := 'imageview-tif';
cyDDECmd1.RegisterOptions.FileExtension := '.tif';
if not cyDDECmd1.RegisterOpenCmd(true)
then begin
Mensagem(' Não tem direitos de administrador para executar esta tarefa!');
Exit;
end;

// Windows notify :
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
// else
// OPEN_IMAGE(ParamStr(1));

// SpeedButtons :
VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
GetVersionEx(VersionInfo);

if (VersionInfo.dwPlatformId <> VER_PLATFORM_WIN32_NT) or (VersionInfo.dwMajorVersion <= 5)
then begin
SBOpen.FlatDownStyle := dsHidden;
SBOpen.FlatHotStyle := hsHidden;

SBPrint.FlatDownStyle := dsHidden;
SBPrint.FlatHotStyle := hsHidden;
end;
end;

procedure TfrmPrin.OPEN_IMAGE(Ficheiro: String);
begin
if not FileExists(Ficheiro)
then begin
ImageEnView1.Clear;
Exit;
end;

CurrentPageNr := 1;
CurrentImageFile := Ficheiro;
NbPages := 1;

if (AnsiLowerCase(String_End(Ficheiro, 4)) '.tif') or (AnsiLowerCase(String_End(Ficheiro, 5)) '.tiff')
then NbPages := EnumTIFFIm(Ficheiro);

Caption := Ficheiro;

SBPriorPage.Enabled := true;
SBNextPage.Enabled := true;
SBPrint.Enabled := true;

ImageEnView1.IO.Params.TIFF_ImageIndex := CurrentPageNr - 1;
ImageEnView1.IO.LoadFromFile(CurrentImageFile);

UPDATE_PAGE_INFO;
MostrarJanela(Handle);
end;

procedure TfrmPrin.UPDATE_PAGE_INFO;
begin
LblPages.Caption := 'Pág. ' + intToStr(CurrentPageNr) + ' de ' + intToStr(NbPages);
SBPriorPage.Enabled := CurrentPageNr > 1;
SBNextPage.Enabled := CurrentPageNr < NbPages;
end;

procedure TfrmPrin.SBOpenClick(Sender: TObject);
begin
if OpenDialog1.Execute then
OPEN_IMAGE(OpenDialog1.FileName);
end;

procedure TfrmPrin.cyDDECmdTiffReceiveCommand(Sender: TObject; Command: string);
var Ficheiro: String;
begin
if pos('open', AnsiLowerCase(Command)) = 1
then begin
Ficheiro :Copy(Command, 6, Length(Command)-6); // DDEStr open"c:\test.tiff"
OPEN_IMAGE(Ficheiro);
end;
end;

end.

1 réponse

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
8 avril 2011 à 12:50
J' oublais de préciser que le programme s' ouvre quand même et j' ai un message d' erreur windows qui me dit que le fichier tif est introuvable?!!
Notez que le programme fonctionne correctement sous Vista.

A+


Composants Cindy pour Delphi
0
Rejoignez-nous