| Autor |
Beitrag |
draco
      
Beiträge: 21
|
Verfasst: Do 06.01.11 23:55
Hallo,
ich habe gerade angefangen ein kleines Präsentationsprogramm für Texte zu erstellen.
Das Programm besteht aus 2 Formularen, eins zum Steuern der Präsentation und eins das die Präsentation auf dem 2.Monitor anzeigt.
Um dem Bediener einen kleinen gefallen zu machen würde ich jetzt gerne in dem Steuerungsformular eine verkleinerte Version von dem Präsentationsformular einblenden.
Wie macht man das am geschicktesten? Hatte es mal mit einem Frame probiert, allerdings wurde dort durch verkleinern nur der Ausschnitt des Frames verkleinert und nicht die komplett ansicht.
Gruß
Tom
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 07.01.11 00:34
Angenommen du willst ein Bild von Form2 machen, und es in einer Paintbox in Form1 anzeigen, dann kannst du das so machen:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.SpeedButton1Click(Sender: TObject); begin paintbox1.Canvas.CopyRect(form1.paintbox1.ClientRect,form2.Canvas,form2.ClientRect); end; |
So bekommst du Form2 (allerdings ohne Titelleiste und so). Das kann man auch irgendwie bekommen, glaube mittels getDC oder so. Aber vielleicht reicht's ja so.
//edit: ne, getWindowDC wars. Damit kannst du ein Handle bekommen, das du einem TCanvas-Objekt zuweisen kannst, dann bekommst du das gesamte Fenster. 
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
draco 
      
Beiträge: 21
|
Verfasst: Fr 07.01.11 00:40
Ok, danke!
Das probiere ich bei Gelegenheit mal aus und gucke wie das von der Geschwindigkeit her ist, für den Anfang dürfte es aber reichen.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 07.01.11 00:54
Hey,
wenn du Form2 1 zu 1 in Form1 darstellen willst, dann kannst du die Parent-Eigenschaft von Form2 auch auf Form1 setzen:
Delphi-Quelltext 1:
| Form2.Parent := Form1; |
Dann wird Form 2 vom System aus auf dem Client von Form 1 gezeichnet und man kann sie trotzdem noch ganz normal benutzen. Wenn du Form2 dann wieder freigeben willst einfach die Parent-Eigenschaft auf nil setzen.
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 07.01.11 07:30
Zusätzlich kann man via GDI die Viewport-Settings des Canvas auf dem Form2 gezeichnet wird so anpassen, dass eine Koordinaten-Transformation stattfindet. Man also z.B. 10kPx horizontal zeichnen kann, das aber auf dem Bildschirm nur 1kPx sind; ohne selbst rechnen zu müssen. Siehe Dokumentation der GDI bzw. der Window Viewports.
Auf Grund der Sateliten-Verbindung, über die ich im Death Valley grad surfe, verzichte ich aber mal darauf, im MSDN Lib nachzugucken, wie die Funktion genau heißt (Google-Ping ~2000ms). Kann ich aber ggf. nach meinem Urlaub nachholen.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 07.01.11 08:25
Ich habe gerade keine Zeit nachzuschauen, aber hier ist auf jeden Fall der richtige Einsprungspunkt in die Doku:
msdn.microsoft.com/e...145104(v=VS.85).aspx
SetWorldTransform gibt es da, das müsste es schon sein, und wenn du links über die Kategorien weiterschaust, findest du auch noch viele andere Funktionen. Damit sollte sich sowas machen lassen was BenBE geschrieben hat.
|
|
draco 
      
Beiträge: 21
|
Verfasst: Sa 08.01.11 23:20
Ok, danke!
Werde mir das mal durchlesen und ausprobieren, bei Problemen schreie ich hier einfach nach Hilfe 
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: So 09.01.11 03:18
Hey,
ich hab das ganze grad eben mal ausporbiert, weil ich mich auch dafür interessiere, aber iwie haut das noch nich so ganz hin:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var m: XForm; h: THandle; e: Cardinal;
m.eM11 := 0.5; m.eM12 := 0.0; m.eM21 := 0.0; m.eM22 := 0.5; m.eDx := 0.0; m.eDy := 0.0; h := GetDC(Handle); if not SetWorldTransform(h, m) then begin e := GetLastError; Caption := 'Error '+IntToStr(e); end else Caption := 'SUCCESS'; |
Damit sollte ja die Form jetzt 50% kleiner dargestellt werden, aber SetWorldTransform wird nicht erfolgreich ausgeführt und die Caption ist 'Error 0' (ERROR_SUCCESS --> The operation completed successfully.) Jmd ne Idee woran das liegt?
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 09.01.11 04:52
Du hast den Eintrag in der Doku nicht bis zum Ende gelesen.  | Zitat: | | The SetWorldTransform function will fail unless the graphics mode for the given device context has been set to GM_ADVANCED by previously calling the SetGraphicsMode function. [...] |
Direkt auf ein Formular habe ich das bisher allerdings nicht angewendet. 
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: So 09.01.11 05:48
Hey,
jetzt werden die Funktionen korrekt ausgeführt, aber an der Darstellung hat sich nich wirklich was geändert, alles wie vorher.
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 09.01.11 11:46
Häng den Code mal ins OnPaint des Forms rein....
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| var m: XForm; h: THandle; e: Cardinal; begin Canvas.Ellipse(10,10,100,100); m.eM11 := 0.5; m.eM12 := 0.1; m.eM21 := 0.0; m.eM22 := 0.5; m.eDx := 0.1; m.eDy := 0.0;
h := Canvas.Handle; SetGraphicsMode(h,GM_ADVANCED); h := Canvas.Handle; if not SetWorldTransform(h, m) then begin e := GetLastError; Caption := 'Error '+IntToStr(e); end else Caption := 'SUCCESS'; Canvas.Ellipse(10,10,100,100);
end; |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
|