AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Formular in ein Fenster eine Fremdapplikation einfügen

Formular in ein Fenster eine Fremdapplikation einfügen

Ein Thema von x2ph · begonnen am 23. Mär 2014 · letzter Beitrag vom 23. Mär 2014
Antwort Antwort
x2ph

Registriert seit: 10. Okt 2011
Ort: Hannover
3 Beiträge
 
Delphi XE6 Enterprise
 
#1

Formular in ein Fenster eine Fremdapplikation einfügen

  Alt 23. Mär 2014, 11:18
Delphi-Version: XE4
Hallo,

Wir haben eine DB Anwendung mit mehreren zigtausend Zeilen, geschrieben in OMNIS7. OMNIS7 ist ein 4GL System, welches um eigene Befehle in Form von DLL erweitert werden kann. Ein Erweiterungstyp ist eine sogenannte Extended Area, wobei die DLL die Kontrolle über die Darstellung und weitere Funktionalität erhält. Es handelt sich dabei NICHT um ein ActiveX oder COM Objekt.

Ich würde gern die genannte Fläche, die ich über ein HDC ansprechen kann, mit einem Delphi Formular ausfüllen.
Was bereits funktioniert: Ich kann ein Canvas Objekt erzeugen, diesem den HDC zuweisen und dann mit Delphi in das Canvas zeichnen.
Ich würde nun gern ein komplettes Delphi Form dort zeichnen.
Leider ist form.canvas aber eine read-only property.

Frage: kann man irgendwie für ein Form die Canvas Eigenschaft umbiegen oder ist es vielleicht möglich, die Formular-Anzeige irgendwie anders in ein bekanntes HDC umzuleiten?

Und bitte: ein Umschreiben der ganzen Anwendung in Delphi kommt leider nicht in Frage, dazu fehlt mir die halbe Million, die das vermutlich kosten würde.
Christoph

Geändert von x2ph (23. Mär 2014 um 12:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Formular in ein Fenster eine Fremdapplikation einfügen

  Alt 23. Mär 2014, 12:57
Du hast doch einen Devicekontext auf die Zielzeichenfläche und den Quellkontext in TForm.Canvas.Handle, dann kannst Du doch mit BitBlt einfach den einen in den anderen zeichnen, oder habe ich das Problem falsch verstanden?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.146 Beiträge
 
Delphi 12 Athens
 
#3

AW: Formular in ein Fenster eine Fremdapplikation einfügen

  Alt 23. Mär 2014, 13:23
Leider ist form.canvas aber eine read-only property.
Man kann zwar dennoch das HDC dieses Canvas umbiegen, aber das bringt absolut garnichts, da die Form davon nichts mitbekommt und sich dennoch, über ihr selber zeichnet.

Frage: kann man irgendwie für ein Form die Canvas Eigenschaft umbiegen oder ist es vielleicht möglich, die Formular-Anzeige irgendwie anders in ein bekanntes HDC umzuleiten?
Garnicht.

Wenn es sein buß, dann kannst du aber jeweils selber per Befehl die Form da drauf malen.

Entweder die Form direkt auf das HDC drucken, oder man nutzt die Befehle des Canvas, zum Kopieren.

Falls man lieber ein Canvas durm draufmalen haben will, dann könnte eventuell auch eines der zahlreichen Beispiele suchen, wo über einen HDC irgendwo draufgezeichnet wird.
Sehr oft trifft man dabei z.B. auf das Thema http://www.delphipraxis.net/152582-a...ml#post1032057.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu (23. Mär 2014 um 13:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Formular in ein Fenster eine Fremdapplikation einfügen

  Alt 23. Mär 2014, 18:15
Anderer Ansatz: Ein normales Delphi Formular erstellen und dann MSDN-Library durchsuchenSetParent verwenden, um das Fenster als Child Window deines Zeichenflächencontainers zu registrieren.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Formular in ein Fenster eine Fremdapplikation einfügen

  Alt 23. Mär 2014, 18:39
@x2ph

Wenn es das ist was du wissen willst, dann würde ich behaupten, dass das tagtäglich jeder Bildschirmschoner so macht, wenn man unter Eigenschaften auf Vorschau geht. Hier ein Auszug aus einem meiner Bildschirmschonerprogramme:
Delphi-Quellcode:
    GetWindowRect(ParentWnd, Rec);
    Form.SetBounds(0, 0, Rec.Right - Rec.Left, Rec.Bottom - Rec.Top);
    Windows.SetParent(Form.Handle, ParentWnd);
  Mit Zitat antworten Zitat
x2ph

Registriert seit: 10. Okt 2011
Ort: Hannover
3 Beiträge
 
Delphi XE6 Enterprise
 
#6

AW: Formular in ein Fenster eine Fremdapplikation einfügen

  Alt 23. Mär 2014, 20:00
Erstmal Danke für eure Überlegungen und Ideen.

Ich werde jetzt etwas damit experimentieren und hier berichten.
Christoph
  Mit Zitat antworten Zitat
x2ph

Registriert seit: 10. Okt 2011
Ort: Hannover
3 Beiträge
 
Delphi XE6 Enterprise
 
#7

AW: Formular in ein Fenster eine Fremdapplikation einfügen

  Alt 23. Mär 2014, 21:46
@x2ph

Wenn es das ist was du wissen willst, dann würde ich behaupten, dass das tagtäglich jeder Bildschirmschoner so macht, wenn man unter Eigenschaften auf Vorschau geht. Hier ein Auszug aus einem meiner Bildschirmschonerprogramme:
Delphi-Quellcode:
    GetWindowRect(ParentWnd, Rec);
    Form.SetBounds(0, 0, Rec.Right - Rec.Left, Rec.Bottom - Rec.Top);
    Windows.SetParent(Form.Handle, ParentWnd);
Hallo Popov,

Dein Ansatz funktioniert, sogar besser als gehofft.
Ich kann so ein Form erzeugen und in einem bestehenden Fenster als SubWIndow einfügen. Dabei funktioniert das Form immer noch genauso wie gewünscht.

Ziemlich cool das ganze!
Christoph
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:44 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