| Autor |
Beitrag |
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Do 31.07.08 14:23
Hi,
ich würde gerne einen SplashScreen (Nur ein Bild) in eine DLL einbauen.
D.h. Der soll aus einer DLL angezeigt und versteckt werden.
Geht das auch ohne Formulare? Weil ich ja sonst die Forms unit einbinden und alles dynamisch erstellen müsste. Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 31.07.2008 um 22:45
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Do 31.07.08 15:32
Flamefire hat folgendes geschrieben: | | Geht das auch ohne Formulare? Weil ich ja sonst die Forms unit einbinden und alles dynamisch erstellen müsste. |
Das verstehe ich nicht. Warum kannst du die Form-Unit nicht einbinden? Warum muss es dynamisch erstellt werden?
Lg, Martin
_________________ Ein Nutzer der Ecke
|
|
Flamefire 
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Do 31.07.08 16:30
ich habe keine VCL anwendung sondern nur eine DLL
und diese DLL soll einen SPlash-Screen anzeigen
Wenn ich also ein formular verwende muss ich erstens die forms unit einbinden (-->DLL viel größer) und 2. das formular samt der kompo dynmisch erstellen
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Fr 01.08.08 08:15
Wann soll der Splashscreen angezeigt werden? Wenn die DLL geladen wird? Oder nur explizit, wenn ein Programm das will?
Ansonsten: Wer sagt denn, dass man keine Formulare in DLLs verwenden kann? Schreib einfach ein ganz normales VCL-Programm; ändere dann im Projektquelltext program in library um, exportiere gewünschte Funktionen; achte darauf, dass keine Strings exportiert werden etc.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Fr 01.08.08 08:19
Einen Splash-Screen für eine eigene Anwendung in eine DLL auslagen macht für mich keinen Sinn, da der Splash ja gerade während des Ladens angezeigt werden soll und somit recht früh verfügbar sein sollte. So müsste allerdings erst die DLL geladen werden und solange würde der Splash nicht angezeigt.
Ich vermute also, dass du eine eigene DLL mit Funktionalität bauen möchtest und beim Aufruf dieser Funktionen soll ein Splash- (bzw. hier fast Nag-) Screen angezeigt werden, damit die, die deine DLL benutzen darauf aufmerksam gemacht werden, dass sie von dir ist?
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Fr 01.08.08 08:25
Hallo Flamewire,
man kann natürlich Formulare nur mit Hilfe der WinAPI erzeugen. Das ist zwar nicht ganz so einfach wie mit Hilfe der Klasse TForm, für diesen Zweck geht das aber trotzdem noch recht einfach und spart eine Menge Speichergrößen. (Ist das heute überhaupt noch wichtig?)
Ich verweise nun einfach mal auf die WinAPI-Dokumentation von Luckie. Diese findest du hier:
www.michael-puff.de/...er/Delphi/Tutorials/
Wenn dir das doch etwas zu aufwändig ist, dann musst du wohl oder übel mit den ca. 300kB mehr leben.
Edit: Zum Thema dynamisch: Es gibt die Möglichkeit, diese wird (glaube ich) in dem Tutorial auch beschrieben, das Formular zu entwerfen und dann als Resource einbinden. Das macht zumindest die Positionierung etwas einfacher. Bei diesem einfachen Problem ist das allerdings unerheblich.
Auf jeden Fall musst du das Formular zur Laufzeit erzeugen und das nennt sich dann dynamisch.
Bei einem Formular kannst du dir auch das ersparen...
Viele Grüße,
Hans-Peter
|
|
Flamefire 
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Fr 01.08.08 09:14
@wulfskin: genau das meinte ich mit dynamisch
der splashscreen soll angezeigt werden, solange bestimmte funktionen der DLL geladen werden. stimmt also schon so.
Nunja wegen speicher...es hätte doch schon vorteile. Da ich vermute dass durch die forms unit das ganze überdimensioniert wird und einfach mal ressourcen verschwendet
ich will ja nur fpür etwa 20sec ein bild anzeigen
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Fr 01.08.08 09:28
Flamefire hat folgendes geschrieben: | @wulfskin: genau das meinte ich mit dynamisch
[..] |
Nun, dann musst du dich etwas ins Thema einarbeiten (Copy & Paste reicht oft auch  ). Link siehe oben!
Viel Erfolg!
|
|
Flamefire 
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Fr 01.08.08 09:40
jop ich sehs
wenn ich das richtig verstanden habe:
thread erstellen
fenster erzeugen
image erzeugen (aus ressource laden)
über messageschleife auf wm_quit warten (in defwndproc)
dann einfach den thread aufrufen und über message wieder beenden. richtig?
oder würde es sogar schon ausreichen, nur den thread zu beenden? würde der das vom thread erzeugte fenster löschen?
nja ich tests mal
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Fr 01.08.08 10:00
Flamefire hat folgendes geschrieben: | jop ich sehs
wenn ich das richtig verstanden habe:
[...]
oder würde es sogar schon ausreichen, nur den thread zu beenden? würde der das vom thread erzeugte fenster löschen?
|
So auf den ersten Blick stimmt der Ablauf.
Um das Fenster zu Schliessen würde ich die dafür vorgesehene Nachricht WM_CLOSE senden. Das Fenster reagiert anschließend darauf, dass es sich schließt und dann "selbständig" (das musst du natürlich schon programmieren  ) löscht.
Sei mir jedoch nicht Böse, wenn ich etwas übersehen habe. Da ist Jahre her bei mir...
Viel Erfolg,
Hape
|
|
Flamefire 
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Fr 01.08.08 12:01
ok nach langem probieren habe ich es geschafft...der splashscreen wird so angezeigt wie er soll
wie kann ich jetzt aber den mauszeiger abschalten?
code zum erzeugen sieht so aus: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| with wc do begin cbSize:=SizeOf(TWndClassEx); Style:=CS_HREDRAW or CS_VREDRAW; lpfnWndProc:=@WndProc; cbClsExtra:=0; cbWndExtra:=0; hbrBackground:=GetSysColorBrush(COLOR_3DFACE); lpszMenuName:=nil; lpszClassName:='WindowClass'; hIconSm:=0; hInstance:=SysInit.hInstance; hIcon:=0; hCursor:=0; end;
RegisterClassEx(wc); FwndHandle:=CreateWindowEx(WS_EX_TOPMOST,'WindowClass','Splash',WS_POPUP , CW_USEDEFAULT, CW_USEDEFAULT, WindowWidth,WindowHeight,0,0,hInstance,nil); ShowWindow(FwndHandle, SW_SHOWNORMAL); |
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Fr 01.08.08 13:18
Hallo,
den Mauszeiger kannst du komplett über SHOWCURSOR verstecken.
Wenn du ihn nur beim Überfahren deines Formulars verstecken willst, dann gibt es meiner Meinung nach zwei Varianten:
- Die Ereignise OnMouseEnter und OnMouseLeave implementieren.
- Entsprechende Formulareingeschaften setzen. ICh weiß jedoch nicht ob es die wirklich gibt und wie diese heißen.
Bitte suche nächstes mal zuerst hier im Forum. Ich bin mir sicher, dass es dazu bereits genug Themen gibt.
Viel Erfolg,
Hape
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Fr 01.08.08 13:46
ShowCursor versteckt den Mauszeiger von sich aus nur über dem Formular.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|