![]() |
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!! |
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; |
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 !'); |
Re: Datentypen Umwandeln
Eine Umwandlung geht ganz einfach.
Code:
z.B.:
S := [color=red]Typenbezeichnung([/color]A[color=red])[/color];
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)
|
Re: Datentypen Umwandeln
Delphi-Quellcode:
So macht er es nicht!
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; |
Re: Datentypen Umwandeln
Zitat:
Delphi-Quellcode:
var
s: string; p: PChar; begin // ... s := StrPas(p); end; |
Re: Datentypen Umwandeln
PChar(Edit2.Text) ergibt keine Fehler aber er gibt mir dann meine Fehlermeldung wieder!
Probiere jetzt mal StrPas |
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 |
Re: Datentypen Umwandeln
Delphi-Quellcode:
[Fehler] DbDatesF.pas(93): Inkompatible Typen: 'String' und 'PAnsiChar'
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 '); |
Re: Datentypen Umwandeln
wenn denn so
Delphi-Quellcode:
oder so
p:=Pchar (IBQuery1.FieldByName('Pfad').AsString);
Delphi-Quellcode:
und p in deine shellexecute statt s.p:=strPas(IBQuery1.FieldByName('Pfad').AsString; |
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; |
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? |
Re: Datentypen Umwandeln
Zitat:
![]() mfG mirage228 |
Re: Datentypen Umwandeln
anbei eine procedure die gleiches macht.
Delphi-Quellcode:
aber bitte nicht mit copy und paste einfügen :mrgreen:
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; raik |
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. |
Re: Datentypen Umwandeln
nun mal langsam und nicht aufgeben.
zeig noch mal deinen code. raik |
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; |
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 |
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; |
Re: Datentypen Umwandeln
ich glaube der acrobat 5 hat auch eine andere exe :mrgreen:
na bitte raik |
Re: Datentypen Umwandeln
Wenn es sich um einen registrieeten Dateitype handelt, dann lass doch einfach die Angabe des Programms weg
Code:
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 ...)
ShellExecute(Handle, 'open', [color=red][b]'irgendwas.pdf'[/b][/color], [color=red][b]nil[/b][/color], nil, 9)
|
Re: Datentypen Umwandeln
@himitsu: dann würde ich aber das "'open'" weglassen. und so schreiben
Code:
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.
ShellExecute(0, nil, 'irgendwas.pdf', nil, nil, 9)
|
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