AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Client Area von Formular disablen
Thema durchsuchen
Ansicht
Themen-Optionen

Client Area von Formular disablen

Ein Thema von s.h.a.r.k · begonnen am 30. Dez 2010 · letzter Beitrag vom 31. Dez 2010
Antwort Antwort
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#1

AW: Client Area von Formular disablen

  Alt 31. Dez 2010, 13:14
Und wenn du einfach auf wm_nchittest reagierst und da hterror zurück gibst oder im schlimmsten Fall httransparent
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Client Area von Formular disablen

  Alt 31. Dez 2010, 13:23
Und wenn du einfach auf wm_nchittest reagierst und da hterror zurück gibst oder im schlimmsten Fall httransparent
Das verstehe ich noch nicht ganz. Muss mir erst die Message WM_NCHITTEST anschauen

z.B. wenn ich einen wichtigen Timer deaktivere.
Ein Timer ist kein Fenster!

Es geht also um eine Komponente?
Achso... Ich meinte, dass das die einzelnen Komponenten, die ein Handle haben durchgeht.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#3

AW: Client Area von Formular disablen

  Alt 31. Dez 2010, 13:26
Achso... Ich meinte, dass das die einzelnen Komponenten, die ein Handle haben durchgeht.
Die Frage ob es um eine Komponente geht war unabhängig von der Bemerkung, daß ein Timer kein Fenster ist.

Fenster haben logischerweise ein Handle und du kannst sie mit o.g. Funktion listen. Alle üblichen Komponenten sind damit abgedeckt, aber sowas wie ein TLabel wäre nicht abgedeckt da es "nur" auf sein Elternfenster gezeichnet wird. Es ist kein echtes Fenster im Windows-Sinne.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: Client Area von Formular disablen

  Alt 31. Dez 2010, 13:35
Ich sollte wohl noch den Sinn des ganzen erklären, da eine einfache Lösung wohl direkt nicht zu existieren scheint. Und zwar programmiere ich ein Overlay-Fenster, welches sich (semitransparent) über das "Parent"-Fenster legt. Beispielanwendung dafür wäre z.B. ein Ladescreen, oder von mir aus auch ein Login-Screen. Der Borderstyle des Overlays ist bsNone und das Overlay-Formular ist genau so groß, wie der Client-Bereich der darunter liegenden Form. Beide Formulare sollen fokusierbar sein, sodass auf dem Overlay gearbeitet werden und das Hauptformular verschoben bzw. in der Größe verändert werden kann -- das Overlay-Formular setzt automatisch immer die exakte Größe und Position, sodass es immer den Client-Bereich überdeckt.

Nun ist es aber eben so, dass wenn ich dann auf das "Parent"-Window klicke ich den Fokus auf die Controls dort setze, d.h. ein User kann mit Tab etc. den Fokus ändern und evtl. ungewünschte Aktionen ausführen. Im Falle eines Ladescreens wäre sowas unter Umständen sehr fatal, da die Parent-Form ja dann auf Daten arbeiten will, die erst geladen werden. Ein anderes Problem wären Shortcuts, aber um das Problem habe ich mich noch nicht gekümmert. So viel zu meinen Gedankengängen bisher.

Daher eben auch die Idee, die Client Area zu "sperren", analog zu den Elementen auf einem Panel, die gesperrt sind, wenn ich Panel.Enabled auf False setze.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#5

AW: Client Area von Formular disablen

  Alt 31. Dez 2010, 13:38
Daher eben auch die Idee, die Client Area zu "sperren", analog zu den Elementen auf einem Panel, die gesperrt sind, wenn ich Panel.Enabled auf False setze.
Und jetzt rate mal woran das liegt?
Es sind Kindfenster. Nur daß hier dein Elternfenster das Formular wäre. Da du also Windows umgehen willst (weil nicht das Formular deaktiviert werden soll, sondern nur die Kindfenster), mußte es selber machen. Um MSDN-Library durchsuchenEnumWindows wirste hier nicht herumkommen.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

AW: Client Area von Formular disablen

  Alt 31. Dez 2010, 14:40
Aber das Panel selbst selbst Enabled der Unterkomponenten ja gar nicht auf False. Muss mir mal den Code dahinter anschauen, in der Hoffnung, ich finde die passende(n) Stelle(n).
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#7

AW: Client Area von Formular disablen

  Alt 31. Dez 2010, 14:50
Aber das Panel selbst selbst Enabled der Unterkomponenten ja gar nicht auf False. Muss mir mal den Code dahinter anschauen, in der Hoffnung, ich finde die passende(n) Stelle(n).
Ich weiß. Und wenn du dein Formular deaktivieren würdest, würde Windows es auch für dich übernehmen. Immerhin ist dann das gemeinsame Elternfenster (nämlich das Formular) deaktiviert, weshalb es auf die Kindfenster durchgreift.

Du willst aber ganz offensichtlich Windows und seine Mechanismen umgehen. Ansonsten hättest du wohl kaum das Panel so kategorisch ausgeschlossen. Dieses wäre ja wiederum ein gemeinsames Elternfenster für alle enthaltenen Elemente. Wenn du Windows austricksen willst, mußt du damit leben, daß du die Mechanismen selber nachimplementieren mußt. Ist nunmal so. Da wird auch eine lange Diskussion nix dran ändern

Das einzige was ich mir noch denken könnte, wäre irgendeine Schweinerei mit dem Formular während es geladen wird anzustellen und das Panel sozusagen zur Laufzeit zu injizieren. Aber auf Anhieb fiele mir dazu nicht mehr ein als im VCL-Code nachzuschlagen.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  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 05:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz