Einfaches Projekt zum Runterladen?

Anfängerfragen zum Programmieren mit PureBasic.
Plenz
Beiträge: 38
Registriert: 05.05.2021 01:19

Re: Einfaches Projekt zum Runterladen?

Beitrag von Plenz »

Eine kleine Frage noch: es scheint keinen Befehl zu geben, mit der man ein Image verkleinert/vergrößert auf einen Canvas zeichnet. Sehe ich das richtig?
Da ich das Original-Image nicht immer wieder nachladen möchte, muss ich es auf ein temporäres Image zeichnen, das temporäre Image verkleinern und dann auf den Canvas zeichnen. Oder geht das irgendwie eleganter?
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Einfaches Projekt zum Runterladen?

Beitrag von mk-soft »

;)
Result = ResizeImage(#Image, Width, Height [, Mode])

Um das alte Image zu behalten ist es besser ein neues Image zu erstellen (CreateImage) und in diesem das Image zu zeichnen (DrawImage(ImageID, x, y [, Width, Height]))

Oder noch einfacher. CopyImage -> ResizeImage
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Plenz
Beiträge: 38
Registriert: 05.05.2021 01:19

Re: Einfaches Projekt zum Runterladen?

Beitrag von Plenz »

Da steht die Lösung, ich hatte sie komplett übersehen: mit [, Width, Height] kann man vergrößern und verkleinern.
Plenz
Beiträge: 38
Registriert: 05.05.2021 01:19

Re: Einfaches Projekt zum Runterladen?

Beitrag von Plenz »

die Prüfung des Rückgabe wertes macht sinn.
Hab ich inzwischen auch gemerkt. Vor allem scheint es mir, dass Fonts nicht immer geladen werden.
Aber warum nicht? Warum geht etwas nicht, was sonst geht?

Und vor allem: wenn ein Fehler auftritt, was tut man dann? Einfach den gescheiterten Aufruf so lange wiederholen, bis er funktioniert?
Axolotl
Beiträge: 146
Registriert: 31.12.2008 16:34

Re: Einfaches Projekt zum Runterladen?

Beitrag von Axolotl »

Die Frage ist nicht so einfach zu beantworten. Warum etwas nicht mehr funktioniert hängt von der jeweiligen Funktion und Situation ab. Z.B. kann der exklusive Zugriff auf eine Datei verweigert werden. Dann geht es natürlich darum das im Programm alles richtig läuft.
Hier kann tatsächlich das wiederholen helfen, wenn der oder die andere Anwender oder Anwendung seinen Zugriff beenden.
Unter Windows wird eigentlich immer ein Font geladen, da habe ich seit Windows 3.1 eher selten Ressourcen Probleme. (Damals waren die Anzahl der Brush, Pen, etc. Sehr begrenzt.) Manchmal kann eine Fehlermeldung mit dem MessageRequester helfen.
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Plenz
Beiträge: 38
Registriert: 05.05.2021 01:19

Re: Einfaches Projekt zum Runterladen?

Beitrag von Plenz »

Also ganz einfach

Code: Alles auswählen

Repeat
  FontNr = LoadFont(#PB_Any, "Arial", 24)
Until FontNr > 0
oder spricht etwas dagegen?
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Einfaches Projekt zum Runterladen?

Beitrag von HeX0R »

Ich hatte noch nie den Fall, dass ein Font nicht geladen wird, die Schleife ist daher unnötig und auch noch falsch!
Der Rückgabewert, wenn Du #PB_Any nutzt, ist eine Memoryadresse, die kann aber (wegen den signed Variablentypen von PB) auch negativ sein.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Einfaches Projekt zum Runterladen?

Beitrag von Mijikai »

Plenz hat geschrieben: 12.05.2021 02:10 Also ganz einfach

Code: Alles auswählen

Repeat
  FontNr = LoadFont(#PB_Any, "Arial", 24)
Until FontNr > 0
oder spricht etwas dagegen?
Bei Windows wird immer eine Font (System-Font) geladen (wenn ich mich recht erinnere).
Dabei ist nicht klar (ohne weitere OS Apis) ob die angeforderte Font tatsächlich geladen wurde.
Plenz
Beiträge: 38
Registriert: 05.05.2021 01:19

Re: Einfaches Projekt zum Runterladen?

Beitrag von Plenz »

Danke für den Hinweis auf negative Nummern! :allright:

Ich schreibe ein Programm, das unter Windows und Linux Mint laufen soll. Beim Erstellen bzw. Benutzen eines Fonts kommt es immer wieder zu Abstürzen, vor allem unter Linux, aber auch unter Windows.
Mein Verdacht richtet sich momentan auf die Größe der Font-Nummer bzw. Font-ID. Ich habe sie in einem Word gespeichert, das reicht wohl nicht, ich werde einfach mal Quad benutzen.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Einfaches Projekt zum Runterladen?

Beitrag von mk-soft »

Plenz hat geschrieben: 12.05.2021 02:10 Also ganz einfach

Code: Alles auswählen

Repeat
  FontNr = LoadFont(#PB_Any, "Arial", 24)
Until FontNr > 0
oder spricht etwas dagegen?
So programmiert man sehr schön ein Speicherleck.
Objekte die #PB_Any angelegt werden müssen explizit mit Free Objekt wieder freigegeben werden.
FontPB = LoadFont(#PB_Any, ...) -> FreeFont(FontPB).

Es wird nur beim beenden vom Programm die Objekte intern wieder Freigegeben.

Code: Alles auswählen

For i = 1 To 10
  FontNr = LoadFont(#PB_Any, "Arial", 24)
  Debug "Dynamik FontNr: " + FontNr + " / OS Handle: " + FontID(FontNr)
Next

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten