AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) WS_POPUP Windowstyle hat seltsamen Nebeneffekt
Thema durchsuchen
Ansicht
Themen-Optionen

WS_POPUP Windowstyle hat seltsamen Nebeneffekt

Ein Thema von idefix2 · begonnen am 25. Jun 2015 · letzter Beitrag vom 26. Jun 2015
Antwort Antwort
Seite 1 von 2  1 2      
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

WS_POPUP Windowstyle hat seltsamen Nebeneffekt

  Alt 25. Jun 2015, 22:37
Nachdem mir die vorgefertigten Delphi Messagedlg Routine zu unflexibel ist und ich aber nicht für jede kleine Zwischenfrage eine neue Form machen will, habe ich begonnen, mir eine flexiblere Dialog-Unit zu erstellen. Das Fenster soll zunächst einen grossen Label für die Textausgabe, ein Panel mit 5 Buttons (die man wahlweise vor dem Aufruf sichtbar oder unsichtbar machen kann) enthalten, geplant ist ein zusätzliches Frame, in das man zur Laufzeit weitere Eingabekomponenten, z.B. ein Edit-Feld oder eine Dropdownbox hängen kann.
Ich würde dem Fenster gerne den Style WS_POPUP or WS_THICKFRAME geben, weil mir für so ein Fragefenster eine Titelleiste überflüssig und eher störend erscheint.
Aber sobald ich in der Routine TdlgFrage.CreateParams die Zeile Params.Style := WS_POPUP OR WS_THICKFRAME einfüge, passsiert etwas ganz eigenartiges: Der erste Button wird bei der Anzeige der Form nicht gezeichnet. Er kann aber angeklickt werden, und wird sichtbar, sobald man ihn anklickt. Ohne diese Zeile sind alle Buttons normal sichtbar.

