AGB  ·  Datenschutz  ·  Impressum  







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

Form aus DLL. Problem mit JVWaitGradient!

Offene Frage von "Sillium"
Ein Thema von Sillium · begonnen am 22. Aug 2005 · letzter Beitrag vom 5. Sep 2005
Antwort Antwort
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#1

Form aus DLL. Problem mit JVWaitGradient!

  Alt 22. Aug 2005, 21:37
Hallo,

nachdem ich jetzt schon den halben Tag in verschiedenen Delphi-Foren nach Lösungen gesucht hab frag ich jetzt hier mal nach ner Lösung.

Also mein Problem:

Ich habe mir eine Dll erstell, in der alle meine standart funktionen untergebracht sind. Die funktionieren alle auch ganz fein!!

Eine dieser Funktionen ist etwas Zeitaufwendiger und um diese Zeit zu überbrücken oder zu zeigen, dass was passiert, erstelle ich in der DLL eine Splash-Form mit der Jedi-Komponete JVWaitGradient (quasi eine ProgressBar in der immer ein Balken hin und her läuft) und nachdem die funktion zuende ist wird auf der vorm ein Panel erzeugt, dass darazf hinweist, dass diese fertig ist (kleine Spielerei!!). Die Form, Komponente und Panel wird auch alles sauber angezeigt. Allerdings sollte wie gesagt ein Balken in meinem JVWaitGradient hin und herlaufen, doch der Balken steht und macht nix!

Erst mal die Frage:

WARUM???

Und jetzt ein bißchen Code:

Code:
  .
  .
  .
  .
Splash2:=TSplash2.Create(Application);
      JvWaitingGradient2:=TJvWaitingGradient.Create(nil);
      with JvWaitingGradient2 do
      begin
        Parent:=Splash2.JvPanel1;
        Left := 1;
        Top := 1;
        Width := 248;
        Height := 18;
        Active := True;
        Align := alClient;
        Color := 4479052;
        GradientWidth := 150;
        EndColor := 7391439;
        ParentColor := False;
        AlwaysRestart := True;
        StartColor := 4958149;
      end;
      Splash2.JVLabel1.Font.Size := 10;
      Splash2.JVLabel1.Caption := 'Installing ' + name + '...';
      Splash2.Show;
      Splash2.Update;
             .
             .
      //Mach was!
             .
             .
      JvPanel:=TJvPanel.Create(nil);
      with JvPanel do
        begin
          Parent:=Splash2;
          Caption:='Installing done!';
          Width:=250;
          Height:=50;
          Left:=25;
          Top:=5;
          Font.Color := clWhite;
          Font.Size :=14;
          Font.Style := [fsBold];
          Flatbordercolor := $00556F60;
          Flatborder:= true;
          Color:= $00556F60;
      end;
      Splash2.Update;
      sleep(1000);
      Splash2.Close;
      Splash2.Release;
Ich hab grad festgestellt, dass ich das auch alles in einer extra prozedur machen kann, aber des ist ja erstmal wurst!

Hoffe mein Problem ist klar geworden!!

Danke soweit!
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#2

Re: Form aus DLL. Problem mit JVWaitGradient!

  Alt 4. Sep 2005, 13:17
Bevor ich dieses Problem nochmal poste und hoffe, dass so jemand darüberstopert, der ne Antwort weiß, Antworte ich mir mal selbst und schiebe es so wieder nach vorne!!

Wenn das hier nicht erlaubt ist, dann tut mir mein sträfliches Verhalten leid!

So jetzt hoffe ich nur noch, dass jemand ne Antwort hat!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Form aus DLL. Problem mit JVWaitGradient!

  Alt 4. Sep 2005, 20:25
pushen ist ab 24 Stunden Wartezeit erlaubt

Nun, das Problem ist eigentlich ganz schnell erklärt:
Das ganze läuft im gleichen Thread, und in einem Thread können nicht zwei Dinge gleichzeitig(Laden und Animieren des Gradients) passieren.

Du musst also das anzeigen oder das Laden in einen eigenen thread auslagern.

Es wundert mich allerdings, dass die Komponente das nicht von sich aus macht....
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#4

Re: Form aus DLL. Problem mit JVWaitGradient!

  Alt 5. Sep 2005, 19:54
Danke für die Antwort!


Ich habe den Code der Komponente auch so verstanden, dass diese zu zeichnen einen eigenen Thread startet!

Delphi-Quellcode:
             .
             .
             .
             .
             .
constructor TJvWaitingGradient.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  {(rb) csOpaque included }
  ControlStyle := ControlStyle + [csOpaque];

  FBitmap := TBitmap.Create;

  FStartColor := clBtnFace;
  FEndColor := clBlack;
  FGradientWidth := 50;
  FLeftOffset := -FGradientWidth;
  FSourceRect := Rect(0, 0, FGradientWidth, Height);
  FDestRect := Rect(0, 0, FGradientWidth, Height);
  FFromLeftToRight := True;

  FScroll := TJvImageDrawThread.Create(True); <--------- Thread, der den laufenden Balken zeichnet!!
  FScroll.FreeOnTerminate := False;
  FScroll.Delay := 50;
  FScroll.OnDraw := Deplace;
  // (p3) don't set color: it will set ParentColor to False
// Color := clBtnFace;

  { (rb) Set the size properties last; will trigger Resize }
  // (rom) also always set the default values
  Height := 10;
  Width := 100;
end;
             .
             .
             .
             .
             .
             .
             .
Hab allerdings noch nicht ausprobiert für das zeichnen selbst einen Thread zu starten!
Mach ich aber gleichmal!
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Form aus DLL. Problem mit JVWaitGradient!

  Alt 5. Sep 2005, 20:47
Das eigentliche Zeichnen passiert im Hauptthread, weil die VCL nicht threadsafe ist. Und das TThread.Synchronize fügt eine Botschaft in die MessageQueue des Application.Handles ein. Wenn also kein Application.ProcessMessages, oder Application.Run die Botschaft abarbeitet, steht der Thread.
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#6

Re: Form aus DLL. Problem mit JVWaitGradient!

  Alt 5. Sep 2005, 21:29
Ok,

ich kann dir vom Prinzip her folgen!

Aber was heißt das konkret??

Wie müßte ich dann die Botschaft abarbeiten??

Code-Beispiel?

Oder wo finde ich denn eine kurze zusammenfassung von der Theorie dazu??

Danke!!
  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 16:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz