Image´s innerhalb des Programms

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Image´s innerhalb des Programms

Beitrag von Velindos »

Hallo ts-soft,
ts-soft hat geschrieben:2. Den SetParent Quatsch entfernen. Nimmer z.B. mehrere Container übereinander, die Du bedarf
anzeigst (HideGadget(#Container1, #False) und die anderen versteckst.
Danke, für deinen Tip, gibt es dafür ein Beispiel?

Gruss ............ Velindos
Zuletzt geändert von Andesdaf am 25.11.2010 15:44, insgesamt 1-mal geändert.
Grund: Codetags ergänzt
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Image´s innerhalb des Programms

Beitrag von ts-soft »

Beispiel, ohne Proceduren (mit wäre schöner, aber so verstehste es vielleicht eher)

Code: Alles auswählen

EnableExplicit

Enumeration ; Fenster
  #frmMain
EndEnumeration

Enumeration ; Gadgets
  #Container1
  #Container2
  #Container3
  #Button1
  #Button2
  #Button3
  #ButtonContainer1
  #ButtonContainer2
  #ButtonContainer3
EndEnumeration

OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 640, 450, "Containerbeispiel", #PB_Window_SystemMenu | #PB_Window_Invisible)

ContainerGadget(#Container1, 0, 0, 640, 380)
  ButtonGadget(#Button1, 10, 10, 80, 30, "Button1")
CloseGadgetList()
ContainerGadget(#Container2, 0, 0, 640, 380)
  ButtonGadget(#Button2, 20, 20, 80, 30, "Button2")
CloseGadgetList()
ContainerGadget(#Container3, 0, 0, 640, 380)
  ButtonGadget(#Button3, 30, 30, 80, 30, "Button3")
CloseGadgetList()

ButtonGadget(#ButtonContainer1, 20, 400, 100, 30, "Zeig Container 1")
ButtonGadget(#ButtonContainer2, 140, 400, 100, 30, "Zeig Container 2")
ButtonGadget(#ButtonContainer3, 260, 400, 100, 30, "Zeig Container 3")

HideGadget(#Container2, #True)
HideGadget(#Container3, #True)

HideWindow(#frmMain, #False)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button1
          Debug "Button1 in Container 1"
        Case #Button2
          Debug "Button2 in Container 2"
        Case #Button3
          Debug "Button3 in Container 3"          
        
        Case #ButtonContainer1
          HideGadget(#Container1, #False)
          HideGadget(#Container2, #True) 
          HideGadget(#Container3, #True) 
        Case #ButtonContainer2
          HideGadget(#Container1, #True)
          HideGadget(#Container2, #False) 
          HideGadget(#Container3, #True)           
        Case #ButtonContainer3
          HideGadget(#Container1, #True)
          HideGadget(#Container2, #True) 
          HideGadget(#Container3, #False)           
      EndSelect
  EndSelect
ForEver
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Image´s innerhalb des Programms

Beitrag von ts-soft »

Hier nochmal mit Procedure:

Code: Alles auswählen

EnableExplicit

Enumeration ; Fenster
  #frmMain
EndEnumeration

Enumeration ; Gadgets
  #Container1
  #Container2
  #Container3
  #Button1
  #Button2
  #Button3
  #ButtonContainer1
  #ButtonContainer2
  #ButtonContainer3
EndEnumeration

Procedure ShowContainer(index = #Container1)
 Protected i
 
 For i =  #Container1 To #Container3
  HideGadget(i, #True)
 Next
 HideGadget(index, #False)
EndProcedure

OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 640, 450, "Containerbeispiel", #PB_Window_SystemMenu | #PB_Window_Invisible)

ContainerGadget(#Container1, 0, 0, 640, 380)
  ButtonGadget(#Button1, 10, 10, 80, 30, "Button1")
CloseGadgetList()
ContainerGadget(#Container2, 0, 0, 640, 380)
  ButtonGadget(#Button2, 20, 20, 80, 30, "Button2")
CloseGadgetList()
ContainerGadget(#Container3, 0, 0, 640, 380)
  ButtonGadget(#Button3, 30, 30, 80, 30, "Button3")
CloseGadgetList()

ButtonGadget(#ButtonContainer1, 20, 400, 100, 30, "Zeig Container 1")
ButtonGadget(#ButtonContainer2, 140, 400, 100, 30, "Zeig Container 2")
ButtonGadget(#ButtonContainer3, 260, 400, 100, 30, "Zeig Container 3")

ShowContainer()

HideWindow(#frmMain, #False)

Define Gadget
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      Gadget = EventGadget()
      Select Gadget
        Case #Button1
          Debug "Button1 in Container 1"
        Case #Button2
          Debug "Button2 in Container 2"
        Case #Button3
          Debug "Button3 in Container 3"         
       
        Case #ButtonContainer1, #ButtonContainer2, #ButtonContainer3
          ShowContainer(Gadget - #ButtonContainer1)
      EndSelect
  EndSelect
ForEver 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Image´s innerhalb des Programms

Beitrag von Velindos »

Hallo dysti,

die Sache mit dem Image über PureForm funktioniert Super. Da ich eine Softwareverwaltung als Beispiel gewählt habe, wollte ich die einzelnen String$ mit einen Bild aus dem Internet versehen. Das ich ein Bild auf das ImageGagdet ziehe läuft. Aber dann kann ich das Bild nur in einer Datei speichern, aber nicht mir mehere Bilder zu meiner Software(Software$(a)) zuordnen und anschliessend als eine Datei speichern.
Wäre so als wollte ich einen pinguin pro Zeile zuordnen und dann alle Zeilen mit den zugeordneten Pinguinen in einer Textdatei mit abspeichern.

Gruss … Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Image´s innerhalb des Programms

Beitrag von dysti »

Willst du die Bilder einem Array zuordnen?
Software(Software$(a))
und dann das Array in einer Datei speichern.
Ich verstehe den ganzen Vorgang nicht.
Wandelst du die Bilder erst in Pureform um und ordnest die dem Array zu?
Oder suchst du die automatische Umwandlung wie in Pureform?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Image´s innerhalb des Programms

Beitrag von Velindos »

Hallo,
habe die Sache bis Dato wie folgt gelöst! Über das ImageGadget hole ich mir ein Bild;

Code: Alles auswählen

      Case #I_Bild
        If EventDropImage(#myDropImage)
          ResizeImage (#myDropImage,210,215)
          SetGadgetState(#I_Bild, ImageID(#myDropImage))
          If CreateImage(SpeicherBild, ImageWidth(#myDropImage), ImageHeight(#myDropImage))
            If StartDrawing(ImageOutput(SpeicherBild))
              DrawImage(ImageID(#myDropImage),0,0)
              StopDrawing()
              SaveImage(SpeicherBild, #SavePath+"redrawn clipboard Image.bmp")                  
speicher es in der Festplatte. Anschliessend hole ich mir das gespeicherte Bild wie folgt mit folgender Procedure wieder für das speichern in der Datenbank:

Code: Alles auswählen

Procedure DatensatzHinzu()
    DB=1
  Bildspalte=4
    If CreateFile(0, DatabaseFile$)
    CloseFile(0)
  EndIf
    OpenDatabase(DB, DatabaseFile$, "", "", #PB_Database_SQLite)
  DatabaseUpdate(DB, "Create Table Velindos (ID INTEGER,Stichwort TEXT,Notiz TEXT,Pfad TEXT, myBild BLOB)")
    ID$=GetGadgetText(#S_Data) 
  STICHWORT$=GetGadgetText(#S_Stichwort) 
  NOTIZ$=GetGadgetText(#S_Notiz) 
  PFAD$=GetGadgetText(#S_Pfad) 
    ReadFile(0,  #SavePath+"redrawn clipboard Image.bmp")
  Buffersize = Lof(0)
  Buffer = AllocateMemory(Buffersize)
  ReadData(0, Buffer, Buffersize)
  CloseFile(0)
    SetDatabaseBlob(DB, 0, Buffer, Buffersize)
  DatabaseUpdate(DB, "Insert Into Velindos (ID, Stichwort, Notiz,Pfad,myBild) Values ('"+ID$+"','"+STICHWORT$+"','"+NOTIZ$+"','"+PFAD$+"',?);")
  DatabaseQuery(DB, "Select * From Velindos")
  NextDatabaseRow(DB)
    ID$= GetDatabaseString(DB,0)
  SetGadgetText(#S_Data,ID$)
  STICHWORT$= GetDatabaseString(DB,1)
  SetGadgetText(#S_Stichwort,STICHWORT$)
  NOTIZ$= GetDatabaseString(DB,2)
  SetGadgetText(#S_Notiz,NOTIZ$)
  PFAD$= GetDatabaseString(DB,3)
  SetGadgetText(#S_Pfad,PFAD$)
    ; hier auslesen:
  If DatabaseColumnType(DB, Bildspalte) = #PB_Database_Blob
    picsize = DatabaseColumnSize(DB,Bildspalte)
    If picsize
      *blobreadpuffer = AllocateMemory(picsize)
      If *blobreadpuffer
        If GetDatabaseBlob(DB, Bildspalte, *blobreadpuffer, picsize)
          myImage = CatchImage(0, *blobreadpuffer)
          ;ImageGadget(#I_Bild, 240, 175, 210, 215, myImage, #PB_Image_Border)
          SetGadgetState(#I_Bild,myImage)
        Else
          Debug "GetDatabaseBlob ist fehlgeschlagen"
        EndIf
        FreeMemory(*blobreadpuffer)
      Else
        Debug "Nicht genügend Speicher vorhanden"
      EndIf
    Else
      Debug "picsize is null"
    EndIf
  Elsenif
    Debug "DatabaseColumnType(0, 1) ist kein Blob"
  EndIf
    CloseDatabase (DB)
  EndProcedure
Resume: Es ist mir nicht gelungen das Bild elegant an die Datenbank zu übergeben. Hat richtig Schweiss gekostet diese Lösung und habe anscheinend einige Leute verkrault, bin aber Anfänger mit Purebasic und muss mich auch erst hineinleben.

Gruss ... Velindos
PS: Bin für jeden Verbesserungsvorschlag zu haben!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Image´s innerhalb des Programms

Beitrag von dysti »

Vielleicht hilft dir dieser Link weiter:
http://purebasic-lounge.com/viewtopic.php?p=57615
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten