Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Vorschau auf tabsheet das nicht aktiv ist, ohne Show (https://www.delphipraxis.net/62542-vorschau-auf-tabsheet-das-nicht-aktiv-ist-ohne-show.html)

Softchaos67 6. Feb 2006 09:11


Vorschau auf tabsheet das nicht aktiv ist, ohne Show
 
Hallo NG,
ich würde gerne den Inhalt eines Tabsheets bei Rechtsklick auf seinen Reiter irgendwie
anzeigen, ohne die Change oder Showmethode des Pagecontrols oder Tabsheets auszulösen (peek).
Gibts da eine mir noch nicht bekannte möglichkeit?
Danke für Ideen
Gruss
Matthias

marabu 6. Feb 2006 09:34

Re: Vorschau auf tabsheet das nicht aktiv ist, ohne Show
 
Hallo Matthias,

das klingt stark nach "wasch mich aber mach mich nicht nass". Kannst du das näher erläutern?

Grüße vom marabu

Softchaos67 6. Feb 2006 09:37

Re: Vorschau auf tabsheet das nicht aktiv ist, ohne Show
 
Ja, genau.
Bei der Showmethode werden viele Daten geladen, was lange dauern kann.
jetzt wäre es von vorteil wenn mann noch mal was nachschauen könnte, ohne die Showmethode auszulösen. Ein peek eben.
Mehr kann ich nicht beschreiben.
Ich denke für eine Antwort sollte das auch genügen.
Nochwas: beim aktivieren SOLLEN die Daten aktualisiert werden, ein Merker ob die Daten bereits geladen wurden nutzt also nichts.
Gruss
Matthias

marabu 6. Feb 2006 09:45

Re: Vorschau auf tabsheet das nicht aktiv ist, ohne Show
 
So kannst du feststellen, über welchem Tab die Maus sich befindet:

Delphi-Quellcode:
procedure TDemoForm.PageControlMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  Caption := IntToStr(PageControl.IndexOfTabAt(X, Y));
end;
Wie du deine Information dann anzeigst - automatisch in deinem HintWindow oder über das Kontextmenü in einem InfoDialog - bleibt dir überlassen.

marabu

Softchaos67 6. Feb 2006 12:07

Re: Vorschau auf tabsheet das nicht aktiv ist, ohne Show
 
Zitat:

Wie du deine Information dann anzeigst - automatisch in deinem HintWindow oder über das Kontextmenü in einem InfoDialog - bleibt dir überlassen.
ja aber genau darum gehts mir doch.
Wie kann ich diese Informationen anzeigen, ohne sie nochmals aufzubereiten, quasi ein Screenshot des Tabsheets?
Das mit der Maus ist schon klar.
Gruss
Matthias

chaosben 6. Feb 2006 12:37

Re: Vorschau auf tabsheet das nicht aktiv ist, ohne Show
 
Also auf deutsch: Die Daten stehen schon im Tabsheet und du willst an sie ran?
Willst du einen echten Screenshot oder willst du nur die Daten?

Softchaos67 6. Feb 2006 12:55

Re: Vorschau auf tabsheet das nicht aktiv ist, ohne Show
 
ich will halt nicht nochmal alle Controls auswerten, vielleicht wäre tatsächlich ein Bitmap des Tabsheets beim Show eine Lösung...
mal sehen..
Gruss
Matthias

JasonDX 6. Feb 2006 13:31

Re: Vorschau auf tabsheet das nicht aktiv ist, ohne Show
 
Meine OH sagt mir, dass jedes Delphi-Referenz durchsuchenTWinControl eine Methode Namens Delphi-Referenz durchsuchenPaintTo besitzt. Die rufst du für dein TabSheet auf und sagst, auf welchem Canvas es wo gezeichnet werden soll. AFAIR wird OnShow dabei nicht aufgerufen, bin mir da aber nicht mehr ganz sicher.

greetz
Mike

Softchaos67 6. Feb 2006 14:00

Re: Vorschau auf tabsheet das nicht aktiv ist, ohne Show
 
PaintTo klingt vielversprechend... :P

mal ausprobieren.
Danke einstweilen
Gruss
Matthias

Softchaos67 7. Feb 2006 08:06

Re: Vorschau auf tabsheet das nicht aktiv ist, ohne Show
 
Delphi-Quellcode:
procedure TForm1.PageControl3MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
   tab :TTabSheet;
   position :TPoint;
   bmp :TBitmap;
   frm :TForm;
   i :integer;
begin
   inherited;
   if Button = mbRight then begin
      position.X:=X;
      position.Y:=Y;
      tab := GetTabSheet(PageControl3,position);
      if tab <> nil then begin
          frm := TForm.Create(Self);
          frm.Width := tab.Width+10;
          frm.Height := tab.Height+10;
          frm.Top :=0;
          frm.Left :=0;
          frm.Canvas.Lock;
          tab.PaintTo(frm.Canvas,frm.Top+2,frm.Left+2);
(*
          for i := 0 to tab.ComponentCount-1 do begin
             if (tab.Components[i] is TWinControl) then with (tab.Components[i] as TWinControl) do begin
                PaintTo(frm.Canvas,top,left);
             end;
          end;
*)        
          frm.Canvas.Unlock;
          frm.AlphaBlend := true;
          frm.AlphaBlendValue := 200;
          frm.ShowModal;
          FreeAndNil(frm);
      end;
   end;

end;
Habs so probiert, oder alle Controls einzeln.
In beide Fällen wird ein leeres Form angezeigt.
Was muss ich noch beachten?
Gruss
Matthias


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 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