AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie stelle ich fest ob ein Control nur halb sichtbar ist?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie stelle ich fest ob ein Control nur halb sichtbar ist?

Ein Thema von Der schöne Günther · begonnen am 12. Jul 2021 · letzter Beitrag vom 12. Jul 2021
Antwort Antwort
Der schöne Günther

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

Wie stelle ich fest ob ein Control nur halb sichtbar ist?

  Alt 12. Jul 2021, 14:30
Ich habe ein TFlowPanel mit einer dynamischen Anzahl an Buttons drin. Wenn das FlowPanel zu klein wird reicht der Platz nicht mehr und dann sind z.B. die Buttons in der untersten Zeile nur halb drauf und unten abgeschnitten.

Ich stehe auf dem Schlauch, wie kann ich eigentlich herausbekommen, ob ein Button nur noch halb sichtbar ist?

PS: Die Frage wurde vor ein paar Jahren schon einmal gestellt, allerdings auch ohne Antwort:
https://www.delphipraxis.net/192365-...-autosize.html
Miniaturansicht angehängter Grafiken
screenshot-2021-07-12-142944.png  

Geändert von Der schöne Günther (12. Jul 2021 um 14:32 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#2

AW: Wie stelle ich fest ob ein Control nur halb sichtbar ist?

  Alt 12. Jul 2021, 14:48
Du weißt wo der Button beginnt: Button.Top
Du weißt wie hoch der Button ist: Button.Height.
Du weißt wie hoch sein Parent ist: Button.Parent.Height.

Ist nun Button.Top + Button.Height > Button.Parent.Height, so ist der Button nicht vollständig sichtbar.

Bei der Breite geht's analog:

Sind Button.Left + Button.Width > Button.Parent.Width, dann ist der Button nicht vollständig sichtbar.

Zumindest mit diversen TImageEn auf 'ner TScrollBox funktioniert diese Logik.
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Wie stelle ich fest ob ein Control nur halb sichtbar ist?

  Alt 12. Jul 2021, 16:33
Natürlich! Ich dachte schon an Umrechnen in Bildschirmkoordinaten und dann die Parents abwandern wie da die Schnittmengen sind, aber natürlich, es geht ganz einfach:

Delphi-Quellcode:
function TControlHelper.isClipped(): Boolean;
begin
   if(not Assigned(parent)) then
      Exit(False);

   Result :=
      (Top < 0)
      or
      ((Top + Height) > parent.ClientHeight)
      or
      (Left < 0)
      or
      ((Left + Width) > parent.ClientWidth);
end;
Vielen Dank 👍
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wie stelle ich fest ob ein Control nur halb sichtbar ist?

  Alt 12. Jul 2021, 18:10
Geht auch etwas stylischer :
Delphi-Quellcode:
function TControlHelper.isClipped(): Boolean;
begin
   if(not Assigned(parent)) then
      Exit(False);
   Result := not Parent.ClientRect.Contains(BoundsRect);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: Wie stelle ich fest ob ein Control nur halb sichtbar ist?

  Alt 12. Jul 2021, 18:35
Geht auch etwas stylischer :
Delphi-Quellcode:
function TControlHelper.isClipped(): Boolean;
begin
   if(not Assigned(parent)) then
      Exit(False);
   Result := not Parent.ClientRect.Contains(BoundsRect);
end;
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#6

AW: Wie stelle ich fest ob ein Control nur halb sichtbar ist?

  Alt 12. Jul 2021, 20:04
Ginge nicht auch
Delphi-Quellcode:
function TControlHelper.isClipped(): Boolean;
begin
  Result := Assigned(Parent) and Parent.ClientRect.Contains(BoundsRect);
end;
Ok, geht nicht, wenn boolsche Ausdrücke vollständig ausgewertet werden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie stelle ich fest ob ein Control nur halb sichtbar ist?

  Alt 12. Jul 2021, 21:39
Ok, geht nicht, wenn boolsche Ausdrücke vollständig ausgewertet werden
Wer sowas macht, muß eben mit den Konsequenzen leben.


Also WENN überhaupt, dann sollte man Dieses eh nur begrenzt einsetzen.

Aber stattdessen kann man oft auch einfach mit der Reihenfolge spielen, um sowas zu beeinflussen.
VARIABLE and/or FUNKTION versus FUNKTION and/or VARIABLE
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#8

AW: Wie stelle ich fest ob ein Control nur halb sichtbar ist?

  Alt 12. Jul 2021, 21:54
Na klar, dashier wäre dann eher suboptimal Result := Parent.ClientRect.Contains(BoundsRect) and Assigned(Parent);

Oder etwas flacher formuliert:

Wenn rechts was steht, was scheitern kann, dann muss links davon was stehen, dass sicherstellt, dass das zum Scheitern verurteilte nie erreicht wird.

Oder aber auch: Assigned steht zuerst, wenn das ok ist, kann man rechts davon problemlos auf das per Assigned geprüfte zugreifen. Scheitert Assigned, kommt man dort erst garnicht an.
  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:28 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