Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Konsolenfenster in VCL-Anwendung


Toz - Di 12.06.12 09:02
Titel: Konsolenfenster in VCL-Anwendung
Hallo,
ich bin dabei mir ein Programm zu schreiben um mit einer grafischen Oberfläsche GIT zu nutzen.
Ich möchte aber trotzdem das in dem VCL ein "echtest" Konsolenfenster ist in dem ich auch direkt die Befehele eingeben kann (also nicht eine schwarze edit box die alles in die konsole schreibt bzw. aus ihr heraus liest).
Jetzt ist aber genau das mein Problem ;)

Hat einer von euch eine Idee oder Tipp wie ich ein Konsolenfenster (cmd) innerhalb eines VCL Forms anzeigen kann?

Im Vorraus schon mal danke :)

Grüße
Toz


jaenicke - Di 12.06.12 09:22

Hallo und :welcome: im Forum!

Du kannst mit AllocConsole selbst eine Konsole anzeigen:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681944(v=vs.85).aspx


Toz - Di 12.06.12 11:50

Danke :)

Ähmm, wie baue ich die Konsole den dann ein, werd aus dem link nicht wirklich schlau^^


bummi - Di 12.06.12 12:01


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:
unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm5 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FConsoleAllocated:Boolean;
    procedure WriteConsole(const s: String);
  public
    { Public-Deklarationen }
  end;

var
  Form5: TForm5;

implementation

{$R *.dfm}

Procedure TForm5.WriteConsole(Const s:String);
begin
  if FConsoleAllocated then Writeln(s);

end;

procedure TForm5.Button1Click(Sender: TObject);
begin
  WriteConsole(FormatDateTime('hh:nn:ss.zzz',now));
end;

procedure TForm5.FormCreate(Sender: TObject);
begin
    FConsoleAllocated := Windows.AllocConsole;
end;

procedure TForm5.FormDestroy(Sender: TObject);
begin
   if FConsoleAllocated then FreeConsole;

end;

end.


Toz - Di 12.06.12 13:01

Danke, 2 Fragen haben ich doch noch :oops:

zum einen, ist es auch möglich die konsole im Form zu haben, also wie z.B. ein Panel.

und, ich habe mir die API angeguckt aber finde dort nicht die möglichkeit befehle in die konsole zu packen, wie z.B. 'dir', steh ich da aufm schlauch oder geht das nicht?


jaenicke - Di 12.06.12 13:13

Was willst du denn nun?Theoretisch findest du in der Doku aber auch Funktionen um in eine Konsole zu schreiben und daraus zu lesen:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681944.aspx
(WriteConsole usw., wie der Name schon sagt.)
Aber damit machst du dir das Leben nicht gerade einfacher...


Toz - Di 12.06.12 13:26

Eine eingebundene Konsole inklusive Kommunikation ;) die Idee mit dem Memo hatte ich auch schon, aber ich finde das unsauber, mir persönlich ist eine richtige Konsole innerhalb der Form lieber (Geschmackssache halt ;D).


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm2.Button1Click(Sender: TObject);
begin
  WriteConsole(FormatDateTime('hh:nn:ss.zzz',now));
  WriteConsole('dir');
end;


Habe ich versucht, aber er schreibt mir nur 'dir' rein, logisch, aber ich will auch das er den befehl ausführt, das tut er leider nicht.... :(


bummi - Di 12.06.12 14:19

Eine Konsole ist ja kein CMD oder Command, sondern eine Ein/Ausgabemedium
Wenn Du CMD fernsteuern willst kannst Du Dir den Anhang mal anschauen


Toz - Di 12.06.12 14:33

danke, dann muss ich leider doch mit memo arbeiten :( .


Delete - Di 12.06.12 14:53

RunDosInMemo

http://delphi.about.com/cs/adptips2001/a/bltip0201_2.htm?rd=1