AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Property Sheets mit Delphi
Tutorial durchsuchen
Ansicht
Themen-Optionen

Property Sheets mit Delphi

Ein Tutorial von MathiasSimmack · begonnen am 27. Jun 2002 · letzter Beitrag vom 27. Apr 2025
Antwort Antwort
Seite 2 von 2     12   
MathiasSimmack
In diesem Mini-Tutorial geht es um eine Gruppe der Shell-Erweiterungen: die sog. "Property Sheets", die bei einigen Dateitypen eingeblendet werden, wenn man deren Eigenschaften anzeigen lässt. Das gesamte Beispiel basiert auf der Grundlage von Andreas Kosch, die man im Entwickler-Forum downloaden kann. Ich will aber zusätzlich zeigen, welche Units man entfernen muss, damit am Ende eine Datei (DLL) von weniger als 100k entsteht.

Außerdem ist dieser erste Schritt (IMHO) unbedingt wichtig, da man nicht einfach ein vorhandenes, lauffähiges Projekt nehmen und für andere Zwecke erneut verwenden sollte. Das liegt daran, dass die meisten Shell-Erweiterungen intern eine eindeutige GUID benutzen, mit der sie später auch im System identifiziert werden.
Logische Folge: wenn ich zwei Shell-Erweiterungen verwende, die die selbe GUID haben, dann kommt es mit großer Wahrscheinlichkeit zu Problemen. Also, ich bitte darum, dieser Anleitung genau zu folgen und für jedes Projekt tatsächlich neuen Code zu erstellen. Die relevanten Code-Teile, die in jeder Erweiterung vorkommen, können dann natürlich problemlos kopiert und wiederverwendet werden.

Bevor wir uns an ein solches Projekt wagen, sollten wir uns natürlich darüber im Klaren sein, was wir erreichen wollen. Üblicherweise stellen wir auf den Eigenschaftenseiten ergänzende Informationen zur Verfügung, die beispielsweise auch von einem Programm angezeigt werden. Damit hat der Anwender die Möglichkeit, sich schnell über den Inhalt, den Typ, spezielle Eigenschaften usw. zu informieren, ohne erst das eigentlich passende Programm starten zu müssen.
In unserem Beispiel wollen wir eine zusätzliche Seite bei den Textdateien (*.txt) anzeigen lassen, die uns neben dem genauen Dateinamen auch eine Möglichkeit zum Öffnen des Texteditors bietet. Damit wird das Prinzip auf recht einfache Weise verdeutlicht.

Hinweis
  • Bitte nicht vergessen, dass wir eine Erweiterung des OS entwickeln. Für einen Testlauf müssen wir sie also erst im System registrieren. Und natürlich muss sie danach wieder entfernt werden, damit wir z.B. eine neue Version erstellen können. Das Problem dürfte hierbei sein, dass das System die benutzte Datei auch nach der De-Registrierung nicht sofort löschen kann. Ein einfaches Ab- und wieder Anmelden genügt allerdings schon (zumindest unter Win98). Ein Neustart ist glücklicherweise nicht erforderlich.
 
mkinzler

 
Delphi 11 Alexandria
 
#11
  Alt 2. Jun 2011, 19:08
Grundsätzlich genauso, das ganze Handling muss dazu halt innerhalb der Dll erfolgen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

 
Delphi XE2 Professional
 
#12
  Alt 2. Jun 2011, 19:34
Mir ist aber nicht ganz klar, was ich dann bei diesen beiden Zeilen eintragen muss:

Delphi-Quellcode:
  aPSP.pszTemplate := MakeIntResource(IDD_PROPDLG);
  { ... }
  aPSP.pfnDlgProc := @?????; // Dialogfunktion
Irgendwie muss ich meinen Dialog doch erzeugen und anzeigen lassen
Ich will kein Non-VCL, weil ich für das, was ich anzeigen will sowieso die VCL laden muss
Thomas

Geändert von Codewalker ( 2. Jun 2011 um 19:48 Uhr)
  Mit Zitat antworten Zitat
blackfin
 
#13
  Alt 3. Jun 2011, 15:23
Wenn du das ganze Editor-geführt haben willst und auch bereit bist, was dafür auszugeben, kannst du dir dafür auch die "Shell+"-Komponenten (Namespace Extensions) mal ansehen.
Damit lassen sich solche Property-Sheets sehr einfach erstellen.

Geändert von blackfin ( 3. Jun 2011 um 15:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

 
Delphi XE2 Professional
 
#14
  Alt 4. Jun 2011, 09:18
Die hab ich auch schon gefunden, allerdings können die ja viel mehr als ich eigentlich brauche und für das bißchen was ich brauche wollte ich die jetzt nicht komplett kaufen müssen. Das muss doch auch so gehen und kann nicht so schwer sein. Der Rahmen ist ja klar, es fehlt "nur" die Einbindung des Forms.
Thomas
  Mit Zitat antworten Zitat
fuchsle

 
Delphi XE3 Professional
 
#15
  Alt 12. Jan 2012, 15:21
Gibt es hier mittlerweile einen etwas einfacheren Weg, sind z.B. freie Komponenten bekannt, oder ist das noch der aktuelle Stand?

Vielen Dank für eure Infos.
  Mit Zitat antworten Zitat
Benutzerbild von christian.noeding
christian.noeding

 
Delphi 10.3 Rio
 
#16
  Alt Gestern, 21:24
Hi,

die Google-Suche hat mich im Jahr 2025 hierher gebracht und da ich eine Lösung gefunden habe hier eine Antwort auf diesen sehr alten Thread. Das Tutorial kann erst einmal komplett so befolgt werden, nur übergeben wir dem Dialog lediglich ein leeres Template über die Resource-Datei. Der Inhalt meiner .rc-Datei sieht wie folgt aus:
Code:
100 DIALOG DISCARDABLE 0, 0, 200, 200
STYLE WS_CHILD | WS_VISIBLE
FONT 8, "MS SHELL DLG"
BEGIN
END
Diese Ressource wird wie im Tutorial angegeben über MAKEINTRESOURCE(...) dem PropertySheet übergeben. Damit wird schon einmal ein leeres Tab im Property-Sheet angezeigt.

Nun legt man ein neues reguläres VCL-Formular an. In der Funktion PropertySheetDlgProc() (den Pointer hierhin hat man zuvor in der AddPages() mittels .pfnDlgProc := @PropertySheetDlgProc; übergeben) können wir nun das VCL-Formular wie folgt erzeugen und dem PropertySheet einfügen:

Code:
myvclform := Tmyvclform.CreateParented(hDlg);
myvclform.Show;
Vorteilhaft ist dann noch die VCL-Form als Align:=alClient zu stellen und den BorderStyle auf bsNone zu setzen. Dann kann man aber sehr einfach den Formular-Editor von Delphi wieder verwenden.

Vielleicht stolpert ja noch ein anderer über diese Sache
Christian Nöding
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz