Statusbar aktualisiert nicht
Statusbar aktualisiert nicht
Hallo,
ich mache momentan meine ersten Schritte in Lazarus und habe ein Verständnisproblem:
Ich habe ein Kommandozeilen-Programm erstellt, das nacheinander die in ParamStr übergebenen Bilder lädt und (mit einigen Modifikationen) an ein externes Programm übergibt, das sie seinerseits weiter modifiziert.
Das klappt alles ganz gut; doch nun fehlen mir einige Funktionalitäten. So würde ich gerne den Verarbeitungsfortschritt grafisch durch einen Fortschrittsbalken sichtbar machen. Außerdem möchte ich, dass man über eine GUI bestimmte Grundeinstellungen des Programms verändern kann, sofern es ohne Parameter aufgerufen wurde (also Paramcount = 0 ist).
Ich müsste also das Konsolenprogramm irgendwie in ein GUI-Programm umwandeln, das in einem eigenen Fenster läuft. Wie mache ich das? Wenn ich ein neues GUI-Projekt erstelle, erhalte ich eine UNIT mit einem Form. Dort kann ich zwar Buttons einfügen etc.; ich weiß aber nicht, wie ich in diesem Form etwas laufen lasse, ohne vorher ein Event (wie z.B. einen Mausklick auf einen Button) ausgelöst zu haben.
Ich hoffe, ich habe mein Problem verständlich ausgedrückt... Danke jedenfalls für euren Input!
ich mache momentan meine ersten Schritte in Lazarus und habe ein Verständnisproblem:
Ich habe ein Kommandozeilen-Programm erstellt, das nacheinander die in ParamStr übergebenen Bilder lädt und (mit einigen Modifikationen) an ein externes Programm übergibt, das sie seinerseits weiter modifiziert.
Das klappt alles ganz gut; doch nun fehlen mir einige Funktionalitäten. So würde ich gerne den Verarbeitungsfortschritt grafisch durch einen Fortschrittsbalken sichtbar machen. Außerdem möchte ich, dass man über eine GUI bestimmte Grundeinstellungen des Programms verändern kann, sofern es ohne Parameter aufgerufen wurde (also Paramcount = 0 ist).
Ich müsste also das Konsolenprogramm irgendwie in ein GUI-Programm umwandeln, das in einem eigenen Fenster läuft. Wie mache ich das? Wenn ich ein neues GUI-Projekt erstelle, erhalte ich eine UNIT mit einem Form. Dort kann ich zwar Buttons einfügen etc.; ich weiß aber nicht, wie ich in diesem Form etwas laufen lasse, ohne vorher ein Event (wie z.B. einen Mausklick auf einen Button) ausgelöst zu haben.
Ich hoffe, ich habe mein Problem verständlich ausgedrückt... Danke jedenfalls für euren Input!
Zuletzt geändert von Fraenzken am Mi 17. Feb 2016, 11:27, insgesamt 1-mal geändert.
Re: Programm in Fenster laufen lassen
Du kannst OnCreate oder OnShow des Formulars verwenden.
Re: Programm in Fenster laufen lassen
Vielen Dank, Theo. Irgendwie durchblicke ich das Ganze aber noch nicht.theo hat geschrieben:Du kannst OnCreate oder OnShow des Formulars verwenden.
Um mal ganz einfach anzufangen: Ich habe eine neue grafische FreePascal-Anwendung erstellt. Der Editor zeigt Unit1:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;
type
TForm1 = class(TForm)
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
end.
Re: Programm in Fenster laufen lassen
Ach du liebe Zeit. Du hast gar keinen Plan?
Schau mal hier. http://www.delphi-treff.de/tutorials/vc ... r-rechner/
Das ist zwar für Delphi, aber es fast gleich.

Schau mal hier. http://www.delphi-treff.de/tutorials/vc ... r-rechner/
Das ist zwar für Delphi, aber es fast gleich.
Re: Programm in Fenster laufen lassen
Leider nein.theo hat geschrieben:Ach du liebe Zeit. Du hast gar keinen Plan?![]()


Ich glaube, das hilft mir schon weiter.theo hat geschrieben:Schau mal hier. http://www.delphi-treff.de/tutorials/vc ... r-rechner/
Das ist zwar für Delphi, aber es fast gleich.
Ich habe es übrigens zumindest schon geschafft, den Fenstertitel zu modifizieren und das Fenster maximiert zu starten.
Re: Programm in Fenster laufen lassen
Leider habe ich wieder ein Problem:
Ich habe eine Prozedur erstellt, die bei "Form1.Onactivate" ausgeführt wird. In dieser Prozedur werden die in der Kommandozeile übergebenen Bilder modifiziert.
Ich möchte im Fom1 einen Button integrieren, mit dem ich die Verarbeitung abbrechen kann. Leider erscheint dieser Button aber erst, wenn die Prozedur abgeschlossen ist (er ist dann also wertlos, weil ohnehin schon alles vorbei ist...). Ähnliches gilt für meine Statusbar, in der ich den Fortschritt in Prozent angeben möchte: Sie erscheint erst, wenn alles gelaufen ist (also bei 100%). Und das, obwohl ich in der bei onactivate aufgerufenen Prozedur explizit auf diese Statusbar schreibend zugreife. Was mache ich falsch?
Ich habe eine Prozedur erstellt, die bei "Form1.Onactivate" ausgeführt wird. In dieser Prozedur werden die in der Kommandozeile übergebenen Bilder modifiziert.
Ich möchte im Fom1 einen Button integrieren, mit dem ich die Verarbeitung abbrechen kann. Leider erscheint dieser Button aber erst, wenn die Prozedur abgeschlossen ist (er ist dann also wertlos, weil ohnehin schon alles vorbei ist...). Ähnliches gilt für meine Statusbar, in der ich den Fortschritt in Prozent angeben möchte: Sie erscheint erst, wenn alles gelaufen ist (also bei 100%). Und das, obwohl ich in der bei onactivate aufgerufenen Prozedur explizit auf diese Statusbar schreibend zugreife. Was mache ich falsch?
Re: Statusbar aktualisiert nicht
Ist halt singe threaded.
Du kannst in deiner lange andauernden Prozedur sporadisch im Loop: Application.Processmessages aufrufen.
Damit reagiert das GUI Programm auf allfällig anstehende Nachrichten wie Maus Clicks oder Updates beim Zeichnen.
Du kannst in deiner lange andauernden Prozedur sporadisch im Loop: Application.Processmessages aufrufen.
Damit reagiert das GUI Programm auf allfällig anstehende Nachrichten wie Maus Clicks oder Updates beim Zeichnen.
Re: Statusbar aktualisiert nicht
Klappt wunderbar, vielen Dank für deine Hilfe!theo hat geschrieben:Ist halt singe threaded.
Du kannst in deiner lange andauernden Prozedur sporadisch im Loop: Application.Processmessages aufrufen.
Damit reagiert das GUI Programm auf allfällig anstehende Nachrichten wie Maus Clicks oder Updates beim Zeichnen.