AGB  ·  Datenschutz  ·  Impressum  







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

Paintbox in Paintbox

Ein Thema von Gutelo · begonnen am 5. Feb 2014 · letzter Beitrag vom 5. Feb 2014
Antwort Antwort
Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#1

Paintbox in Paintbox

  Alt 5. Feb 2014, 02:05
Hallo,

ich habe zwei Komponenten die ich von TPaintbox abgeleitet habe. Im wesentlichen sind es graphische panels die gezeichnete Optionsknoepfe enthalten. Nun moechte ich das eine kleinere Panel (Komponente B) graphisch ueber das groessere Panel (Komponente A) legen.

Solange ich keinen der Optionsknoepfe druecke zeichnet er B ueber A. Wenn ein Knopf auf A gedrueckt wird bekommt die Komponete A aber den Fokus und Komponente B wird von A verdeckt.

Wie loese ich dieses Problem mit dem Fokus. Komponente B ist bereits ueber eine Property mit Komponente A verknuepft.

Gutelo
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Paintbox in Paintbox

  Alt 5. Feb 2014, 06:41
Wenn deine "Optionsknöpfe" TButtons sind, könntest du stattdessen TSpeedButtons nehmen, diese werden nicht fokussiert.

Oder Du fokussierst mit SetFocus nach dem Drücken wieder eine Komponente auf dem anderen Panel an.

Oder du versuchst ein BringToFront des anderen Panels.

Oder du vermeidest das übereinander zeichnen komplett und machst eine Komponente draus.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina ( 5. Feb 2014 um 06:44 Uhr)
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#3

AW: Paintbox in Paintbox

  Alt 5. Feb 2014, 06:45
Und was ist, wenn du B nicht direkt auf A legst, sondern noch ein normales TPanel dazwischen schiebst?

Nur so eine Idee, nicht ausprobiert.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Paintbox in Paintbox

  Alt 5. Feb 2014, 07:32
Oder wie schon angedeutet aus den 2 Komponenten 1 machen, evtl. von TGraphicControl oder in diesem Fall vielleicht besser von TCustomControl abgeleitet. Dann wird alles an derselben Stelle im Code gezeichnet, das ist zwar etwas mehr Rechnerei, aber man hat alles beisammen.
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
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Paintbox in Paintbox

  Alt 5. Feb 2014, 08:41
Ich vermute ganz stark, dass das Problem hier eigentlich nur das Neuzeichnen ist, A rückt nicht wirklich höher in der Z-Order. Um das einigermaßen effizient zu lösen habe ich mal im Paint einer Komponente alle Komponenten des Parents durchsucht die höher in der Z-Order sind (weiter hinten in TWinControl.Components[]), geprüft ab sie meine Komponente verdecken würden (trivial über Top/Left/Bottom/Right), und wenn ja den Bereich der gefundenen Komponente vom Parent invalidiert (aber dran denken das eigene Paint während dessen über ein Flag o.ä. nicht erneut in diese Suche gehen zu lassen! Gibt schöne Endlosschleifen.)

Am Rande: TPaintbox ist nicht wirklich als Basis für eigene Komponenten gedacht. Für Dinge, denen man kein Windows-Handle verpassen muss, ist hier fast immer TGraphicControl eine gute Ausgangsklasse.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#6

AW: Paintbox in Paintbox

  Alt 5. Feb 2014, 09:33
Medium,

gute Idee, werde mal ausprobieren ein entsprechendes repaint der Komponente B durchzufuehren.

Die Optionsknoepfe sind selbst gezeichnet. Es ist eine reine Paintbox ohne weitere Komponenten.

Welche Vorteile hat TGraphicControl gegenueber TPaintBox, bzw warum ist es bedenklich eine TPaintBox zu verwenden?

Gutelo

Edit: Hmm, wenn ich im OnPaint der Komponente A ein repaint der Komponente B einfuege lande ich ebenfalls in einer Endlosschleife und Komponente B flackert staendig.

Edit 2: Mit einem KompB.paint klappt es wunderbar. Den Unterschied zwischen Paint und Repaint habe ich noch nie verstanden...

Geändert von Gutelo ( 5. Feb 2014 um 09:40 Uhr)
  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 08:39 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