Splash Screen transparant?

Rund um die LCL und andere Komponenten
Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Splash Screen transparant?

Beitrag von Mathias »

Und sobald die Main-App da ist wird ein Timer gestartet, dieser baut erst mal die Datenbankverbindung auf

Mit einem Timer ?
Oder lässt du den Splash mit dem Timer laufen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Splash Screen transparant?

Beitrag von MmVisual »

Wenn ich die Datenbank im FormShow öffne, dann zeigt sich kein Formular, damit das Formular in jedem Fall kommt, muss die Datenbank gezielt verzögert verbunden werden, denn bei Netzwerkproblemen kann das schon mal ein paar Sekunden dauern (bis es fehl schlägt).

Nein, das Splash wird so gestartet wie ich zuvor schon geschrieben habe, also noch bevor das Main-Formular überhaupt im RAM aufgebaut wird.

Nun habe ich noch eine ProgressBar in mein Splash eingebaut, damit man sieht wie weit der schon ist :D
EleLa - Elektronik Lagerverwaltung - www.elela.de

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Splash Screen transparant?

Beitrag von Mathias »

Mathias hat geschrieben:
Nur die ASM/Intel Direktive geht beim Raspi natürlich nicht, das ist ja ein ARM. Ich habe diese Zeile einfach auskommentiert.

Damit konnte ich das Bitschieben beschleunigen, aber wie du schon sagst, nicht auf ARM.

Bei Intel gibt es den Rol und Ror Befehl, dieser ist fast gleich wie Shl und Shr, der Unterschied, das die Bits wie in einem Ring geschoben werden.
Dazu muss folgendes ersetzt werden.

Code: Alles auswählen

        asm rol bit, 1 end;
//        bit := (bit shl 1) or (bit shr 7);
 

Ein Nachtrag, ror und rol ist in FPC eingebaut, dies lässt sich sogar für den Raspi kompilieren (Crosss-Compiler).

Code: Alles auswählen

      if rev then begin
        bit := RolByte(bit);
//        bit := bit shl 1;
        if bit = 0 then begin
//          bit := 1;
          Inc(pz);
        end;
      end else begin
        bit := RorByte(bit);
//        bit := bit shr 1;
        if bit = 0 then begin
//          bit := 128;
          Inc(pz);
        end;
      end;


Als Test habe ich dies auf dem PC 1000x durchlaufen, dabei habe ich eine Optimierung:
259ms --> 217ms

Code: Alles auswählen

  for i := 0 to 999 do begin  // Als Test
    with Image1.Picture.Bitmap do begin
      for y := 0 to Height - 1 do begin
        CopyLine(y);
      end;
    end;
  end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Splash Screen transparant?

Beitrag von MmVisual »

Schön dass man Assembler Befehle auch direkt als Funktion nutzen kann :D

Aber "IF bit = 0 Then ..." muss dann anders heißen, sonst stimmt das Ergebnis von Deinem Test nicht.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Splash Screen transparant?

Beitrag von Mathias »

Schön dass man Assembler Befehle auch direkt als Funktion nutzen kann :D

Ich hatte auch lieber rol und ror gehabt, so wie es mit shr und shl ist.

Aber "IF bit = 0 Then ..." muss dann anders heißen, sonst stimmt das Ergebnis von Deinem Test nicht.

Dies wird für pz gebraucht.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Splash Screen transparant?

Beitrag von MmVisual »

Code: Alles auswählen

      if rev then begin
        bit := RolByte(bit);
//        bit := bit shl 1;
        if bit = 1 then begin
//          bit := 1;
          Inc(pz);
        end;
      end else begin
        bit := RorByte(bit);
//        bit := bit shr 1;
        if bit = 128 then begin
//          bit := 128;
          Inc(pz);
        end;
      end;
EleLa - Elektronik Lagerverwaltung - www.elela.de

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Splash Screen transparant?

Beitrag von Mathias »

Dies habe ich übersehen. :oops:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten