Bild im Webgadget vergrößern

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Bild im Webgadget vergrößern

Beitrag von dysti »

Hallo,
wie kann man in einem Webgadget angezeigtes Bild vergrößern?

Diese Funktion findet man z.B. im Browser K-Meleon.
Auf eine Grafik klicken, rechte Maustaste->Vergrößern.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Hier ist meine Lösung:

Code: Alles auswählen

StandardFile$ = "" 
Pattern$ = "Bilder (*.jpg)|*.jpg|Alle Dateien (*.*)|*.*"
Pattern = 0
File$ = OpenFileRequester("Bitte Datei zum Laden auswählen", StandardFile$, Pattern$, Pattern)

If File$

path$=GetPathPart(File$)

NewList bilder.s() 
Directory$ = Left(path$,Len(path$)-1)+"/" 
  If ExamineDirectory(0, Directory$, "*.*")  
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
      If Right( DirectoryEntryName(0),3)="JPG"
      AddElement(bilder())
      bilder() = DirectoryEntryName(0)
      EndIf
      EndIf 
    Wend
    FinishDirectory(0)
  EndIf

SelectElement(bilder(), 0) 
anzBild1$= bilder()
SelectElement(bilder(), 6)
anzBild2$= bilder()
Bildgroesse=160


bhtml$ = "<html xml:lang='de-DE' lang='de-DE'  xmlns='http://www.w3.org/1999/xhtml'>"
bhtml$ + "<head>"
bhtml$ + "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />"
bhtml$ + "<title>Beispiel</title>"
bhtml$ + "<style type='text/css'>"
bhtml$ + "body {"
bhtml$ + " background: #555;"
bhtml$ + "}"

bhtml$ + "a.bild {"
bhtml$ + "display: block;"
bhtml$ + "margin: 10% auto;"
bhtml$ + "width: " + Str(Bildgroesse) + "px;"
bhtml$ + "padding: 2px;"
bhtml$ + "border: 1px solid #ccc;"
bhtml$ + "}"
bhtml$ + "a.bild img {"
bhtml$ + " width: 100%;"
bhtml$ + " border: none;"
bhtml$ + "}"
bhtml$ + "</style>"
bhtml$ + "</head>"
bhtml$ + "<body>"
bhtml$ + "<a href='file://" + Directory$+ bilder() + "' class='bild'>"
bhtml$ + "<img src='file://" + Directory$ + bilder() +"' alt='Bild anzeigen' />"
bhtml$ + "</a>"
bhtml$ + "</body>"
bhtml$ + "</html>  "


OpenWindow(0,10,10,600,600,"Bilder anzeigen",#PB_Window_WindowCentered|#PB_Window_SystemMenu)

WebGadget(1,100,50,400,400,"")
ButtonGadget(2,10,10,100,30,"Vergrößern")
ButtonGadget(3,130,10,100,30,"Verkleinern")
ButtonGadget(4,250,10,100,30,"vorheriges Bild")
ButtonGadget(5,370,10,100,30,"nächstes Bild")
ButtonGadget(6,490,10,100,30,"Verlassen")

SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)


Repeat
   
   
   event = WaitWindowEvent()
   
   Select event
   
   Case #PB_Event_Gadget

   If EventGadget() = 2
            alteBildgroesse=Bildgroesse
            Bildgroesse=Bildgroesse+50
            ReplaceString(bhtml$,Str(alteBildgroesse)+"px",Str(Bildgroesse)+"px",#PB_String_InPlace)
            SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)               
         EndIf
    If EventGadget() = 3
            alteBildgroesse=Bildgroesse
            Bildgroesse=Bildgroesse-50
            ReplaceString(bhtml$,Str(alteBildgroesse)+"px",Str(Bildgroesse)+"px",#PB_String_InPlace)
            SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)               
         EndIf
    
    If EventGadget() = 4
            anzBild1$= bilder()
            PreviousElement(bilder())
            anzBild2$= bilder()
            ReplaceString(bhtml$,anzBild1$,anzBild2$,#PB_String_InPlace)
            SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)               
         EndIf
             
    If EventGadget() = 5
            anzBild1$= bilder()
            NextElement(bilder())
            anzBild2$= bilder()
            ReplaceString(bhtml$,anzBild1$,anzBild2$,#PB_String_InPlace)
            SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)               
         EndIf
        
    If EventGadget() = 6
         Event = #PB_Event_CloseWindow
         End
         EndIf
   
   EndSelect   
   
   Until Event = #PB_Event_CloseWindow
   Else
    MessageRequester("Information", "Sie müssen eine Datei auswählen!", 0) 
  EndIf
  End
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

stürzt bei mir beim ersten SelectElement ab. *Weiterles*

PS: Das war Beitrag Nr. 800
Zuletzt geändert von Andesdaf am 07.03.2009 20:10, insgesamt 1-mal geändert.
Win11 x64 | PB 6.20
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

@Andesdaf,
habe den Code direkt hier aus dem Beitrag kopiert, um zu sehen, ob beim hineinsetzen des Beitrages irgendetwas schief gelaufen ist.
Kann ich aber nichts feststellen.
Also bei mir unter dem neusten Update PB4.3 vom letzten Sonntag läuft es bei mir.
Kein Absturz.
Gruß Dysti
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

dysti hat geschrieben:Kein Absturz.
suboptimal:
dysti hat geschrieben:

Code: Alles auswählen

If Right(DirectoryEntryName(0),3)="JPG"
besser:

Code: Alles auswählen

If UCase(Right(DirectoryEntryName(0),3))="JPG"
<edit>
noch besser:

Code: Alles auswählen

If UCase(GetExtensionPart(DirectoryEntryName(0))) = "JPG"
</edit>

--

suboptimal:
dysti hat geschrieben:

Code: Alles auswählen

SelectElement(bilder(), 0)
anzBild1$= bilder()
[...]
besser:

Code: Alles auswählen

If ListSize(bilder()) = 0
 MessageRequester("", "Keine darstellbaren Bilder gefunden. Programm wird beendet")
 End
EndIf

SelectElement(bilder(), 0)
anzBild1$= bilder()
[...]
... und schau Dir noch mal die genaue Bedeutung des ReplaceString-
Parameters #PB_String_InPlace an.

to be continued...

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

@kiffi, ich bin froh, das ich den Code reingestellt habe.
Danke für die Hinweise. Super.
Gruß
Dysti
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

dysti hat geschrieben:Danke für die Hinweise.
kein Thema! Kannst Du Deinen Code oben mit der korrigierten Version
aktualisieren? Irgendwas ist da noch faul...

Bei mir werden die Bilder nicht gewechselt.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

@kiffi, hier ist der Code. Habe in bezüglich HTML einfacher gestaltet.
Nun ja, man muß da zwischendurch auch mal HTML lernen.

Code: Alles auswählen

StandardFile$ = ""
Pattern$ = "Bilder (*.jpg)|*.jpg|Alle Dateien (*.*)|*.*"
Pattern = 0
File$ = OpenFileRequester("Bitte Datei zum Laden auswählen", StandardFile$, Pattern$, Pattern)

If File$

path$=GetPathPart(File$)

NewList bilder.s()
Directory$ = Left(path$,Len(path$)-1)+"/"
  If ExamineDirectory(0, Directory$, "*.*") 
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
      If UCase(GetExtensionPart(DirectoryEntryName(0))) = "JPG"
      AddElement(bilder())
      bilder() = DirectoryEntryName(0)
      EndIf
      EndIf
    Wend
    FinishDirectory(0)
  EndIf

If ListSize(bilder()) = 0
 MessageRequester("", "Keine darstellbaren Bilder gefunden. Programm wird beendet")
 End
EndIf 
SelectElement(bilder(), 0)
anzBild1$= bilder()
SelectElement(bilder(), 6)
anzBild2$= bilder()
bh=200

Gosub htmlseite

OpenWindow(0,10,10,600,600,"Bilder anzeigen",#PB_Window_WindowCentered|#PB_Window_SystemMenu)

WebGadget(1,100,50,400,400,"")
ButtonGadget(2,10,10,100,30,"Vergrößern")
ButtonGadget(3,130,10,100,30,"Verkleinern")
ButtonGadget(4,250,10,100,30,"vorheriges Bild")
ButtonGadget(5,370,10,100,30,"nächstes Bild")
ButtonGadget(6,490,10,100,30,"Verlassen")

SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)


Repeat
   
   
   event = WaitWindowEvent()
   
   Select event
   
   Case #PB_Event_Gadget

   If EventGadget() = 2
            
            bh=bh+50
            Gosub htmlseite
            SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)               
         EndIf
    If EventGadget() = 3
            
            bh=bh-50
            Gosub htmlseite
            SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)               
         EndIf
   
    If EventGadget() = 4
            anzBild1$= bilder()
            PreviousElement(bilder())
            anzBild2$= bilder()
            ReplaceString(bhtml$,anzBild1$,anzBild2$,#PB_String_InPlace)
            SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)               
         EndIf
             
    If EventGadget() = 5
            anzBild1$= bilder()
            NextElement(bilder())
            anzBild2$= bilder()
            ReplaceString(bhtml$,anzBild1$,anzBild2$,#PB_String_InPlace)
            SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)               
         EndIf
       
    If EventGadget() = 6
         Event = #PB_Event_CloseWindow
         End
         EndIf
   
   EndSelect   
   
   Until Event = #PB_Event_CloseWindow
   Else
    MessageRequester("Information", "Sie müssen eine Datei auswählen!", 0)
  EndIf
  End
  
htmlseite:
bhtml$ = "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'>"
bhtml$ + "<html><head><meta content='text/html; charset=ISO-8859-1' http-equiv='content-type'>"
bhtml$ + "<title>Bilder anzeigen</title></head><body>"
bhtml$ + "<img style='height: "+ Str(bh)+"px' alt='Bilder' title='Bild1' src='file://" + Directory$ + bilder() +"'>" 
bhtml$ + "</body></html>"
Return
Anhang: wenn man mit der Maus in der Mitte des Bildes geht, verändert sich der Mauszeiger zur Hand.
Wie kann man jetzt mit der Maus mit gedrückter linker Taste das Bild im Webgadget scrollen, ohne die Billdlaufleisten des Webgadget zu benutzen?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

dysti hat geschrieben:@kiffi, hier ist der Code.
ohne das jetzt optimieren zu wollen:

1.) nimm das #PB_String_InPlace aus ReplaceString. Habe ich zwar
schon oben geschrieben, aber hast Du wahrscheinlich übersehen.
Ansonsten klappt ReplaceString nur mit Bildnamen, die alle gleich lang
sind.

2.) Ohne ein Gosub htmlseite klappt das Blättern bei mir nicht.

Code: Alles auswählen

If EventGadget() = 4 
  anzBild1$= bilder()
  PreviousElement(bilder())
  anzBild2$= bilder()
  Gosub htmlseite
  ReplaceString(bhtml$,anzBild1$,anzBild2$)
  SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)
  [...]
(analog dann bei If EventGadget() = 5 auch)

Wie angedeutet: Kann man noch optimieren. Aber so klappt es zumindest
auch.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

@hallo Kiffi,
bitte die Zeilen mit dem Befehl "Replacestring" durch "Gosub htmlseite" ersetzen.
Hatte ich vergessen umzuändern.

Code: Alles auswählen

anzBild2$= bilder()
Gosub htmlseite
SetGadgetItemText(1,#PB_Web_HtmlCode,bhtml$)     
Das mit dem Umblättern auch bei verschiedenlanger Namen klappt aber bei mir.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten