AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form ansprechen während einer Bearbeitung

Ein Thema von Jens01 · begonnen am 11. Aug 2011 · letzter Beitrag vom 12. Aug 2011
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

AW: Form ansprechen während einer Bearbeitung

  Alt 11. Aug 2011, 16:48
Nein, er hat es nur komplizierter gemacht als nötig, weil er, warum auch immer, das Formular zur Laufzeit erstellt, was absolut unnötig ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Form ansprechen während einer Bearbeitung

  Alt 11. Aug 2011, 17:00
Nein, er hat es nur komplizierter gemacht als nötig, weil er, warum auch immer, das Formular zur Laufzeit erstellt, was absolut unnötig ist.
Unnötig oder gleichwertig? So habe ich das Beispiel schön in eine Unit gepresst.

Der einzige Unterschied ist die Methode CreateNew, die man sich sonst zusammenklickern anstatt tippen müsste.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#3

AW: Form ansprechen während einer Bearbeitung

  Alt 11. Aug 2011, 17:09
Ganz ruhig.
Mit "kompliziert" habe ich mich auf das ganze Thema bezogen. Eigentlich dachte ich, ich mache ein kleines Fenster auf mit einem Progressbar und einem Button und das wäre es schon fast, aber...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#4

AW: Form ansprechen während einer Bearbeitung

  Alt 11. Aug 2011, 17:12
Auf das Problem ist wohl jeder schon gestoßen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#5

AW: Form ansprechen während einer Bearbeitung

  Alt 11. Aug 2011, 18:05
In den Cindy-Komponenten habe ich ein ProgressPanel gefunden und das wie Folgt adaptiert.
Die Threadlösung ist derzeit etwas zu groß für mich.
Bei dieser Lösung frieren aber auch alle Fenster ein. Das Progressfenster zeigt aber die Bars an und der Button kann den Prozess canceln.
Delphi-Quellcode:
type
  TfrmProgress = class(TForm)
    pb2: TProgressBar;
    pb1: TProgressBar;
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
  public
    IsCanceled: Boolean;
    function ProcessMessages(var Msg: TMsg): Boolean; overload;
    procedure ProcessMessages; overload;
  end;

var
  frmProgress: TfrmProgress;

implementation

{$R *.dfm}

procedure TfrmProgress.ProcessMessages;
var
  Msg: TMsg;
  Cont: Boolean;
begin
  cont := ProcessMessages(Msg);

  while Cont do
    cont := ProcessMessages(Msg);
end;

procedure TfrmProgress.btn1Click(Sender: TObject);
begin
  IsCanceled := True;
end;

procedure TfrmProgress.FormShow(Sender: TObject);
begin
  pb1.Position := 0;
  IsCanceled := False;
end;

function TfrmProgress.ProcessMessages(var Msg: TMsg): Boolean;
var
  aHandle: HWND;
begin
  RESULT := false;
  if IsCanceled then
    EXIT;
  aHandle := 0; // aHandle := FPanel.Handle doesn' t work if you click outiside the panel before clicking panel's cancel button ...

  if PeekMessage(Msg, aHandle, 0, 0, PM_REMOVE) then
  begin
    Result := True;

    if Msg.hwnd = btn1.Handle then
    begin
      Windows.TranslateMessage(Msg);
      Windows.DispatchMessage(Msg);
    end
    else if Msg.message = WM_PAINT then // !!! Only WM_PAINT message are not removed from queue !!!
    begin // In order to go outside while Cont do, we need to dispatch the message //
      Windows.TranslateMessage(Msg);
      Windows.DispatchMessage(Msg);
    end;
  end;
end;
Die Berechnungsschleife:
Delphi-Quellcode:
frmProgress.Show;
for i:= 0 to 1000
begin
  Berechnung;
  frmProgress.ProcessMessages;
  if frmProgress.IsCanceled then
    break;
end;
frmProgress.Close;
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Form ansprechen während einer Bearbeitung

  Alt 12. Aug 2011, 09:06
Wenn es funktioniert ist es ok. Aber bedenke, dass du hier auch ein separate Messageschleife benutzt. Es ist zwar nicht die von TApplication(.ProcessMessages), sondern deine eigene (damit du Messages filtern kannst). Aber bei größeren Programmen bekommst du mit derartigen Konstrukten nur Probleme.
Lies Dir mal folgenden Beitrag von einem sehr geschätzten Informatiker durch (es geht um Delay, welches auch Application.ProcessMessages benutzt):
http://www.delphipraxis.net/739535-post17.html (zweiter Absatz)


Ich will Dir damit sagen: Früher oder später kommst du um Threads nicht herum. Kein ordentliches Programm kommt ohne Threads aus. Das ist nicht so kompliziert. Du solltest es dir an dem recht einfachen Beispiel einer Progressbar einmal ansehen.

mfg
sirius
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#7

AW: Form ansprechen während einer Bearbeitung

  Alt 12. Aug 2011, 12:03
@sirius
Gestern Nacht habe ich das noch zum Laufen bekommen. Und es funktioniert schon ganz gut. Ich glaube nicht, dass es sich so auswirkt wie negaH es beschieben hat. Da es nur eine Progressform ist, die nach der Berechnung beendet wird.
Grundsätzlich arbeite ich event-orientiert (außer an ein, zwei kleinen Stellen, aber ich bin ja kein Informatiker sondern komme vom Bau)

Du hast mich aber davon überzeugt mich damit zu beschäftigen!
Gruss Jens
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 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