Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datentypen Umwandeln (https://www.delphipraxis.net/18630-datentypen-umwandeln.html)

thomasvonmuenster1 22. Mär 2004 14:44


Datentypen Umwandeln
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text:=IBQuery1.FieldByName('Pfad').AsString;
Label4.Caption:=Edit2.Text;
if ShellExecute(windows.PROCESS_CREATE_THREAD, 'open', 'AcroRd32.exe', Edit2.Text, nil, SW_SHOWDEFAULT)< 33 then showmessage('Anwendung kann nicht geoeffnet werden ');

end;

Ich lese aus einer Interbase DB de Pfad einer PDF Datei aus und lase ihn anzeigen.
Das geht auch aber bei der Übergabe in die ShellExecute Anweisung weigert er sich
und sagt
[Fehler] DbDatesF.pas(90): Inkompatible Typen: 'TCaption' und 'PAnsiChar'
wie kann PAnsiChar in einen String Umwandeln?
Oder geht es anders besser?

Danke Thomas!!

Matze 22. Mär 2004 14:47

Re: Datentypen Umwandeln
 
Hmm, an dem kann's eigentlich nicht liegen, normalerweise sind TCaption und PAnsiChar kompatibel, was folgendes Beispiel zeigt:

Delphi-Quellcode:
var a: PAnsiChar;
begin
  a := 'test';
  Caption := a;
end;

thomasvonmuenster1 22. Mär 2004 14:53

Re: Datentypen Umwandeln
 
Ja das Stimmt.Ich kann es ja auch in ein Label Übergeben.
Aber es startet nicht die PDF Datei.
Manuell geht es aber.Aber nicht aus der Datebank!!!!
if ShellExecute(windows.PROCESS_CREATE_THREAD, 'open', 'AcroRd32.exe', 'c:\\test\test2.pdf', nil, SW_SHOWDEFAULT)< 33 then showmessage('Anwendung kann nicht geöffnet werden !');

himitsu 22. Mär 2004 14:54

Re: Datentypen Umwandeln
 
Eine Umwandlung geht ganz einfach.

Code:
S := [color=red]Typenbezeichnung([/color]A[color=red])[/color];
z.B.:
Delphi-Quellcode:
Var S: String
  A: PAnsiChar;


S := String(A);

Achja, ShellExecute verlangt AnsiChar und nicht String (Edit2.Text = String)
Code:
ShellExecute(windows.PROCESS_CREATE_THREAD, 'open', 'AcroRd32.exe', [color=red]PChar([/color]Edit2.Text[color=red])[/color], nil, SW_SHOWDEFAULT)

thomasvonmuenster1 22. Mär 2004 15:07

Re: Datentypen Umwandeln
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s: String
    A: PAnsiChar;
begin
 A:=IBQuery1.FieldByName('Pfad').AsString;
 s := String(A);
 Label4.Caption:=Edit2.Text;
 if ShellExecute(windows.PROCESS_CREATE_THREAD, 'open', 'AcroRd32.exe', s, nil, SW_SHOWDEFAULT)< 33 then showmessage('Anwendung kann nicht geoeffnet werden ');
end;
So macht er es nicht!

mirage228 22. Mär 2004 15:08

Re: Datentypen Umwandeln
 
Zitat:

Zitat von himitsu
Delphi-Quellcode:
Var S: String
  A: PAnsiChar;


S := String(A);

Heisst des nicht StrPas in dem Fall ???, also

Delphi-Quellcode:
var
  s: string;
  p: PChar;
begin
  // ...
  s := StrPas(p);
end;

thomasvonmuenster1 22. Mär 2004 15:16

Re: Datentypen Umwandeln
 
PChar(Edit2.Text) ergibt keine Fehler aber er gibt mir dann meine Fehlermeldung wieder!
Probiere jetzt mal StrPas

mirage228 22. Mär 2004 15:20

Re: Datentypen Umwandeln
 
in deinem Fall, muss zu PChar gecastet werden, da ShellExecute() PChar verlangt.

Zu deinem Fehler: Wenn du 'AcroRd32.exe' ohne Programmpfad angibst, sucht Windows die Datei im Programmverzeichnis. Da ist es möglich, dass ein Fehler beim Öffnen auftritt...

mfG
mirage228

thomasvonmuenster1 22. Mär 2004 15:20

Re: Datentypen Umwandeln
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  p: PChar;
begin
  s := StrPas(p);
  s:=IBQuery1.FieldByName('Pfad').AsString;
  if ShellExecute(windows.PROCESS_CREATE_THREAD, 'open', 'AcroRd32.exe', s, nil, SW_SHOWDEFAULT)< 33 then showmessage('Anwendung kann nicht geoeffnet werden ');
[Fehler] DbDatesF.pas(93): Inkompatible Typen: 'String' und 'PAnsiChar'

kiar 22. Mär 2004 15:24

Re: Datentypen Umwandeln
 
wenn denn so
Delphi-Quellcode:
p:=Pchar (IBQuery1.FieldByName('Pfad').AsString);
oder so
Delphi-Quellcode:

p:=strPas(IBQuery1.FieldByName('Pfad').AsString;
und p in deine shellexecute statt s.

Matze 22. Mär 2004 15:25

Re: Datentypen Umwandeln
 
Kannst du's nicht so machen?

Delphi-Quellcode:
var
  s: string;
  p: PChar;
begin
  s:=IBQuery1.FieldByName('Pfad').AsString;
  p := PChar(s);

  if ShellExecute(windows.PROCESS_CREATE_THREAD, 'open', 'AcroRd32.exe', p, nil, SW_SHOWDEFAULT)< 33 then showmessage('Anwendung kann nicht geoeffnet werden ');
end;

thomasvonmuenster1 22. Mär 2004 15:30

Re: Datentypen Umwandeln
 
Beide gehen ohne Fehler.Aber er macht mir meine SW_SHOWDEFAULT Anzeige auf.
Gibt es eine andere möglichkeit Datei zu öffnen als ShellExecute?

mirage228 22. Mär 2004 15:31

Re: Datentypen Umwandeln
 
Zitat:

Zitat von thomasvonmuenster1
Beide gehen ohne Fehler.Aber er macht mir meine SW_SHOWDEFAULT Anzeige auf.
Gibt es eine andere möglichkeit Datei zu öffnen als ShellExecute?

Japp. Hier im Forum suchenCreateProcess

mfG
mirage228

kiar 22. Mär 2004 15:37

Re: Datentypen Umwandeln
 
anbei eine procedure die gleiches macht.
Delphi-Quellcode:
procedure TForm1.ListView1DblClick(Sender: TObject);
var
   i :integer;
   x,msg :string;
   item:TListitem;

begin
      item:=listview1.Selected;
      for i:=0 to aritechlist.count-1 do begin
   if aritechlist.items[i].name = item.SubItems[0] then
        begin
           x:= aritech.aritechlist.Items[i].File_name;
                if x = '' then
                  begin
                    showmessage('kein pdf file vorhanden');
                    exit;
                  end;
      end; end;
       i:=shellexecute(handle,
                 'open',
                      'acrord32.exe',
                      Pchar(x),
                      'c:\',9);


            if i <= 32 then begin
           case i of
           0  : msg :=' Zu wenig Speicher, ausführbare Datei war zerstört,'+
                      ' Relokationswerte waren ungültig';
                2  : msg :=' Datei wurde nicht gefunden';
                3  : msg :=' Verzeichnis wurde nicht gefunden';
                5  : msg :=' Fehler beim gemeinsamen Zugriff auf eine Datei im '+
                      ' Netz oder Fehler bei Zugriff auf eine gesperrte Datei '+
                           ' im Netz';
                6  : msg :=' Bibliothek fordert separate Datensegmente für jeden Task an';
                8  : msg :=' Zu wenig Speicher um die Anwendung zu starten';
                10 : msg :=' Falsche Windows Version';
                11 : msg :=' Ungültige ausführbare Datei. entweder keine Windowsanwendung'+
                           ' oder Fehler in der EXE Datei';
                12 : msg :=' Anwendung für ein anderes Betriebssystem';
                13 : msg :=' Anwendung für MS-DOS 4.0';
                14 : msg :=' Typ der ausführbaren Datei unbekannt';
                15 : msg :=' Versuch, eine Real-Mode-Anwendung zu laden';
                19 : msg :=' Versuch, eine komprimierte ausührbare Datei zu laden. Die Datei muß'+
                           ' dekomprimiert werden, bevor sie geladen wird';
                20 : msg :=' Ungültige DLL';
      end;
   showmessage(msg);
  end;
end;
aber bitte nicht mit copy und paste einfügen :mrgreen:

raik

thomasvonmuenster1 22. Mär 2004 15:59

Re: Datentypen Umwandeln
 
Ich bin am ende, habe alles mögliche nochmal probiert aber ............nicht!
Mache Morgen weiter.

Danke nochmals an alle für die Hilfe!

Ideen immer erwünscht.

kiar 22. Mär 2004 16:00

Re: Datentypen Umwandeln
 
nun mal langsam und nicht aufgeben.

zeig noch mal deinen code.

raik

thomasvonmuenster1 23. Mär 2004 08:23

Re: Datentypen Umwandeln
 
Mit notepad geht es! Aber mit PDF noch nicht, es springt immer meine Fehlermeldung an.
Kann es sein weil PDF word und so aktive Dokumente sind?
Oder liegt der Fehler wo anders?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  x: PAnsiChar;
begin
  s:=IBQuery1.FieldByName('Pfad').AsString;
  x := PChar(s);

  if ShellExecute(windows.PROCESS_CREATE_THREAD, 'open', 'notepad.exe', Pchar(x), nil, SW_SHOWDEFAULT)< 33 then showmessage('Anwendung kann nicht geoeffnet werden ');
   Label4.Caption:=x;
  end;


procedure TForm1.Button5Click(Sender: TObject);
var
  s: string;
  x: PAnsiChar;
begin
  s:=IBQuery1.FieldByName('Pfad').AsString;
  x := PChar(s);

  if ShellExecute(windows.PROCESS_CREATE_THREAD, 'open', 'AcroRd32.exe', nil, nil, SW_SHOWDEFAULT)< 33 then showmessage('Anwendung kann nicht geoeffnet werden ');
   Label4.Caption:=x;
   end;

thomasvonmuenster1 23. Mär 2004 08:41

Re: Datentypen Umwandeln
 
Jetzt macht er es!!!!!!!!!!!!
Ich habe Adobe Reader 6.0 installiert dann hat er es gemacht.
Mit 5.0 Acrobat macht er es nicht.

Danke Danke Danke Danke Danke Danke Danke Danke Danke

kiar 23. Mär 2004 08:41

Re: Datentypen Umwandeln
 
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var
  s: string;
  x: PAnsiChar;
begin
  s:=IBQuery1.FieldByName('Pfad').AsString;
  x := PChar(s);

  if ShellExecute(Handle, 'open', 'AcroRd32.exe', x, nil, 9)< 33 then showmessage('Anwendung kann nicht geoeffnet werden ');
   Label4.Caption:=x;
   end;

kiar 23. Mär 2004 08:46

Re: Datentypen Umwandeln
 
ich glaube der acrobat 5 hat auch eine andere exe :mrgreen:

na bitte

raik

himitsu 23. Mär 2004 09:21

Re: Datentypen Umwandeln
 
Wenn es sich um einen registrieeten Dateitype handelt, dann lass doch einfach die Angabe des Programms weg

Code:
ShellExecute(Handle, 'open', [color=red][b]'irgendwas.pdf'[/b][/color], [color=red][b]nil[/b][/color], nil, 9)
wenn die Datei nicht als Parameter, sonder direkt aufgerufen wird, das wird diese automatisch mit dem als Standard eingerichteten Programm geöffnet (z.B.: .txt mit Notepad, .pdf im Acrobat Reader, .wmv im Windows Media Player ...)

silentAMD 23. Mär 2004 13:55

Re: Datentypen Umwandeln
 
@himitsu: dann würde ich aber das "'open'" weglassen. und so schreiben

Code:
ShellExecute(0, nil, 'irgendwas.pdf', nil, nil, 9)
nämlich wenn er auch andere dateien mit deinem shellexecute, wie PPS mit dem powerpoint viewer 2003 oder bilder in der windows bildanzeige anzeigen will, "kennt" das programm den "dateityp" nicht bzw mit welchem prog er es öffnen soll.

DP-Maintenance 23. Mär 2004 14:21

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Datenbanken" nach "Sonstige Fragen zu Delphi" verschoben.
Ich verschiebe den Thread mal. Mit Datenbanken hat er nichts zu tun ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.

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