Entwickler-Ecke
Sonstiges (Delphi) - MessageFenster öffnen
agent_x - Do 09.08.07 23:09
Titel: MessageFenster öffnen
Hallo,
kann mir jemand vielleicht sagen welchen Befehl man in Delphi eintippen muss
um eine andere .pas Datei zu öffnen [die .pas Datei ist natürlich in der .exe Datei entchalten]
MfG agent_x
cuejo - Fr 10.08.07 00:55
Hi
Leider hab ich nicht ganz verstanden was Du machen willst. Wenn Du eine .pas Datei nur öffnen willst, dann geht das mit Datei -> Öffnen. Wenn Du eine Unit einbinden willst, dann musst Du sie nur bei
uses hinschreiben, oder auf Datei -> Unit verwenden gehen. Was meinst Du mit
agent_x hat folgendes geschrieben: |
[die .pas Datei ist natürlich in der .exe Datei entchalten]
|
?
Dass die .pas in dem Ordner mit der .exe liegt? Dann wird es wohl zweites sein... :think:
agent_x - Fr 10.08.07 06:42
also ich meine meine .pas Datei ist in der compilierten Datei entchalten.
und ich will diese .pas mit meinem geproggtem programm öffnen.
und was soll ich denn bei uses hinschreiben?
cuejo - Fr 10.08.07 16:07
SHELLEXECUTE
Damit kann man Dateien mit dem zugehörigen Programmen öffnen. Die .pas muss dann aber vorhanden sein, aus der compilierten .exe kann man sie nicht auslesen.
arj - Fr 10.08.07 16:43
Nochmal zur Klärung.
Du willst ein Programm schreiben, welches den Sourcecode einer Pas-Datei darstellt?
oder
Du willst ein Sourcecode schreiben welcher Teile aus einer anderen Pas-Datei nutzt?
cuejo - Fr 10.08.07 17:26
Wo ich gerade Deinen Titel lese: Vielleicht meinst Du auch
TOPENDIALOG :gruebel: :nixweiss:
raziel - Fr 10.08.07 17:39
Um dem heiteren Rätselraten ein Ende zu setzten, wäre es sehr praktisch
agent_x, wenn du uns mit ein bisschen Quelltext versorgen könntest :)
Gruß,
raziel
_frank_ - Fr 10.08.07 18:07
Titel: Re: MessageFenster öffnen
agent_x hat folgendes geschrieben: |
[die .pas Datei ist natürlich in der .exe Datei entchalten]
|
ich gehe mal davon aus, dass du die pas-Datei manuell als Resource eingebunden hast und weist, dass du die compilierte version nicht (so) "decodieren" kannst.
pas1 RCDATA unit1.pas
dann kannst du diese Resource mit einem TResourceStream laden und per LoadFromStream z.B. in ein Memo laden (TStrings.LoadFromStream).
um eine resource auswählen zu können musst du dir per EnumResourceNames erstmal eine resourcenliste erstellen.
als Beispiel mal ein Quelltextauszug aus meinem DFMEditor bisschen modifiziert für deinen Zweck (die auskommentierten Zeilen sind nur zur filterung, ob es sich um ein formular handelt, evtl. brauchst du so etwas ähnliches):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| function EnumDfmNameProc(hModule: THandle; lpszType, lpszName: PChar; lParam: Integer): Boolean; stdcall; var rs: TResourceStream; begin rs := TResourceStream.Create(hModule, lpszname, lpszType); try try TStrings(lParam).Add(StrPas(lpszName)); except raise; end; finally rs.free; end; Result := True; end;
function TForm_DFMChooseRes.loadFile(filename:string):integer; begin freelibrary(hModule); Listbox1.Clear; hModule:=LoadLibraryEx(PCHAR(filename),0,LOAD_LIBRARY_AS_DATAFILE); if hModule <> 0 then begin fName:=filename; EnumResourceNames(hModule, RT_RCDATA,@EnumDfmNameProc, Integer(Listbox1.Items)); end; result:=hModule; end;
procedure TForm_DFMChooseRes.getFormData(s:TStrings); var rs:TResourceStream; begin if hModule<>0 then begin rs :=TResourceStream.Create(hModule,formname,RT_RCDATA); Memo1.LoadFromStream(rs); rs.free; close; end; end; |
HTH Frank
agent_x - Fr 10.08.07 22:32
hallo,
also ich hab ein menü und da will ich ein neues fenster öffnen [wenn man drauf clickt].
Also z.B: wie beifast allen programmen die versions info oder so
und diese Datei ist in der exe enthalten. Sie heißt ABOUT.pas
MfG agent_x
_frank_ - Fr 10.08.07 22:35
.oO(wohl doch nicht ganz so kompliziert, wie ichs vermutet habe :) )
du fügst zu deinem Projekt ein neues Formular (nicht nur eine Unit) hinzu.
dann bindest du die Unit in deine aufrufen unit ein (uses).
dann kannst du das formular über deinen Menüpunkt per Formularname.Show anzeigen.
Gruß Frank
agent_x - Fr 10.08.07 22:38
hi wo und was muss man den in uses eintragen?
Das steht jetzt bei mir:
Delphi-Quelltext
1: 2: 3: 4: 5:
| uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBClient, MConnect, SConnect, Menus, ExtCtrls, ImgList, TypInfo, WebServExp, WSDLBind, XMLSchema, WSDLPub, StdCtrls, ComCtrls, DBXpress, SqlExpr, FMTBcd, jpeg, OleCtrls, SHDocVw; |
_frank_ - Fr 10.08.07 22:42
den namen der unit, wo das form definiert ist, ohne Endung (also vermutlich unit2 solange du die unit nicht umbenannt hast oder du bereits eine andere unit2 hast).
ui...hast ziemlich viel bei dir in der uses (grade über die Typinfo,OleCtrls und SHDocVw wundere ich mich, weil dafür sollte eigentlich schon bisschen Wissen dahinter stehen, um die zu nutzen).
Frank
agent_x - Fr 10.08.07 22:55
Moin,
also jetzt hab ich meine uses glaub ich richtig verändert:
Delphi-Quelltext
1: 2: 3: 4: 5:
| uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBClient, MConnect, SConnect, Menus, ExtCtrls, ImgList, TypInfo, WebServExp, WSDLBind, XMLSchema, WSDLPub, StdCtrls, ComCtrls, DBXpress, SqlExpr, FMTBcd, jpeg, OleCtrls, SHDocVw,About; |
Hier mein ganzer Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111:
| unit probe2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBClient, MConnect, SConnect, Menus, ExtCtrls, ImgList, TypInfo, WebServExp, WSDLBind, XMLSchema, WSDLPub, StdCtrls, ComCtrls, DBXpress, SqlExpr, FMTBcd, jpeg, OleCtrls, SHDocVw,About; type TForm1 = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; Optionen1: TMenuItem; Hilfe1: TMenuItem; beruns1: TMenuItem; rueCombatElite1: TMenuItem; WolfensteinEnemyTerritory1: TMenuItem; Spiel1: TMenuItem; berdenClan1: TMenuItem; Server1: TMenuItem; Server2: TMenuItem; SpielStarten1: TMenuItem; SpielStarten2: TMenuItem; Exit1: TMenuItem; StartTheAllSeeingAye1: TMenuItem; N1: TMenuItem; Background: TImage; Label1: TLabel; Label3: TLabel; procedure beruns1Click(Sender: TObject); procedure Label3Click(Sender: TObject); procedure StartTheAllSeeingAye1Click(Sender: TObject); procedure Server1Click(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure Server2Click(Sender: TObject); procedure SpielStarten1Click(Sender: TObject); procedure SpielStarten2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin CLOSE end;
procedure TForm1.SpielStarten2Click(Sender: TObject); begin WinExec('"D:\Programme\Wolfenstein - Enemy Territory\ET.exe" +set fs_game tcetest +set com_hunkMegs 192 +set com_zoneMegs 64 +set com_soundMegs 64',1); end;
procedure TForm1.SpielStarten1Click(Sender: TObject); begin WinExec('D:\Programme\Wolfenstein - Enemy Territory\ET.exe',1); end;
procedure TForm1.Server2Click(Sender: TObject); begin WinExec('D:\Programme\Wolfenstein - Enemy Territory\ETDED.exe +set fs_game -=cyber_mod=- +exec server.cfg',1); end;
procedure TForm1.Exit1Click(Sender: TObject); begin CLOSE end;
procedure TForm1.Server1Click(Sender: TObject); begin WinExec('D:\Programme\Wolfenstein - Enemy Territory\ETDED.exe +set fs_game tcetest +exec server.cfg',1); end;
procedure TForm1.StartTheAllSeeingAye1Click(Sender: TObject); begin WinExec('"D:\Programme\The All-Seeing Eye\eye.exe"',1);
end;
function GetUsername: String; var Buffer: array[0..255] of Char; Size: DWord; begin Size := SizeOf(Buffer); if not Windows.GetUserName(Buffer, Size) then RaiseLastOSError; SetString(Result, Buffer, Size - 1);
end;
procedure TForm1.Label3Click(Sender: TObject); begin Label3.Caption := GetUsername; end;
procedure TForm1.beruns1Click(Sender: TObject); begin FormularAbout.Show end;
end. |
köntest du mir bitte sagen wo das Problem ist?
_frank_ - Fr 10.08.07 22:59
was kommt für ein fehler? dass FormularAbout nicht gefunden wird (undefinierter Bezeichner)?
ist in der about.pas ein FormularAbout:TFormularAbout (oder andere Form-Klasse) definiert?
ggf. mal die about.pas posten
oder wird about in der uses nicht gefunden? hast du diese hinzugefügt (taucht diese in dem Projektquelltext/Units-Liste auf)?
Gruß Frank
agent_x - Fr 10.08.07 23:02
hier die abuot.pas:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| unit About;
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls;
type TAboutBox = class(TForm) Panel1: TPanel; ProgramIcon: TImage; ProductName: TLabel; Version: TLabel; OKButton: TButton; procedure OKButtonClick(Sender: TObject); private public end;
var AboutBox: TAboutBox;
implementation
{$R *.dfm}
procedure TAboutBox.OKButtonClick(Sender: TObject); begin EXIT end;
end. |
_frank_ - Fr 10.08.07 23:03
dann AboutBox.show (statt FormularAbout.show) :) (siehe Zeile 23)
Gruß Frank
agent_x - Fr 10.08.07 23:07
in der about.pas? so:?
Delphi-Quelltext
1: 2: 3:
| var AboutBox: TAboutBox; AboutBox: AboutBox.show; |
_frank_ - Fr 10.08.07 23:09
nein, in deiner probe2.pas, wo du vorhin geschrieben hast FormularAbout.show, das einfach durch aboutbox.show ersetzen.
Frank :?!?:
agent_x - Fr 10.08.07 23:12
ok,
vielendank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!