Autor Beitrag
nullplan001
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 212

Win 2000 Professional, Debian Linux 4.0 (Etch,Stable)
Pascal (FreePascal 2.0.2, TurboPascal 7.0), C(++) (G++/GCC 3.4.2 + MinGW), Java (JDK 1.5.0_07), PHP (PHP 5.1.4)
BeitragVerfasst: Sa 03.06.06 21:04 
Hi all,
ich möchte ein SplashForm erstellen, also ein Formular, dass nur kurz erscheint, um bestimmte Informationen anzuzeigen. Also habe ich mir ein Formular geschrieben, dass Nur ganz wenig Inhalt hat und mir als SplashScreen herhalten soll. In der Methode main() halte ich dann mein Programm 5 Sekunden an. Sieht so aus:
ausblenden Chrome-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
method main;
var spl : SplashForm := new SplashForm;
begin
  spl.Show;
  new Thread(new ThreadStart(@main)).Sleep(new Timespan(0,0,5));
  spl.Close;
  Application.Run(new MainForm);
end;

So, wenn ich das kompiliere, wird mein SplashForm dargestellt, aber die Controls (2 Labels) nicht. An der Stelle sind immer Löcher. Kann ich das SplashForm irgendwie anders genau 5 Sekunden lang darstellen lassen?
Tschö,
nullplan
P.S.: Nein, kein Application.Run, weil ich das nur mit Application.Exit abbrechen kann, aber dann ist gleich das ganze Programm tot.

_________________
Ich fahr' nicht selber, weil ich festgestellt habe: ich fahre zu emotional. Bin 180 gefahren wo 30 erlaubt war... -- Jürgen von der Lippe
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 05.06.06 15:32 
Könntest Du nicht eine Form mittels ShowDialog anzeigen mit einem Timer drauf, der sie noch 5 Sekunden schließt?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
nullplan001 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 212

Win 2000 Professional, Debian Linux 4.0 (Etch,Stable)
Pascal (FreePascal 2.0.2, TurboPascal 7.0), C(++) (G++/GCC 3.4.2 + MinGW), Java (JDK 1.5.0_07), PHP (PHP 5.1.4)
BeitragVerfasst: Mo 05.06.06 18:01 
Hi,
danke für deine Antwort, aber äh... ich habe mit .NET ziemliches Neuland betreten und leider keine Ahnung, wie ich einen Timer in ein Form integriere. ShowDialog habe ich gefunden. Es zu benutzen dürfte also nicht das Ding darstellen. Und... ich setze dann einfach im Constructor von SplashForm einen Timer... nur mit dem Constructor habe ich Probleme. Was ist ein TimerCallback? Kannst du mal die Zeile posten, in der du den Constructor benutzt? Ich habe nämlich auch nach der Lektüre des MSDN zu diesem Thema keine Ahnung, was ich machen soll. Meine erste Idee wäre:
ausblenden Chrome-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
//In der Form-Deklaration:
SplashForm = class (Form)
  public
    method OnTimer;
    time : System.Threading.Timer;
    {...}
end;
//Im Constructor:
time := new Timer(new TimerCallBack(nil),nil,5000,Timeout.Infinite);
//In OnTimer:
method OnTimer;
begin
  time.Dispose;
  self.Close;
end;

Nur: Wo wird denn im Constructor von time die Methode OnTimer erwähnt? Nirgends. Und wie krieg ich die da rein?
Tschö,
nullplan

_________________
Ich fahr' nicht selber, weil ich festgestellt habe: ich fahre zu emotional. Bin 180 gefahren wo 30 erlaubt war... -- Jürgen von der Lippe
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 05.06.06 18:36 
Hallo!

Sorry, ich meinte die Timer-Komponente, welche sich in System.Windows.Forms befindet. Die kannst Du wie jede andere Komponente auch benutzen. Die hat das Tick-Event, außerdem noch die Properties Interval und Enabled.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
nullplan001 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 212

Win 2000 Professional, Debian Linux 4.0 (Etch,Stable)
Pascal (FreePascal 2.0.2, TurboPascal 7.0), C(++) (G++/GCC 3.4.2 + MinGW), Java (JDK 1.5.0_07), PHP (PHP 5.1.4)
BeitragVerfasst: Di 06.06.06 17:00 
Hi,
du meinst also so hier?
ausblenden Chrome-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
constructor SplashForm;
begin
  {neben all dem anderen}
  Timer.Enabled := true;
  Timer.Interval := 5000;
  OnTick += new EventHandler(Tick);
  {...}
end;
method SplashForm.Tick(o:Object;e:EventArgs);
begin
  Timer.Enabled := false;
  Close;
  Dispose; {brauchs dann ja nicht mehr}
