Statusbar aktualisiert nicht

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...

Statusbar aktualisiert nicht

Beitragvon Fraenzken » 16. Feb 2016, 20:15 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!
Zuletzt geändert von Fraenzken am 17. Feb 2016, 11:27, insgesamt 1-mal geändert.
Fraenzken
 
Beiträge: 24
Registriert: 10. Feb 2016, 10:30

Beitragvon theo » 16. Feb 2016, 20:40 Re: Programm in Fenster laufen lassen

Du kannst OnCreate oder OnShow des Formulars verwenden.
theo
 
Beiträge: 8046
Registriert: 11. Sep 2006, 18:01

Beitragvon Fraenzken » 16. Feb 2016, 21:02 Re: Programm in Fenster laufen lassen

theo hat geschrieben:Du kannst OnCreate oder OnShow des Formulars verwenden.

Vielen Dank, Theo. Irgendwie durchblicke ich das Ganze aber noch nicht.
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.


Mal angenommen, ich möchte Form1 nur nutzen, um darin etwas zu schreiben (z.B. "Writeln ('Wilkommen!')") - ohne vorheriges Event. Wie gehe ich dann vor? Muss ich dazu die lpr-Datei bearbeiten? Falls ja: Wie sorge ich dafür, dass das, was ich schreibe, in Form1 auftaucht? Und nicht in irgendeinem Konsolenfenster oder sonstwo?
Fraenzken
 
Beiträge: 24
Registriert: 10. Feb 2016, 10:30

Beitragvon theo » 16. Feb 2016, 21:08 Re: Programm in Fenster laufen lassen

Ach du liebe Zeit. Du hast gar keinen Plan? :wink:

Schau mal hier. http://www.delphi-treff.de/tutorials/vc ... r-rechner/
Das ist zwar für Delphi, aber es fast gleich.
theo
 
Beiträge: 8046
Registriert: 11. Sep 2006, 18:01

Beitragvon Fraenzken » 16. Feb 2016, 21:18 Re: Programm in Fenster laufen lassen

theo hat geschrieben:Ach du liebe Zeit. Du hast gar keinen Plan? :wink:


Leider nein. :( Ich konnte mal Turbo-Pascal :wink:

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 glaube, das hilft mir schon weiter.
Ich habe es übrigens zumindest schon geschafft, den Fenstertitel zu modifizieren und das Fenster maximiert zu starten.
Fraenzken
 
Beiträge: 24
Registriert: 10. Feb 2016, 10:30

Beitragvon Fraenzken » 17. Feb 2016, 11:27 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?
Fraenzken
 
Beiträge: 24
Registriert: 10. Feb 2016, 10:30

Beitragvon theo » 17. Feb 2016, 11:48 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.
theo
 
Beiträge: 8046
Registriert: 11. Sep 2006, 18:01

Beitragvon Fraenzken » 17. Feb 2016, 12:09 Re: Statusbar aktualisiert nicht

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.


Klappt wunderbar, vielen Dank für deine Hilfe!
Fraenzken
 
Beiträge: 24
Registriert: 10. Feb 2016, 10:30

• Themenende •

Zurück zu Multimedia



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron
porpoises-institution
accuracy-worried