Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Shellexecute in 'Neubau' (https://www.delphipraxis.net/210211-shellexecute-neubau.html)

Delbor 17. Mär 2022 16:48

Delphi-Version: 11 Alexandria

Shellexecute in 'Neubau'
 
Hi zusammen

Folgenden Code soll in einem 'Neubau' übernommen werden:
Delphi-Quellcode:
procedure TRogersPdfFrame.FOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
  Tolerance = 2.0;
var  WebLinkIndex: Integer; LdfView : TPdfView;
begin
  LdfView := (Sender as TPdfView);
  Pdf1.PageNumber := LdfView.PageNumber;
  if not LdfView.Active then
    Exit;
  LdfView.SetFocus;
  WebLinkIndex := LdfView.WebLinkAtPos(X, Y);
  if WebLinkIndex <> -1 then
    ShellExecute(0, 'open', PChar(string(LdfView.WebLink[WebLinkIndex].Url)), '', '', SW_SHOWNORMAL)
  else
  begin
...
'Corpus Delicti' ist hier 'Shellexecute', das hier im Originalcode absolut korrekt arbeitet. Probleme macht 'ShellExecute' erst im 'Neubau':
Delphi-Quellcode:
procedure TAlexPdfFrame.FOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
  Tolerance = 2.0;
var  WebLinkIndex: Integer; LdfView : TPdfView;
begin
  LdfView := (Sender as TPdfView);
  Pdf1.PageNumber := LdfView.PageNumber;
  if not LdfView.Active then
    Exit;
  LdfView.SetFocus;
  WebLinkIndex := LdfView.WebLinkAtPos(X, Y);
  if WebLinkIndex <> -1 then
    ShellExecute(0, 'open', PChar(string(LdfView.WebLink[WebLinkIndex].Url)), '', '', SW_SHOWNORMAL)
  else
  begin
Hier ist ShellExecute schon zur Designzeit als unbekannt markiert, der Deklaration unter uses zum Trotz:
Delphi-Quellcode:
unit AlexPdfFrameUnit;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, PDFium,
  GenericObjectListUnit, Vcl.StdCtrls, ExtDlgs, ImgList, ComCtrls, ToolWin,
  RzTabs;
Der Usesteil in TRogersPdfFrame ist bis auf die Unit RzTabs identisch.

Als Fehlerquelle könnte ich mir vorstellen, einen Flüchtigkeitsfehler bei der Anordnung der begin..end-Blöcke gemacht zu haben, aber das scheint nicht der Fall zu sein. Was könnte noch Ursache für den Fehler sein?

Ach ja - der 'Neubau' besteht aus völlig neu aufgebauten Formularen,Frames und Units unter Übernahme bestehenden Codes, anstelle der Suche nach einem Fehler, den ich wahrscheinlich nie finden würde...(vermutlich: in Sydney entwickelt, in Alexandria geöffnet und dann in Sydney weiterbearbeitet...)
Komponenten wie TPanel hab ich teilweise per Copy&Paste übernommen, jedoch Events neu per OI erzeugt. Wichtig war für mich, nichts zu übernehmen, was irgendwie irgendwann compiliert worden war.

Gruss
Delbor

DeddyH 17. Mär 2022 16:51

AW: Shellexecute in 'Neubau'
 
ShellExecute ist in ShellAPI deklariert, das finde ich nicht in Deiner uses–Klausel.

Delbor 17. Mär 2022 17:22

AW: Shellexecute in 'Neubau'
 
Hi DeddyH

Ok, mal für mich, zum gaaanz langsam mitschreiben (weil ich wirklich gestern Nacht dachte, genau darauf geachtet zu haben):
Delphi-Quellcode:
unit RogersPdfFrameUnit;

interface

uses
  [b]Winapi.Windows, Winapi.Messages,[/b] System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, PDFium,
  GenericObjectListUnit, Vcl.StdCtrls, ExtDlgs, ImgList, ComCtrls, ToolWin;
Die Help von Alexandria
Zitat:

ShellExecuteAus RAD Studio
Nach oben zu Index

ShellExecute ist eine Funktion der Windows-API. Siehe ShellExecute function (EN) in MSDN.
Aber ja, wer lesen kann und dies auch noch am richtigen Ort tut, ist klar im Vorteil (in TRogersPdfFrame):
Delphi-Quellcode:
implementation

{$R *.dfm}

uses HomeOfficerFeMainUnit, Printers, ClipBrd, Types, ShellApi; // Settings,
Vielen Dank!

Gruss
Delbor


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz