PureDispHelper Userlib - Update Include für Unicode Support

Anwendungen, Tools, Userlibs und anderes nützliches.
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

Beitrag von ts-soft »

Alle Strings sind unmittelbar freizugeben, zumindest bevor ihnen ein neuer
String zugewiesen wird!

Code: Alles auswählen

dhFreeString(Workbook)
Gruß
vom abwesendem
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
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Danke Thomas :allright:

Ich hab's im obigen source vor dem Ändern der Zelle
gesetzt.

Gruß, Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
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

Beitrag von ts-soft »

Falko hat geschrieben:Danke Thomas :allright:

Ich hab's im obigen source vor dem Ändern der Zelle
gesetzt.

Gruß, Falko
Aber nicht jedesmal, Du nutzt die Variable 2x, also 2x freigeben, am besten
unmittelbar nach dem Peeken. Bei erneuter Verwendung verändert sich der
Pointer, so das sonst nur der letzte freigegeben wird. So ist das mit diesen
blöden OLE-Strings.

Da sieht man mal, was einem sonst der StringManager von PB abnimmt :wink:
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
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Interessant und echt cool.

Hab's geändert.

Ich hatte da noch ein Problem mit folgendem:

dhReleaseObject(Workbooks) : Workbook = 0

Wenn ich anstelle Workbooks da Workbook stehen habe, wie im
Originalsource von kiffi, meldet sich der Debugger mit folgenden Fehler:

Line: 29 - Invalid memory access.

Nur wenn dort Workbooks dort steht, meckert der Debugger nicht.

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Falko hat geschrieben:Line: 29 - Invalid memory access.
Workbook ist bei Dir ja auch der Stringpointer und kein Objekt. Du kommst
mit den Variablen-Bezeichnungen ein wenig durcheinander.
Falko hat geschrieben:Nur wenn dort Workbooks dort steht, meckert der Debugger nicht.
ts, ts, ts, wer hat denn da sein EnableExplicit vergessen? ;-)

Grüße ... Kiffi
a²+b²=mc²
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

Beitrag von ts-soft »

Workbook und Workbooks sind keine Objekte zum freigeben, nur ExcelApp

Alles was mit chCreate erstellt wird, ist freizugeben. Alles was bei dhGetValue
ein object zurückgibt ebenfalls (erster parameter "%o"

gruss
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
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Hier nochmal der Code

Code: Alles auswählen

EnableExplicit

Define.l ExcelApp
Define.l ReturnValue
Define.s NewValue
Define.s Datei

Datei = GetCurrentDirectory() + "test.xls"

dhToggleExceptions(#True)

ExcelApp = dhCreateObject("Excel.Application")

If ExcelApp
  
  dhCallMethod(ExcelApp, ".Workbooks.Open(%T)", @Datei) ; open ExcelFile
  
  dhGetValue("%T", @ReturnValue, ExcelApp, "Cells(%d, %d).Value", 10, 3) ; read one value
  If ReturnValue
    Debug PeekS(ReturnValue)
    dhFreeString(ReturnValue)
  EndIf
  
  dhGetValue("%T", @ReturnValue, ExcelApp, "Cells(%d, %d).Value", 10, 4) ; read second value
  If ReturnValue
    Debug PeekS(ReturnValue)
    dhFreeString(ReturnValue)
  EndIf
  
  NewValue = "S0"
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %T", 10, 4, @NewValue) ; write a new value
   
  MessageRequester("PureDispHelper-ExcelDemo", "Click OK to close Excel")
  
  dhCallMethod(ExcelApp, ".Quit")
  
  dhReleaseObject(ExcelApp) : ExcelApp = 0
  
Else
  
  MessageRequester("PureDispHelper-ExcelDemo", "Couldn't create Excel-Object")
  
EndIf
Und zusätzlich zur Erläuterung einiger Excel-Objekte:

* ExcelApp ist die Excel-Applikation
* WorkBook ist die geladene Datei
* WorkSheet ist ein einzelnes Datenblatt innerhalb eines WorkBooks

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Nochmals vielen Dank für eure Erklärung und Hilfe.

Tut mir Leid, das ich etwas länger brauche dieses zu verstehen.

Ihr habt mir damit sehr weit geholfen.


:allright: :allright:

Grüße, Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Falko hat geschrieben:Tut mir Leid, das ich etwas länger brauche dieses zu verstehen.
ja, ja, man wird nicht jünger, nicht wahr? ;-)
Falko hat geschrieben:Nochmals vielen Dank für eure Erklärung und Hilfe.
Da nicht für. Jederzeit gerne wieder.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

@kiffi

hast du noch ein Beispiel, wie man eine komplette Fusszeile auslesen als auch
schreiben kann? Ich habe zwar ein VBA-Source für den Leftfooter, aber
weis nicht, wie man das in PB umsetzen muss. Oder gibt es noch andere
Informationen, mit denen das leichter ist in PB umzusetzen?

Vielleicht hätte man damals eher mit VBA oder VBasic anfangen sollen :freak:
Dieses Beispiel ist aus Herbers Excel und VBA sites

Code: Alles auswählen

StandardModule: basMain

Sub PartLeftFooter()
   Dim intCounter As Integer, intChr As Integer
   Dim sTxt As String
   sTxt = ActiveSheet.PageSetup.LeftFooter
   Do Until InStr(sTxt, vbLf) = 0
      For intCounter = Len(sTxt) To 1 Step -1
         If Asc(Mid(sTxt, intCounter, 1)) = 10 Then Exit Do
         intChr = Asc(Mid(sTxt, intCounter, 1))
         If intCounter = 1 Then Exit Sub
      Next intCounter
   Loop
   sTxt = Right(sTxt, Len(sTxt) - intCounter)
   sTxt = Trim(Right(sTxt, Len(sTxt) - InStr(sTxt, ":")))
   ActiveSheet.TextBox1.Text = sTxt
End Sub
Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten