Seite 1 von 1

Images werden nicht angezeigt ..... [Gelöst]

Verfasst: 17.02.2008 18:08
von Tsuki-Namida
hallo wie schon der Titel sagt...gehen die images und die button nicht wie sie sollen...

also ich habe eine procedure geschrieben "Procedure Naricht(Titel$,Text$,Typ,Fenster);Typ: 1=Fehler 2=Hinweis 3=Frage [Ja&OK=1 Nein=0]"

so wenn ich Typ = 2 angeben funktioniert es super also ohne probleme... gebe ich im Typ = 1 oder Typ = 3 an dann geht es nicht... zum ersten wird der Imagegadget nicht angezeigt und zu dem kann man den button nicht drücken auch wenn er vorhanden ist...

wenn ich die Image Variabel austausche geht dann das andere image und dafür das was drinne sein sollte nicht... also die images stimmem sind nicht kaput oder ähnliches... die images sind jewals Icon's 48 mal 48 pixel groß und haben eine farbtiefe von 24 bit und benötigen den selben speicher also alle drei verwendeten bilder sind gleich auser in der darstellung...

ach ja nehme ich ein anderes Image zum beispiel Image1 oder Image0 geht es genauso wenig... aber an einer anderen stelle der anwendung werden sie angezeigt...
Ich weis mir keinen raat mehr....


diese procedure soll später als messagerequester dienen damit es aber zum style der anwendung passt möchte ich meinen eigenen message requester nutzen.

hier ist die procedure:

Code: Alles auswählen

Procedure Naricht(Titel$,Text$,Typ,Fenster);Typ: 1=Fehler 2=Hinweis 3=Frage [Ja&OK=1 Nein=0]
  Window = OeffneFenster(#MSGWindow,0,0,400,100,Titel$,#PB_Window_ScreenCentered,WindowID(Fenster))
  If Window And CreateGadgetList(WindowID(#MSGWindow))
    If Typ=1
      ImageGadget(0,6,26,48,48,Image2)
      ImageButton(#MSG_OK,150,72,100,24,"OK",0)
    ElseIf Typ=2
      ImageGadget(0,6,26,48,48,Image4)
      ImageButton(#MSG_OK,150,72,100,24,"OK",0)
    ElseIf Typ=3
      ImageGadget(0,6,26,48,48,Image3)
      ImageButton(#MSG_JA,130,72,70,24,"Ja",0)
      ImageButton(#MSG_Nein,200,72,70,24,"Nein",0)
    EndIf
    Text = TextGadget(#PB_Any,55,5,350,65,Text$)
    SetGadgetColor(Text,#PB_Gadget_BackColor,RGB($CE,$DE,$F3))
    
  Else
    
  EndIf
  DisableWindow(Fenster,1)
EndProcedure

Verfasst: 17.02.2008 21:08
von Mok
hmm,
OeffneFenster() is not a function, an array, or a linked list
Und wenn man stattdessen OpenWindow nimmt, wurde #MSGWindow nicht gefunden.
PS: Wieso 'Oeffne Fenster'? PB auf Deutsch?

Verfasst: 17.02.2008 21:29
von Tsuki-Namida
eine berechtigte frage xD aber PB auf deutsch wäre ja mal wirklich was xD

nein^^
OeffneFenster ist ebenfals eine procedure^^ da ich mer als nur 5 fenser mache für die anwendung aber die fenster farbig haben möchte habe ich dafür einfach ne procedure gemacht damit ich es einfach habe...

Code: Alles auswählen

Procedure OeffneFenster(Constand,x,y,Breite,Hoehe,Titel$,Flag,WindowID)
  If WindowID
    a = OpenWindow(Constand,x,y,Breite,Hoehe,Titel$,Flag,WindowID)
  Else
    a = OpenWindow(Constand,x,y,Breite,Hoehe,Titel$,Flag)
  EndIf
  SetWindowColor(Constand,RGB($CE,$DE,$F3))
  ProcedureReturn a
EndProcedure
und "#MSGWindow" ist eine constande für das entsprechende fenster

Verfasst: 17.02.2008 23:31
von AND51
PureBasic auf Deutsch hat's auch schon gegeben... :wink:
http://www.purebasic.fr/german/viewtopic.php?t=12111

@ Topic:
Du programmierst zu umständlich. Bei deiner OeffneFenster-Prozedur kannst du den Code um einige Zeilen verkürzen, wenn du optionale Parameter benutzt. Dann musst du WIndowID nicht auf 0 setzen, wenn du das nicht brauchst.
Darüber hinaus tut's auch ein Macro.

Deine Naricht-Prozedur (soll das vielleicht "Nachricht" heißen?) kannst du ebenfalls übersichtlicher gestaltetn. Beispielsweise kannst du Select benutzen und das Imagegadget, da es in allen 3 Fällen dieselben Koordinaten und Dimensionen hat, vor dem Select erstellen. Gib ihm einfach die ImageID 0; und dann innerhalb des Select weist du ihm die richtige ImageID zu.

Warum deine Buttons nicht erscheinen kann ich nicht sagen. Kontrolliere bitte noch einmal, welche Werte deine #MSG_* Konstanten haben. Haben diese die gleichen Werte wie bereits vorhandene gadgets? Dann gibts Konflikte. Und wieso erstellst du bei jedem Prozeduraufruf das Fenster neu? Du schließt es ja hinterher nicht einmal. Sondern du erstellst ein neues Fenster mit bestehenden IDs, was dazu fürht, dass das alte Fenster "überschrieben" wird. Das mag ja gut gehen, ich würds aber trotzdem anders machen.
Du möchtest doch anscheinend eine Art selbstgebauten Requester machen, oder? Dann würde ich dir empfehlen, für deine Image- und Gadget- und WindowIDs auf #PB_Any zu setzen!
Entweder benutzt du hinterher auch CloseWindow(), um das Fenster und alle Gadgets freizugeben, oder du versteckst das fenster nach Ende der Prozedur und zeigst es bei erneutem Aufruf wieder an.

Verfasst: 18.02.2008 06:03
von Tsuki-Namida
okay der rechtschreibfehler in der procedure ist das eine aber ändert ja nichts an der sache...

ich werde es mit select versuchen und die procedure für die fenster ja okay ein makro ist auch eine lösung^^

fenster schließen? warum kommst du darauf das ich die nciht schließen würde? nur weil in der procedure das nicht vorhanden ist? sicher schließe ich fenster ordnungs gemäs um ggf. fehler zu vermeiden...

[Edit]
war zwar nicht das problem aber dennoch anderweitig gelöst.
Hier mit einen großen Dank an alle dir sich dieses problem angesehn haben.
und ein noch größere Danke an "Andreas" aus Berlin