Angepinnt Dauerhafter Hintergrund für Dialogfenster

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Ein Code für dauerhafte Dialoghintergründe jeglicher Art, also nicht nur einfarbig:

      [IMG:http://s4.postimage.org/2n30jbtd0/Screen_17_03_2011_20_52_06.jpg]

      Brainfuck-Quellcode

      1. '
      2. ' (c) Frabbing für Paules-PC-Forum:
      3. ' http://www.paules-pc-forum.de/forum/xprofan/
      4. '
      5. $H windows.ph
      6. $H messages.ph
      7. Declare dc&, ps#
      8. Dim ps#,128
      9. Cls
      10. Proc NeuZeichnen
      11. Parameters thedc&
      12. StartPaint thedc&
      13. '
      14. ' --- Hier den Hintergrund des Dialogs neu zeichnen ---
      15. UseBrush 1,RGB(128,128,255)
      16. Rectangle 0,0 - %maxx,%maxy
      17. UseBrush 1,RGB(255,200,40)
      18. Ellipse 0,0 - 400,300
      19. ' -----------------------------------------------------
      20. EndPaint
      21. Endproc
      22. SubClassProc
      23. If %smessage = ~WM_PAINT
      24. dc& = ~BeginPaint(&sWnd, ps#)
      25. NeuZeichnen(dc&)
      26. ~EndPaint(&sWnd, ps#)
      27. Set("WinProc", 0)
      28. Endif
      29. EndProc
      30. var d1& = Create("Dialog",%hwnd,"Dialog",200,200,400,300)
      31. var d2& = Create("Window",%hwnd,"Window",400,400,400,300)
      32. ' Dialoge hier schonmal neuzeichnen, weil uns das Subclassing
      33. ' mit XProfan WM_INITDIALOG nicht abfragen lässt
      34. '
      35. Neuzeichnen(~GetDC(d1&))
      36. Neuzeichnen(~GetDC(d2&))
      37. ' Jetzt erst die Controls für die Dialoge
      38. '
      39. Create("Button",d1&,"Ein Button",140,140,120,40)
      40. Create("Button",d2&,"Ein Button",140,140,120,40)
      41. SubClass d1&, 1
      42. SubClass d2&, 1
      43. While 1
      44. WaitInput
      45. Case %key=2: BREAK
      46. EndWhile
      Alles anzeigen
      Leider lässt sich WM_INITDIALOG im Subclassing nicht abfragen, darum muß man - zumindest unter Windows 7 - das erste Neuzeichnen manuell übernehmen.
      Gruß, Frank
    • Hallo Frank,

      für einen einfachen Hintergrund sollte eine Reaktion auf ''WM_CTLCOLORDLG'' reichen.

      Quellcode

      1. '######################
      2. 'Header-Dateien
      3. '######################
      4. $H Windows.ph
      5. $H Messages.ph
      6. '######################
      7. Windowstyle 543
      8. $H Windows.ph
      9. Declare Ende&,Ende1&,Win02&
      10. CLS ~GetSysColor(~Color_BTNFACE)
      11. 'Der Brush wird von Windows benutzt um den Dialoghintergrund zu zeichnen
      12. Var Dialogpinsel& = ~Createsolidbrush($FFFF80)
      13. Var Button& = CREATE("BUTTON",%hwnd,"Dialog öffnen",10,10,150,25)
      14. WindowTitle "Test..."
      15. Whilenot Ende&
      16. Waitinput
      17. If Clicked(Button&)
      18. win02&=CREATE("Dialog",%hwnd,"Dialog",(%MaxX/2-300),(%MaxY/2-250),600,500)
      19. 'einmal die Farbe geben
      20. Startpaint win02&
      21. cls $FFFF80
      22. Endpaint
      23. 'Subclassing einschalten
      24. SubClass win02&,1
      25. Whilenot Ende1&
      26. WAITINPUT
      27. If %Key = 2
      28. Ende1& = 1
      29. endif
      30. Endwhile
      31. DestroyWindow(win02&)
      32. ElseIf %Key = 2
      33. Ende& = 1
      34. Endif
      35. Endwhile
      36. DeleteObject Dialogpinsel&
      37. End
      38. SubClassProc
      39. If SubClassMessage(win02&,~WM_CTLCOLORDLG)
      40. Set("WinProc", 0)
      41. '~WM_CTLCOLORDLG erwartet als Rückgabewert einen Brush für den Hintergrund
      42. Return Dialogpinsel&
      43. EndIf
      44. EndProc
      Alles anzeigen
      Gruss
      Andreas

      ______________________
      http://www.ampsoft.eu

      Profan 3.3 - XProfanX2
      Windows 95,98,ME,2000,XP
      Vista - Windows 7 32 / 64 Bit

      ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher
    • Erst gefunden. Geht das auch ohne großen Aufwand ohne Subclass.
      Wenn man eine Unit verwendet ist es halt nicht so gut mit Subclass.
      Momentan behelfe ich mir in ner Unit halt so, daß ich Startpaint verwende, aber nach dem Zeichnen des Hintergrunds mit CLS Farbe& sind die Objekte verschwunden.
      Muss diese erst alle wieder mit ShowWindow(...,1) hervorrufen???
      Gruß Fränki
      Hobbyprogrammierer in XProfan(11.2)X2, Win7(32) Home, Win7(64) Home, XP Pro. Meine Homepage und mein kleiner Schnäppchenmarkt
    • Frabbing;905570 schrieb:

      Deswegen kann man aber einen Aufruf in der Hauptschleife plazieren. ;-)

      Ohne Eingriff des Programmieres (nicht des Unit-Erstellers) sollten auch keine
      Dialoge gefärbt, geskinnt oder sonstwas werden, und dann auch nur, wenn
      es sich um einen MediaPlayer oder ähnlich handelt.
      Ich persönlich hasse es, wenn Controls oder Dialoge nicht das von mir in
      Windows eingestellte Farbschema nutzen, sieht einfach scheisse aus :D.
      Gruß Thomas
      Meine Hardware
      Programmieren ist wie Küssen: Man kann darüber reden, man kann es beschreiben, aber man weiß erst was es bedeutet, wenn man es getan hat.
      ComputerInfo für PPF
    • Hasse ich auch, so ein Extrem-Skinning. Aber gegen ein dezentes Logo oben oder seitlich im Fensters spricht sicher nichts, macht Programme oft etwas freundlicher, wenn's im Rahmen bleibt.

      [offtopic]Mein Monitor hat Anlaufzeiten von über ner Minute und erzeugt seltsame Doppelbilder. Da ist wohl bald ein neuer fällig... :([/offtopic]
      Gruß, Frank
    • Frabbing;905589 schrieb:

      Hasse ich auch, so ein Extrem-Skinning. Aber gegen ein dezentes Logo oben oder seitlich im Fensters spricht sicher nichts, macht Programme oft etwas freundlicher, wenn's im Rahmen bleibt.

      [offtopic]Mein Monitor hat Anlaufzeiten von über ner Minute und erzeugt seltsame Doppelbilder. Da ist wohl bald ein neuer fällig... :([/offtopic]

      Genau, dazu wollte ich es benutzen und mache das ja auch schon. Nur um Infos zu zeigen, sonst lasse ich die Dialoge so wie sie sind.
      Gruß Fränki
      Hobbyprogrammierer in XProfan(11.2)X2, Win7(32) Home, Win7(64) Home, XP Pro. Meine Homepage und mein kleiner Schnäppchenmarkt