Autor Beitrag
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: 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 user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 31.07.2008 um 22:45
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Do 31.07.08 15:32 
user profile iconFlamefire 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Fr 01.08.08 09:28 
user profile iconFlamefire 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Fr 01.08.08 10:00 
user profile iconFlamefire 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: 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:
ausblenden 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;

  {Fenster registrieren}
  RegisterClassEx(wc);
  FwndHandle:=CreateWindowEx(WS_EX_TOPMOST,'WindowClass','Splash',WS_POPUP ,
  CW_USEDEFAULT, // Position von Links
  CW_USEDEFAULT, // Position von oben
  WindowWidth,WindowHeight,0,0,hInstance,nil);
  ShowWindow(FwndHandle, SW_SHOWNORMAL);
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Fr 01.08.08 13:18 
Hallo,

den Mauszeiger kannst du komplett über Suche im MSDN SHOWCURSOR verstecken.

Wenn du ihn nur beim Überfahren deines Formulars verstecken willst, dann gibt es meiner Meinung nach zwei Varianten:
  1. Die Ereignise OnMouseEnter und OnMouseLeave implementieren.
  2. 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: 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.