AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Form aus DLL wird nur teilweise angezeigt
Thema durchsuchen
Ansicht
Themen-Optionen

Form aus DLL wird nur teilweise angezeigt

Ein Thema von alcaeus · begonnen am 12. Mai 2005 · letzter Beitrag vom 15. Mai 2005
Antwort Antwort
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

Form aus DLL wird nur teilweise angezeigt

  Alt 12. Mai 2005, 10:24
Hallo allerseits,

meine DLL-Forms halten mich wiedermal beschaeftigt. Ich hab jetzt das Ganze so umgestellt, dass ich nur mehr ein Handle eines Forms erwarte, und nicht ein TForm-Objekt (damit auch C++-DLLs verwendet werden koennen).
Nun habe ich aber das Problem, dass nicht alles angezeigt wird. Hier mal ein paar Codeschnippsel.
In der DLL geschieht das:
Delphi-Quellcode:
function GetMainForm: HWND; stdcall;
begin
   Result := TfrmDLL.Create(nil).Handle;
end;
Geladen wird so:
Delphi-Quellcode:
Module.DLLFormProc := GetProcAddress(Module.DLLHandle, PChar('GetMainForm'));
//...
Module.ModuleFormHandle := TGetDLLFrm(Module.DLLFormProc);

SetParent(Module.ModuleFormHandle, ModuleParentHandle);
WindowStyle := GetWindowLong(Module.ModuleFormHandle, GWL_STYLE);
WindowStyle := WindowStyle or WS_CHILD;
WindowStyle := WindowStyle and not WS_BORDER;
WindowStyle := WindowStyle and not WS_THICKFRAME;
WindowStyle := WindowStyle and not WS_CAPTION;
WindowStyle := WindowStyle or WS_MAXIMIZE;
WindowStyle := WindowStyle and not WS_SYSMENU;
SetWindowLong(Module.ModuleFormHandle, GWL_STYLE, WindowStyle);
SetWindowPos(Module.ModuleFormHandle, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE or SWP_SHOWWINDOW);
ShowWindow(Module.ModuleFormHandle, SW_HIDE);
Anschliessend zeige ich irgendwo das Form an, und zwar mit ShowWindow(TTBXItem(Sender).Tag, SW_SHOW); Das Handle des Forms wird ins Tag des TBX-Buttons geschrieben, welcher die Anzeige regelt. Das Problem ist hierbei nicht, dass das Form nicht angezeigt wird, sondern dass nicht alles angezeigt wird. Ich hab 3 Labels, 1 StaticText, ein Memo und eine TBXToolbar auf dem Form, aber ich sehe nur die 3 Labels. Muss ich noch irgendwelche Messages ans Form schicken, damit es sich neu zeichnet oder so? Waere nett wenn mir jemand weiterhelfen koennte.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#2

Re: Form aus DLL wird nur teilweise angezeigt

  Alt 13. Mai 2005, 11:48
Gucke mal im VCL-Source nach den Fensternachrichten die mit CM_* beginnen. Durch diese privaten WMs regelt die VCL ihre Dinge. Ansonsten hilft wohl nur die Arbeit mit Interfaces
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: Form aus DLL wird nur teilweise angezeigt

  Alt 14. Mai 2005, 09:59
Also ich hab jetzt mal versucht, an das Form die CM_RECREATEWND-Message zu senden:
SendMessage(Module.ModuleFormHandle, CM_RECREATEWND, 0, 0); Dies hatte nur zur Folge, dass ich gar nichts mehr gesehn hab, nichtmal die Labels. Die anderen Messages haben mir nicht zugesagt, also waere ich fuer jeden Tipp dankbar

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Form aus DLL wird nur teilweise angezeigt

  Alt 14. Mai 2005, 11:21
Hast du schon versucht mit Invalidate(Rect) ein neuzeichnen des Formulars zu veranlassen ?
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: Form aus DLL wird nur teilweise angezeigt

  Alt 14. Mai 2005, 22:09
Hallo Julius,

Zitat von jfheins:
Hast du schon versucht mit Invalidate(Rect) ein neuzeichnen des Formulars zu veranlassen ?
da Invalidate eine Member-Funktion von TControl ist faellt die Funktion mal flach. Nach einem Blick in die Sourcen habe ich allerdings InvalideRect gefunden. Ich habs so aufgerufen:
Delphi-Quellcode:
GetWindowRect(Module.ModuleFormHandle, ModuleRect);
InvalidateRect(Module.ModuleFormHandle, @ModuleRect, True);
Geholfen hat dies leider nicht. Hat sonst noch jemand einen Tipp fuer mich? So langsam verzweifle ich an der Sache

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Johnny_W

Registriert seit: 27. Apr 2005
33 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Form aus DLL wird nur teilweise angezeigt

  Alt 15. Mai 2005, 01:25
Hi alcaeus,

Dein "Problem" klingt interessant.
Habe deinen Fehler hier mal reproduziert.3 Labels, 1 Memo. Mir "fehlt" das Memo. Versuche die Komponente neu zu zeichnen fielen auf die schnelle auch fehl.
Umgangen habe ich das erstmal mit:
Delphi-Quellcode:
function ShowModalfrm:integer;stdcall;
begin
  with TfrmDLL.Create(nil) do
    result := ShowModal;
end;
Falls es Dir hilft...

MfG
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#7

Re: Form aus DLL wird nur teilweise angezeigt

  Alt 15. Mai 2005, 09:58
Hallo Johnny,

nicht ganz. Die Forms die ich lade sollen zuerst mal dahinvegetieren, bis der Anwender auf den Button fuers entsprechende Modul klickt. Sobald er das macht, soll das Form auf dem Panel gezeichnet werden. Gleich am Anfang ShowModal aufzurufen klappt also leider nicht.
Trotzdem Danke fuer den Tipp.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#8

Re: Form aus DLL wird nur teilweise angezeigt

  Alt 15. Mai 2005, 10:29
Zitat von alcaeus:
Nun habe ich aber das Problem, dass nicht alles angezeigt wird. Hier mal ein paar Codeschnippsel.
http://delphi.about.com/library/weekly/aa020805a.htm

Könnte vielleicht interessant für dein Projekt sein.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  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 14:36 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