![]() |
Console in Delphiprogramm?
Hallo!
Kann ich dieses Konsolenfenster, das man mit cmd öffnet auch in ein Delphiprogramm einbinden? Also einmal um es wie die cmd zu nutzen und einmal um es nur als Ausgabefnster für Text zu nutzen? Wenn ja wie realisier ich das? Also wie spreche ich das ding dann an?! Ist es vielleicht auch Möglich auf Pascalprogramme zuzugreifen? So viele Fragen und kaum Antworten. Bitte helft mir. Ich nehme auch gern Suchbegriffe an unter denen ich noch mehr finden kann. mfg freak |
Re: Console in Delphiprogramm?
Zum einen kannst du ein eigenes Konsolenprogramm schreiben. Dann hast du noch mit AllocConsole & FreeConsole die Möglichkeit zusätzlich zu deinem GUI Programm eine Konsole zu starten.
Dritte Möglichkeit wäre, das StdInput & StdOutput der fremden Konsolenanwendung z.B. in ein Memo umzuleiten. |
Re: Console in Delphiprogramm?
Hm... hab zwar nichts verstanden, werds mir aber anschauen.
Zur 3. Mgl.: Genau das will ich nicht machen. ICh möchte das Memo so zu sagen durch das Konsolenfenster ersetzen und dann zum Beispiel wenn ich einen Butten drücke einen Text aus einem Editfeld in diesem Fenster ausgeben lasse. mfg und danke freak |
Re: Console in Delphiprogramm?
@Freak: Google mal nach
![]() ![]() |
Re: Console in Delphiprogramm?
Oder einfach mit
Delphi-Quellcode:
die Console anzeigen und mit
AllocConsole;
Delphi-Quellcode:
diese wieder ausblenden ;-)
FreeConsole;
...:cat:... |
Re: Console in Delphiprogramm?
@ sakura: Aber da wird einfach nur die console auf gemacht. Ich hätte sie gern ale Bestandteil meines Programms.
------------------------------------------------- | Programm | | ------------------------------------ | | |Console | | | | | | | | | | | | | | | | | | | ------------------------------------ | | | | ------------------------------------ | | |EditFeld | | | ------------------------------------ | | | | ---------------- | | | Button | | | ---------------- | | | ------------------------------------------------- So soll das ungefär aussehen. :zwinker: mfg freak |
Re: Console in Delphiprogramm?
Zitat:
|
Re: Console in Delphiprogramm?
@ Jelly: Nein. Ich will das gern, aber ich muss erst meina nderes Projekt(Maiky-Gen) abschließen, soll doch OS oder zumindest Freeware sein.
Und weil ihr euch so Mühe gebt wollte ich auch schnell antworten. Sry. :cyclops: mfg freak |
Re: Console in Delphiprogramm?
Nein, da war noch nicht das richtige dabei. Gibt diese Console nicht als Komponente so wie zB das Memo?
mfg freak |
Re: Console in Delphiprogramm?
Hier mal ein Anfang, den Rest überlasse ich Deiner Experimentierfreudigkeit :zwinker:
Erstelle ein Form mit einem Panel und einem Button (ausserhalb des Panels). In und um den Button OnClick Handler kommt folgender Code:
Delphi-Quellcode:
...:cat:...
function GetConsoleWindow: HWND; stdcall; external kernel32 name 'GetConsoleWindow';
function SetConsoleDisplayMode(hConsoleOutput: HWND; dwFlags: DWORD; lpNewScreenBufferDimensions: PCOORD): BOOL; stdcall; external kernel32 name 'SetConsoleDisplayMode'; procedure TForm1.Button1Click(Sender: TObject); begin if AllocConsole then begin Windows.SetParent(GetConsoleWindow, Panel1.Handle); ShowWindow(GetConsoleWindow, SW_MAXIMIZE); SetWindowText(GetConsoleWindow, 'Mein Console Window'); Button1.SetFocus; end; end; |
Re: Console in Delphiprogramm?
Zitat:
|
Re: Console in Delphiprogramm?
Hallo zusammen
Ich hab mir mit Code aus dem Forum mal folgendes zusammengebastelt, um eine Konsolenanwendung innerhalb meiner Form anzuzeigen:
Delphi-Quellcode:
Meine Frage: Wie lässt sich nun noch die Titelleiste ausblenden, damit man die Konsole nicht mehr verschieben kann?
function RunConsoleApp(const FileName: string; const Parent: THandle): THandle;
function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall; begin TList(lParam).Add(Pointer(hWnd)); Result := True; end; var SI: TStartupInfo; PI: TProcessInformation; List: TList; ProcessId: DWORD; Console: THandle; I: Integer; begin Result:= 0; FillChar(SI, SizeOf(TStartupInfo), 0); SI.cb := SizeOf(TStartupInfo); SI.dwFlags := STARTF_USESHOWWINDOW; SI.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar(FileName), nil, nil, False, 0, nil, nil, SI, PI) then try Console:= 0; List:= TList.Create; try repeat List.Clear; if EnumWindows(@EnumWindowsProc, Longint(List)) then begin for I := 0 to List.Count - 1 do begin GetWindowThreadProcessId(Longint(List.Items[I]), ProcessId); if PI.dwProcessId = ProcessId then begin Console:= Longint(List.Items[I]); Break; end; end; end; until Console <> 0; finally List.Free; end; finally CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end; if Console <> 0 then begin SetParent(Console, Parent); SetWindowPos(Console, 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_SHOWWINDOW); Result:= Console; end; end;
Delphi-Quellcode:
geht irgendwie nicht bei Konsolen... :(
assert(SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) and not WS_CAPTION) <> 0);
Gruss Shaman |
Re: Console in Delphiprogramm?
Titelleiste ausblenden vom Form?
Delphi-Quellcode:
mffg
BorderStyle := bsNone;
freak |
Re: Console in Delphiprogramm?
Hoi
Nein, ich meine doch bei der Konsole :wink: Gruss Shaman |
Re: Console in Delphiprogramm?
Hm.. ich komm damit gar nicht klar. :cry:
mfg freak |
Re: Console in Delphiprogramm?
:warn: Du hätest Dich Freitag nur mal nach hinten umdrehen müssen, dann hätte ich Dir zeigen können, wo Du sogar schon zwei verschiedene solcher Komponenten auf Deiner Platte hast. ;)
Da Du ja aber eine OpenSource-Komponente für den Heimgebrauch haben wolltest, kommt von den beiden eh nur TJvCreateProcess in Frage. Wirf doch einfach mal einen Blick auf das ConsoleExample Projekt aus dem JvCreateProcess Beispiel der JVCL. Das macht ziemlich genau das, was Du wolltest. Downloads gibt's hier: ![]() ![]() (beides benötigt) Beide nebeneinander auspacken und dann nacheinander jcl/Install.bat und jvcl/Install.bat ausführen. Sollte eigentlich klappen. Ich installier selbst allerdings immer direkt aus CVS anstatt von den ZIPs und für den Firmengebrauch verwenden wir unsere ganz eigenen Packages. Garantieren tu ich also für nix. :zwinker: Das ist zwar ein ziemlich happiger Download für so ein kleines Problem (ca. 22 MB alles zusammen), aber im fertigen Programm landet ja hinterher nur ein kleiner Bruchteil und der Rest der beiden Bibliotheken sollte ohnehin auf keinem (Delphi-)Entwicklerrechner fehlen. :???: Viel Glück, Frohes Fest und Guten Rutsch! :) |
Re: Console in Delphiprogramm?
*hehe* Danke! :thumb:
mfg freak |
Re: Console in Delphiprogramm?
Ich hab leider die Erfahrung gemacht, dass die Umleitung des Konsolen-Output nur bei bestimmten Konsolen-Programmen funktioniert. Manchmal wird gar nix oder mit starker Verzögerung ausgegeben und manchmal geht deine CPU-Verbauch der GUI Anwendung auf 99% hoch (z.B. wenn das Konsolenprogramm alle paar Millisekunden neue Startus-Infos ausgibt)
Naja, aber bisher is JvCreateProcess der einzige Weg, der halbwegs zuverlässig funktioniert... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 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