AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VistaTaskDialog

Ein Thema von Willie1 · begonnen am 20. Aug 2020 · letzter Beitrag vom 24. Aug 2020
Antwort Antwort
Seite 1 von 2  1 2      
Willie1

Registriert seit: 28. Mai 2008
618 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

VistaTaskDialog

  Alt 20. Aug 2020, 18:32
Hallo, (ich bin's shcon wieder)
bei der Umstellung gibt es noch ein weiters Problem.
Ich habe mir vor 10 Jahren eine Komponente gebaut (mit Hilfe einer Tipp-Sammlung von Michael Puff), um den VistaTaskDialog unter Delphi 2005 nutzen zu können. Finde ich besser als die von Embarcadero, die nervt! Nur ein Problem: von Caption und Text wird nur der erste Buchstabe angezeigt. Jetzt ist doch alles mit String 16-Bit. Da müsste es doch gehen. Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

AW: VistaTaskDialog

  Alt 20. Aug 2020, 18:52
Meinst du?
http://michael-puff.de/Programmierun...skDialog.shtml

Ich hätte jetzt an ein Problemchen mit Unicode gedacht, da der Michael mit Delphis vor 2009 gearbeitet hatte.
Aber in de Artikel sieht es eigentlich OK aus (seh überall PWideChar)

Oder ist dein Code noch auf ANSI ausgelegt (die A-Typen und -Funktionen) und du gibst jetzt Unicode-Strings rein? Dann muß du das erst auf die Unicode-API (W) umbauen.




Ich fand die Klasse auch doof, drum hatte ich mir die auch in eine eigene Funktion verlagert und befülle den TTaskDialog aus den Parametern.
Joar, direkt die Delphi-Klasse, anstatt manuell über die WinAPI.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Aug 2020 um 18:55 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
618 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: VistaTaskDialog

  Alt 22. Aug 2020, 15:56
Hallo Himitsu,
ich weiß es nicht mehr genau. Ich habe im Quelltext vermerkt Tippsammlung von Michael Puff. PAnsiChar kommt da nicht vor, nur PChar jetzt doch gleich PWideChar.
Mein Source ist nicht lang, kannst du dir ansehen. Danke.
Willie.
Angehängte Dateien
Dateityp: pas MsgCheckbox.pas (4,7 KB, 3x aufgerufen)
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#4

AW: VistaTaskDialog

  Alt 22. Aug 2020, 16:12
Michael zu fragen, ob er das aktualisiert, wird derzeit auch etwas schwer.


Ja, vor allem Char, PChar und String sind teilweise ein Problem, wenn hier Typen vermischt werden.
Bis Delphi 2007 war PChar = PAnsiChar und ab Delphi 2009 ist es PWideChar.

Drum wird "oft" empfohlen alle auf AnsiChar/PAnsiChar/AnsiString zu ändern, damit es wieder dem "alten" Frmat entspricht.
Allerdings ist PChar per se nicht falsch, wenn eben alles zusammenpasst.

z.B.:
MessageBoxA + PAnsiChar und AnsiString
MessageBoxW + PWideChar und WideString UnicodeString
MessageBox + PChar und String

Mit ANSI hätte man dann ja auch bei Unicode ein paar Verluste, wenn man Zeichen rein gibt, die aber nichts ins ANSI rein passen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#5

AW: VistaTaskDialog

  Alt 22. Aug 2020, 16:25
Also in dem Fall war es eigentlich falsch, denn Michael hätte hier PAnsiChar verwenden müssen,
da explizit SHMessageBoxCheckA verwendet wurde, was aber nicht so leicht auffällt, da nicht der Name verwendet wurde und auch der Typ nicht A heißt.

Zitat:
SHMessageboxCheck := GetProcAddress(hLib, PChar(185));
185 ist die ID für SHMessageBoxCheckA.

Die ID für SHMessageBoxCheckW kenn ich jetzt nicht, also würde ich hier mal schauen, ob es nicht doch besser über den Namen geht.

Delphi-Quellcode:
type
  TSHMessageBoxCheck = function(hWnd: THandle; Text, Title: PWideChar;
    dwType: DWORD; Default: Integer; RegVal: PWideChar): Integer; stdcall;

SHMessageboxCheck := GetProcAddress(hLib, 'SHMessageBoxCheckW');
Hätte Michael hier ANSI verwendet, dann hätte dir der Compiler sofort eine Warnung gezeigt,
da PAnsiChar und PWideChar/PChar nicht kompatibel sind.

Der Rest darf auf PChar und String bleiben, da PChar und PWideChar mit der UnicodeAPI kompatibel sind. (früher kompatibel mit PAnsiChar, bei der ANSI-API)
Und selbst im unwahrscheinlichen Fall (im Delphi), oder z.B. im FreePascal, wird der Compiler nun eine eventuelle Inkompatibilität melden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Aug 2020 um 16:32 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
618 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: VistaTaskDialog

  Alt 22. Aug 2020, 17:43
Ich glaube, das habe ich verstanden.
Es gibt aber ein weiteres Problem bei dieser Komponente. Unter dem Schlüssel Key:='Software\Microsoft\Windows\CurrentVersion\Explorer\DontShowMeThisDialogAgain' speicherte das alte Delphi ab, wenn der Dialog nicht mehr gezeigt werden soll. Dabei ist der Wert egal ob YES oder NO. Wenn er vorhanden ist, wird nichts gezeigt. Das neue Delphi speichert es woanders ab, ich kann es nicht finden. Ich habe die Registry komplett durchsucht. Es ist gespeichert, der Dialog wird nicht mehr gezeigt!

Ich habe den Schlüssel in der Microsoft-Doku gefunden: Software\Microsoft\Windows\CurrentVersion\Explorer \LowRegistry\DontShowMeThisDialogAgain .

Ich finde es absolut blöd, wenn ein Hinweis oder Dialog NIE mehr gezeigt wird. Schließlich kann ein/e anderer(e User/in das Programm benutzen oder man kann es mal vergessen. Deshalb finde ich das Zurücksetzen = Löschen des Wertes wichtig.


Nachtrag: Das Fenster zeigt jetzt den richtigen Inhalt. Wichtig, ich habe auch verstanden, woran es gelegen hat! Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.

Geändert von Willie1 (22. Aug 2020 um 18:34 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#7

AW: VistaTaskDialog

  Alt 22. Aug 2020, 18:06
Wenn dein Programm 32 Bit ist, dann wird es in der Registry eines 64 Bit Windows umgeleitet, nach
Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Explorer (falls ich mich im Ziel jetzt nicht täusche)

Diese Umleitung ließe sich z.B. durch Reg := TRegistry.Create(KEY_WOW64_64KEY); abschalten.
Wie im Dateisystem, gibt es hier auch in der Registry eine Redirection.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Aug 2020 um 18:09 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
618 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

AW: VistaTaskDialog

  Alt 22. Aug 2020, 18:43
Unsere Antworten hatten sich gerade gekreuzt. Ich hatte noch einen Nachtrag geschrieben. Den regulären Schlüssel-Pfad habe ich in der Doku gefunden.
Schönen Abend Willie.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#9

AW: VistaTaskDialog

  Alt 22. Aug 2020, 18:49
@himitsu
Im HKCU werden Schlüssel unter \Software nicht in dieser Art umgeleitet - im Gegensatz zu HKLM. Und die Unit benutzt ausschließlich HKCU.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#10

AW: VistaTaskDialog

  Alt 22. Aug 2020, 19:45
Im HKCU werden Schlüssel unter \Software nicht in dieser Art umgeleitet - im Gegensatz zu HKLM. Und die Unit benutzt ausschließlich HKCU.
OK.

Sah dort auch ein Software\WOW6432Node, weswegen ich dachte das ist dort auch. (obwohl es dort schon relativ leer aussah)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz