Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Console in Delphiprogramm? (https://www.delphipraxis.net/36123-console-delphiprogramm.html)

Sprint 16. Dez 2004 14:02

Re: Console in Delphiprogramm?
 
Zitat:

Zitat von freak4fun
Nein, da war noch nicht das richtige dabei. Gibt diese Console nicht als Komponente so wie zB das Memo?

Ich glaube in JVCL ist so eine Komponente bei.

Shaman 17. Dez 2004 10:26

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:
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;
Meine Frage: Wie lässt sich nun noch die Titelleiste ausblenden, damit man die Konsole nicht mehr verschieben kann?
Delphi-Quellcode:
assert(SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) and not WS_CAPTION) <> 0);
geht irgendwie nicht bei Konsolen... :(

Gruss
Shaman

freak4fun 17. Dez 2004 10:43

Re: Console in Delphiprogramm?
 
Titelleiste ausblenden vom Form?

Delphi-Quellcode:
BorderStyle := bsNone;
mffg
freak

Shaman 17. Dez 2004 10:53

Re: Console in Delphiprogramm?
 
Hoi

Nein, ich meine doch bei der Konsole :wink:

Gruss
Shaman

freak4fun 17. Dez 2004 11:19

Re: Console in Delphiprogramm?
 
Hm.. ich komm damit gar nicht klar. :cry:

mfg
freak

ogiesen 21. Dez 2004 22:33

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:
http://prdownloads.sourceforge.net/j...a.zip?download
http://jvcl.sourceforge.net/daily/JVCL3-2004-12-21.zip
(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! :)

freak4fun 3. Jan 2005 09:16

Re: Console in Delphiprogramm?
 
*hehe* Danke! :thumb:

mfg
freak

LoRd-MuldeR 26. Dez 2005 01:41

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 13:04 Uhr.
Seite 2 von 2     12   

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