AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Shellexecute in 'Neubau'

Ein Thema von Delbor · begonnen am 17. Mär 2022 · letzter Beitrag vom 17. Mär 2022
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Shellexecute in 'Neubau'

  Alt 17. Mär 2022, 17:48
Delphi-Version: 11 Alexandria
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

AW: Shellexecute in 'Neubau'

  Alt 17. Mär 2022, 17:51
ShellExecute ist in ShellAPI deklariert, das finde ich nicht in Deiner uses–Klausel.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Shellexecute in 'Neubau'

  Alt 17. Mär 2022, 18:22
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (17. Mär 2022 um 18:32 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 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