end;

So in etwa? Ist jetzt aus dem Bauch geschrieben, ich probiers gleich noch aus.
Tschö,
nullplan

_________________
Ich fahr' nicht selber, weil ich festgestellt habe: ich fahre zu emotional. Bin 180 gefahren wo 30 erlaubt war... -- Jürgen von der Lippe
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 07.06.06 09:55 
nullplan001 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 212

Win 2000 Professional, Debian Linux 4.0 (Etch,Stable)
Pascal (FreePascal 2.0.2, TurboPascal 7.0), C(++) (G++/GCC 3.4.2 + MinGW), Java (JDK 1.5.0_07), PHP (PHP 5.1.4)
BeitragVerfasst: Mi 07.06.06 17:01 
Hi,
danke für den Link, aber jetzt bekomme ich Probleme mit Chrome. In diesem Artikel werden statische Methoden verwendet. Und wie werden die in Chrome implementiert? Ich habe es bereits mit dem Modifier static versucht, aber das klappt nicht (der wird nicht erkannt), in der Hilfe zu Chrome steht auch nix brauchbares und wenn ich es einfach ohne alles versuche, klappt es zwar, aber nur bei public-Methoden, bei private verlangt er eine Instanz. Aber der Witz an static-Methoden war ja, nicht extra eine solche erstellen zu müssen. Da werde ich mal Google quälen gehen.
Tschö,
nullplan

_________________
Ich fahr' nicht selber, weil ich festgestellt habe: ich fahre zu emotional. Bin 180 gefahren wo 30 erlaubt war... -- Jürgen von der Lippe
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 07.06.06 17:10 
In Chrome sind das die "class methods".

ausblenden Chrome Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type
  MyType = class
    public
      class method DoFoo;
    end;

implementation

class mehtod MyType.DoFoo;
begin
...
end;

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
nullplan001 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 212

Win 2000 Professional, Debian Linux 4.0 (Etch,Stable)
Pascal (FreePascal 2.0.2, TurboPascal 7.0), C(++) (G++/GCC 3.4.2 + MinGW), Java (JDK 1.5.0_07), PHP (PHP 5.1.4)
BeitragVerfasst: Mi 07.06.06 18:55 
Hi,
danke für die Antwort. Interessant, was sich die Leute so ausdenken. Naja, egal, ich habe jetzt mein Projekt class-method-frei hingekriegt, und schon kommt das nächste Problem: Also, erstens habe ich festgestellt, dass ich falsch lag. Wenn man in der Methode main eine Application.Run-Zeile hat, wird das Programm mit Application.Exit selbstverständlich komplett terminiert. Hat man jedoch zwei Application.Run-Zeilen, wird mit Application.Exit nur das momentane Formular gekillt und mit dem nächsten fortgefahren. Deshalb ist mein Quelltext auch sehr einfach gehalten. Ich vereinbare im Constructor meines SplashForms lediglich einen Timer (der im übrigen privater Member des Formulars ist), und lasse im OnTick das momentane Formular schließen. Mit Application.Exit .
Nun aber das Problem: Wenn ich jetzt GPLSplash in die uses-Klausel eines anderen Programmes aufnehme, wird mir gemeldet:
ausblenden Quelltext
1:
2:
  C:\chrome\binkoff.pas(9,4) : Error : (PE17) Namespace "GPLSplash" does not exist or has no public
types

was aber schlicht falsch ist, da ich den Namespace als Library habe kompilieren lassen (auch das Hinzufügen des Pfades in die Komandozeile nützt nichts)(ja, ich habe in der Komandozeile eine Referenz auf diese Library angelegt).
Nun frage ich mich, wie ich einen selbstgemachten Namespace in mein Projekt integrieren kann? Nebenbei: Ich benutze die Comand Line Edition, also kommt mir bitte nicht mit "Auf Projekt klicken und dann im Menü...". Ich hab noch nicht mal Visual Studio, sodass mir auch ein Runterladen der IDE-Edition nichts bringen würde.
Nochmal zum Mitmeißeln:
Dateiname der Library: gplsplash.dll
Namespacename: GPLSplash
Klassenname: SplashForm (hat auch nen constructor, aber das war's an public-Zeug, der Rest ist private, damit mir keiner an den Texten rumspielt. Oder an den Größen. Oder an den Positionen. Oder was man sonst noch so verändern könnte, wenn es public wäre)
Tschö,
nullplan

_________________
Ich fahr' nicht selber, weil ich festgestellt habe: ich fahre zu emotional. Bin 180 gefahren wo 30 erlaubt war... -- Jürgen von der Lippe