AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PagePicker

Ein Thema von Kraisel · begonnen am 21. Okt 2013 · letzter Beitrag vom 26. Okt 2013
Antwort Antwort
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#1

PagePicker

  Alt 21. Okt 2013, 13:27
Hallo,

ich würde gerne einen "PagePicker", wie er im neuen iOS7 bei Safari zu sehen ist, in Windows als Komponente programmieren. Funktioniert soweit schon ganz gut, aber leider nur mit selbst gezeichneten oder sonstigen Bitmaps (eine Bitmap je dargestellte Seite).

Gibt es eine Möglichkeit, Delphi-Komponenten, so wie sie auf dem Bildschirm zu sehen sind, in eine Bitmap zu stanzen? z.B. ein TGrid mit TMemo und TButton. Eine Kopie mit BitBlt schlägt fehl, da die Handle der Komponenten keine Handle auf Canvas sind. Oder gehts auch anders?

Und sofort weiter: Wenn möglich, gibt es eine Möglichkeit noch nicht auf dem Bildschirm gezeichnete Komponenten irgendwie in eine Bitmap zeichnen zu lassen?

Was natürlich geht, ist über die Koordinaten den entsprechenden Bildschirmausschnitt zu kopieren. Aber wehe, es liegt ein Fenster ganz oder teilweise darüber, oder eine darzustellende Seite wurde noch nie auf dem Bildschirm angezeigt.

Wenn das alles funktioniert hat man quasi einen sehr funktionellen und gut aussehenden PageControl oder auch allgemeinen SeitenPicker mit angenehmer Navigation.

Liebe Grüße aus Bochum
Peter
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: PagePicker

  Alt 21. Okt 2013, 13:33
Hallo -

Kannst du vielleicht ein Bild anhängen damit jeder sehen kann, was gemeint ist?
  Mit Zitat antworten Zitat
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#3

AW: PagePicker

  Alt 21. Okt 2013, 17:20
Im iPhone Safari aufrufen, und die PageListe ansehen. Aber das ist für das Problem ohne Belang.

Hier die Kurzfassung: Wie bekomme ich eine Komponente oder auch Form, so wie sie auf dem Bildschirm aussieht, in eine Bitmap?

Liebe Grüße
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: PagePicker

  Alt 21. Okt 2013, 19:13
Hast Du schon GetFormImage versucht?
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 Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#5

AW: PagePicker

  Alt 22. Okt 2013, 00:43
Hallo,

GetFormImage kannte ich in der Tat nicht. Nun, damit bekommt man die gesamte Form, leider aber ohne Windows-Rahmen, in eine Bitmap. Gehts nun auch irgendwie mit Komponenten innerhalb einer Form?

Liebe Grüße aus Bochum
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: PagePicker

  Alt 22. Okt 2013, 02:23
Wie wär's damit:
Delphi-Quellcode:
procedure TForm1.AppFormKopieren;
Var
  Bitmap: TBitmap;
  Canvas: TCanvas;
begin
  Canvas := TCanvas.Create;

  Try
    Canvas.Handle := GetWindowDC(0);
    Try
      Bitmap := TBitmap.Create;
      Bitmap.Width := Self.Width;
      Bitmap.Height := Self.Height;
      Bitmap.PixelFormat := pfDevice;
      BitBlt(Bitmap.Canvas.Handle, 0, 0, Self.Width, Self.Height, Canvas.Handle, Self.Left, Self.Top, Bitmap.Canvas.CopyMode);
      Img_Kopie.Picture.Bitmap.Assign(BitMap);
    Finally
      BitMap.Free;
    End;
  Finally
    ReleaseDC(0, Canvas.Handle);
    Canvas.Free;
  End;
end;
Img_Kopie ist ein TImage, das zum Testen auf der Form liegt ... Du kannst auch gleich den Dateinamen mitgeben und das Bitmap abspeichern. Und für einzelne Komponenten machst du das dann ebenso, natürlich mit entsprechender Umrechnung der Koordinaten, die sich bei Komponenten ja auf das jeweilige Parent beziehen.

Quelle

Geändert von Perlsau (22. Okt 2013 um 02:26 Uhr) Grund: Quelle ergänzt
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

AW: PagePicker

  Alt 22. Okt 2013, 02:43
Nimm mal die Procedure aus diesem Thema (Posting #4)
http://www.delphipraxis.net/159466-d...roupboxen.html
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.349 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: PagePicker

  Alt 22. Okt 2013, 05:53
Eine Kopie mit BitBlt schlägt fehl, da die Handle der Komponenten keine Handle auf Canvas sind.
Wenn die Komponente eine Eigenschaft Canvas hat, kann man Canvas.Handle benutzen.

GetFormImage kannte ich in der Tat nicht. Nun, damit bekommt man die gesamte Form, leider aber ohne Windows-Rahmen, in eine Bitmap. Gehts nun auch irgendwie mit Komponenten innerhalb einer Form?
Das macht die Methode, nur sind die Komponenten noch gar nicht da, wenn sie noch nicht sichtbar sind. Da das unter Windows oft nur Wrapper um die nativen Windows Komponenten sind (z.B. bei TButton), bekommt Delphi deren Aussehen nicht solange sie nicht initialisiert sind.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#9

AW: PagePicker

  Alt 26. Okt 2013, 15:26
Hallo,

wie jaeneke mitgeteilt hat, muss man quasi alles Sichtbare einmal kurz auf den Bildschirm "malen", dann, z.B. wie perlsau (von Danial. W) gepostet hat, in eine Bitmap kopieren, und dann entsprechend weiterverarbeiten.

PaintTo, wie im Link von sx2008 angedeutet, funktioniert deutlich besser, da hier auch gezeichnet wird, wenn die zu zeichnende Komponente NICHT sichtbar ist.

Korrektur: Die vorherige Aussage stimmt wohl nur bei verdeckten Fenstern. Ein unsichtbares TabSheet eines PageControl wird z.B. nicht gezeichnet. Dies muss man vorher (kurz) einschalten.


Vielen Dank an alle, die sich beteiligt haben.
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.

Geändert von Kraisel (27. Okt 2013 um 11:29 Uhr) Grund: siehe Korrektur
  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 06:01 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