Seite 1 von 2

was läuft hier schief?

Verfasst: 13.12.2005 23:52
von hiltwin

Code: Alles auswählen


  If OpenWindow(0, 450, 200, 300, 100,  #PB_Window_SystemMenu | #PB_Window_TitleBar , "hiltwin_1.00")
    SetWindowPos_(WindowID(),#HWND_TOPMOST,0,0,0,0,#SWP_SHOWWINDOW|#SWP_NOMOVE|#SWP_NOSIZE) 
    If CreateGadgetList(WindowID())
  ButtonGadget(0, 235, 70, 60, 20, "ok")
StartDrawing(WindowOutput())
  DrawingMode(1)
  Locate(110, 10)
  DrawText("(c) hiltwin 2005")
  Locate(110, 30)
  DrawText("version 1.00")
  Locate(110, 50)
  DrawText("www.hiltwin.org")
 ; UseImage(1)
 ; DrawImage(ImageID(), 1, 1 , 96, 96) 
  StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !

   EndIf
  EndIf

Repeat  
  Event = WaitWindowEvent()  
  WindowID = EventWindowID()  
  
  If WindowID=0 And event= #PB_Event_CloseWindow 
  quit=1
  EndIf 

  Until quit=1
  quit=0

  CloseWindow(0) 
 
Wenn ich das Fenster ausserhalb des Monitorschirms mit der Maus schiebe und wieder reinziehe, ist der Text wech ... wie kann ich das verhindern?

Frdl. Gruss
Hiltwin

Verfasst: 13.12.2005 23:58
von ts-soft
Hallo Frdl. ,
am einfachsten wäre es, ein TextGadget zu nehmen, das Zeichnet Windows autom. neu. Oder willste noch was anderes Darstellen?

hallo thomas ..

Verfasst: 14.12.2005 00:14
von hiltwin
...

ja, eigentlich sollte noch ein jpg mit angezeigt werden ...

deshalb das

Code: Alles auswählen

 ; UseImage(1) 
 ; DrawImage(ImageID(), 1, 1 , 96, 96) 
ich hab es auch schon mit einem imagegadget versucht, allerdings scheitere ich da daran, wie ich das bild auf die grösse 96 pixel von original 140 pixel runterrechne. Ich lade das Bild nicht mit 96 Pixeln, da es an anderer Stelle ebenso mit 140 pixel verwandt wird ...

weiterhin hab ich aber teilweise auch probleme mit dem imagegadget, wenn ein anderes window "rübergefahren" wird ...

Verfasst: 14.12.2005 01:07
von ts-soft
Hab erstmal das Neuzeichnen per Timer umgesetzt, aber wie gesagt es gibt sehr viele Möglichkeiten!

Code: Alles auswählen

Procedure Zeichnen()
    StartDrawing(WindowOutput())
    DrawingMode(1)
    Locate(110, 10)
    DrawText("(c) hiltwin 2005")
    Locate(110, 30)
    DrawText("version 1.00")
    Locate(110, 50)
    DrawText("www.hiltwin.org")
    ; UseImage(1)
    ; DrawImage(ImageID(), 1, 1 , 96, 96)
    StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !
EndProcedure


If OpenWindow(0, 450, 200, 300, 100,  #PB_Window_SystemMenu | #PB_Window_TitleBar , "hiltwin_1.00")
  SetWindowPos_(WindowID(),#HWND_TOPMOST,0,0,0,0,#SWP_SHOWWINDOW|#SWP_NOMOVE|#SWP_NOSIZE)
  If CreateGadgetList(WindowID())
    SetTimer_(WindowID(), 0, 100, @Zeichnen())
    ButtonGadget(0, 235, 70, 60, 20, "ok")
  EndIf
EndIf

Repeat 
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      KillTimer_(WindowID(), 0)
      quit = 1 ; Fenster schließen
    Case #PB_Event_Gadget
      Select EventGadgetID()
        Case 0 ; Button
      EndSelect 
  EndSelect
  
Until quit=1
quit=0

CloseWindow(0)
Teste das erstmal aus, obs so richtig ist und dann geht es weiter :wink:

guten spätabend!

Verfasst: 14.12.2005 01:38
von hiltwin
oh menno, jetzt fängt der kerl auch noch mit prozeduren an - wo doch mein programm keine einzige hat /:->

Also, das mit dem Timer ist ja ne nette Idee.

Ich hab jetzt allerdings erstmal Deinen anderen Ratschlag befolgt und den Text in ein Textgadget gelegt.

Das Problem mit dem Imagegadget konnte ich dann doch selber mit ResizeImage lösen - war zuvor betriebsblind.

Ganz kurz abschliessend noch: Alle meine zusätzlichen Fenster zerstören beim Zeichnen nichts mehr.

Allerdings, wenn ich im Debug-Modus mit dem zusätzlichen Debug-Fenster über mein Programmfenster "wische", ist erstmal alles weg und nach kurzer Zeit baut sich alles wieder von selber auf. Ist das allgemein so, oder hab ich da noch nen Bug drin?

Verfasst: 14.12.2005 01:46
von ts-soft
Dann spiel mal mit ResizeImage()

PS: Findeste es mit Prozeduren nicht übersichtlicher?

Verfasst: 14.12.2005 01:53
von hiltwin
du warst schneller mit dem antworten als ich mit dem editieren ;o)

und noch eine frage ;o)

wenn ich z.B. bei word mir die versionsinfo aufrufe, dann bekomm ich unten in der taskleiste kein zweites fenster angezeigt, aber es öffnet sich ja ein fenster, das sich über das andere programmfenster legt.

bei meinem programm zeigts nun 2 fenster an ...

Wie liesse sich so etwas umgehen - und wenn möglich, wie kann man das nachträglich noch in ein fast fertiges programm einbauen, oder wird das zu aufwendig?

ach ja - die antwort auf die prozeduren-frage noch ... :wink:

na klar sind prozeduren übersichtlicher. hab mich allerdings noch nie richtig mit beschäftigt. ich arbeite in meinem programm nur mit gosub ...
für alle, die darauf spontan antworten wollen: ich habe alle diskussionen hier um goto/gosub der letzten zeit gelesen.
allerdings stammen meine ersten basic-programmiererfahrungen aus der amstrad-zeit von vor 20 jahren. und da gab es in der tat noch die zeilennummern ...
allerdings hatte ich nie verstanden, warum das als "spaghetti-code" bezeichnet wurde, da ich damals schon meine programme strikt mit subroutinen über gosub angesprungen hab und keinen einzigen kreuz-und quersprung drin hatte.
dabei fällts mir übrigens gerade wieder ein: der amstrad war der erste consumer-pc mit basic, der mit windows gearbeitet - allerdings konnte er keine sprites ...

Verfasst: 14.12.2005 02:09
von ts-soft

Code: Alles auswählen

#FensterHaupt = 0
#FensterUnter = 1

If OpenWindow(#FensterHaupt, 0,0,200,200,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"HauptFenster") = #False : End : EndIf

If OpenWindow(#FensterUnter, 0,0,100,100,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"UnterFenster", WindowID(#fensterhaupt)) = #False : End : EndIf
; bla bla
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      If EventWindowID() = #FensterHaupt
        Quit = 1
      ElseIf EventWindowID() = #FensterUnter
        CloseWindow(#FensterUnter)
      EndIf
  EndSelect
Until Quit = 1
So schlimm ist das nicht :)

CPC 464?

Verfasst: 14.12.2005 02:14
von hiltwin
:allright:

das sieht in der tat sehr einfach aus. da muss ich ja nur sieben oder acht fensteransteuerungen abändern - das passt! 8)

Verfasst: 14.12.2005 02:18
von ts-soft
Und das andere nochmal mit gosub :mrgreen:

Code: Alles auswählen

If OpenWindow(0, 450, 200, 300, 100,  #PB_Window_SystemMenu | #PB_Window_TitleBar , "hiltwin_1.00")
  SetWindowPos_(WindowID(),#HWND_TOPMOST,0,0,0,0,#SWP_SHOWWINDOW|#SWP_NOMOVE|#SWP_NOSIZE)
  If CreateGadgetList(WindowID())
    SetTimer_(WindowID(), 0, 100, ?Zeichnen)
    ButtonGadget(0, 235, 70, 60, 20, "ok")
  EndIf
EndIf

Repeat 
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      KillTimer_(WindowID(), 0)
      quit = 1 ; Fenster schließen
    Case #PB_Event_Gadget
      Select EventGadgetID()
        Case 0 ; Button
      EndSelect 
  EndSelect
  
Until quit=1
quit=0

CloseWindow(0)
End
Zeichnen:
    StartDrawing(WindowOutput())
    DrawingMode(1)
    Locate(110, 10)
    DrawText("(c) hiltwin 2005")
    Locate(110, 30)
    DrawText("version 1.00")
    Locate(110, 50)
    DrawText("www.hiltwin.org")
    ; UseImage(1)
    ; DrawImage(ImageID(), 1, 1 , 96, 96)
    StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !
Return