Zum Ausprobieren einfach die Unit einbinden, Aufruf mit
result:=Ask (Fragetext, Button1text, button2text ...)
Angehängte Dateien
Dateityp: zip FormFrage.zip (2,4 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: WS_POPUP Windowstyle hat seltsamen Nebeneffekt

  Alt 25. Jun 2015, 22:54
Wieso nicht TTaskDialog verwenden? Damit ist man flexibel genug um viele einfache Dialogklassen zu vermeiden und man hat auch keine Buttons mit ganzen Fragen als Buttontext.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#3

AW: WS_POPUP Windowstyle hat seltsamen Nebeneffekt

  Alt 25. Jun 2015, 23:25
Ich habe keine "Buttons mit ganzen Fragen" als Buttontext, sondern die möglichen Antworten auf die im Label angezeigte Frage. z.B:
Delphi-Quellcode:
case Ask('Eine PDF Datei mit diesem Namen existiert schon.'#13+#10
            +'Wollen sie die PDF Datei überschreiben'#13#10
            +'oder eine neue Seite an die Datei anhängen?',
         'Überschreiben', 'Anhängen', 'Anderer Name', 'Abbrechen') of
   1: doÜberschreiben;
   2: doAnhängen;
   3: DoAndererName;
   4: exit;
   end;
Die Einschränkung der Buttontexte auf die paar vorgefertigten möglichen Antworten (Ok, Ja, Nein etc.) ist ein Hauptgrund für meine Eigenbau Dialog-Unit. Das Anzeigen anderer Buttons im TTaskdiaog ist zwar möglich, aber doch recht umständlich.

Abgesehen davon, dass ich noch auf einige Windows-XP-Anwender Rücksicht nehmen muss und in dem konkreten Projekt die Verwendung dieses Windows-Dialogs, den es erst ab Vista gibt, dadurch ohnehin nicht möglich ist.

Und der Standard-TTaskDialog ist übrigens auch mit der unnötigen Überschrift ausgestattet, die ich in meinem Dialog gerne weg hätte.

Geändert von idefix2 (25. Jun 2015 um 23:45 Uhr)
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#4

AW: WS_POPUP Windowstyle hat seltsamen Nebeneffekt

  Alt 26. Jun 2015, 08:00
Ich nehme für solche Zwecke Solway's Task Dialog. Der emuliert den Taskdialog auch unter XP. Zusätzlich habe ich mir eine Funktion ähnlich deiner Funktion Ask() geschrieben.
Damit kann man solche etwas komplexeren Fragedialoge auch mit einem Funktionsaufruf erzeugen. Man kann auch noch kurze Erläuterungstexte zu den einzelnen Antworten angeben, damit der Anwender genau weiß, was er da tut. (s. Solways Hompege, unteres Beispiel).
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: WS_POPUP Windowstyle hat seltsamen Nebeneffekt

  Alt 26. Jun 2015, 08:23
Mir geht es in diesem Thread um diesen Fensterstyle ohne Überschrift, der nicht richtig funktioniert. Dass es prinzipiell andere Möglichkeiten gibt, Dialoge u erzeugen, ist schon klar.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#6

AW: WS_POPUP Windowstyle hat seltsamen Nebeneffekt

  Alt 26. Jun 2015, 08:29
Das Anzeigen anderer Buttons im TTaskdiaog ist zwar möglich, aber doch recht umständlich.
Das kannst du natürlich genausogut in eine Helper-Routine packen, wie du es mit deiner Implementation getan hast.

Abgesehen davon, dass ich noch auf einige Windows-XP-Anwender Rücksicht nehmen muss und in dem konkreten Projekt die Verwendung dieses Windows-Dialogs, den es erst ab Vista gibt, dadurch ohnehin nicht möglich ist.
Auch da gibt's Abhilfe: http://blog.synopse.info/post/2011/0...XP,Vista,Seven

Edit:
Mir geht es in diesem Thread um diesen Fensterstyle ohne Überschrift, der nicht richtig funktioniert. Dass es prinzipiell andere Möglichkeiten gibt, Dialoge u erzeugen, ist schon klar.
Aber obige Aussgaen kann man ja nicht unkommentiert stehen lassen.
Uli Gerhardt

Geändert von uligerhardt (26. Jun 2015 um 08:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: WS_POPUP Windowstyle hat seltsamen Nebeneffekt

  Alt 26. Jun 2015, 08:50
Ich habe keine "Buttons mit ganzen Fragen" als Buttontext, sondern die möglichen Antworten auf die im Label angezeigte Frage. z.B:
Delphi-Quellcode:
case Ask('Eine PDF Datei mit diesem Namen existiert schon.'#13+#10
            +'Wollen sie die PDF Datei überschreiben'#13#10
            +'oder eine neue Seite an die Datei anhängen?',
         'Überschreiben', 'Anhängen', 'Anderer Name', 'Abbrechen') of
   1: doÜberschreiben;
   2: doAnhängen;
   3: DoAndererName;
   4: exit;
   end;
Die Einschränkung der Buttontexte auf die paar vorgefertigten möglichen Antworten (Ok, Ja, Nein etc.) ist ein Hauptgrund für meine Eigenbau Dialog-Unit. Das Anzeigen anderer Buttons im TTaskdiaog ist zwar möglich, aber doch recht umständlich.
Und genau für so einen Fall ist ein Taskdialog besser geeignet als ein "altertümlicher" Dialog mit geänderten Buttonbechriftungen
Anbei ein Screenshot (der LMD-Implementierung - mit noch Designfehlern der der D6-Version) wie es hier aussieht

Abgesehen davon, dass ich noch auf einige Windows-XP-Anwender Rücksicht nehmen muss und in dem konkreten Projekt die Verwendung dieses Windows-Dialogs, den es erst ab Vista gibt, dadurch ohnehin nicht möglich ist.
Der native Dialog ist erst ab Vista vorhanden. Wenn man aber einen der Zig-Delphi-Implementierungen nimmt so läuft das auch unter XP.

Zeige einfache einen "unbedarften" User deinen Dialog und diesen Taskdialog. Zu 95% wird er den Taskdialog verständlicher finden. Unter den Haupttexten kann man auch noch längere Beschreibungen unterbringen.
Miniaturansicht angehängter Grafiken
task.png  
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von frankyboy1974
frankyboy1974

Registriert seit: 7. Apr 2015
Ort: SH
169 Beiträge
 
Delphi XE7 Professional
 
#8

AW: WS_POPUP Windowstyle hat seltsamen Nebeneffekt

  Alt 26. Jun 2015, 08:58
Hallo,

also ich generiere alle Formulare erst dynamisch zur Laufzeit des Programms. Den graphischen Editor von Delphi benutze ich nur noch zum Testen, ansonsten programmiere ich Oberflächen wie auch in Java üblich nur aus dem Quellcode heraus. Damit kann man sich natürlich beliebige Abfragedialoge sehr schnell flexibel erzeugen, ohne jedesmal ein neues Formular mit dem Editor erstellen zu müssen

mfg

frank

P.S.: Mir ist klar, dass dir dies nicht wirklich weiter hilft
Java ist auch eine Insel.
Ist Delphi von Oracle?
In meiner Buchstabensuppen fehlt das C++!
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#9

AW: WS_POPUP Windowstyle hat seltsamen Nebeneffekt

  Alt 26. Jun 2015, 09:12
Ach ja - zu deiner Frage:
Du kickst mit deinem CreateParams die Vorbelegungen raus. Das muss so ausschauen:
Delphi-Quellcode:
procedure TdlgFrage.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or WS_POPUP or WS_THICKFRAME;
  Params.ExStyle := Params.ExStyle or WS_EX_TOOLWINDOW;
end;
Edit: Dazu noch BorderStyle := bsNone . (Siehe http://stackoverflow.com/questions/1...ar-from-a-form)

Noch ein Nörgelkommentar: Messageboxen ohne Titelleiste hat z.B. List&Label, und ich hasse es. Die sind manchmal kaum zu sehen.
Uli Gerhardt

Geändert von uligerhardt (26. Jun 2015 um 09:22 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#10

AW: WS_POPUP Windowstyle hat seltsamen Nebeneffekt

  Alt 26. Jun 2015, 09:40
Noch ein Nörgelkommentar: Messageboxen ohne Titelleiste hat z.B. List&Label, und ich hasse es. Die sind manchmal kaum zu sehen.
Und wenn dann naoch jemand meint, er müsse die Property "Position" der Form auf "poDesktopCenter" stellen, dann wird es ganz spassig.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:23 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