![]() |
Form in DLL (Text in Titelleiste zu kurz)
Ich habe da ein kleines Problem mit einer Form in einer DLL. Der Aufruf der Form selber klappt soweit problemlos, aber die Titelzeile der Form bereitet mir Kopfzerbrechen.
Eigentlich sollte in der Titelleiste "Einstellungen" erscheinen (ist auch so im OI eingetragen), seltsamerweise erscheint dort aber nur "E". Auch wenn ich zur Laufzeit über
Delphi-Quellcode:
die Titelleiste ändere erscheint da nur ein "b" anstatt von "blubb".
Form.Caption := 'blubb';
Ich habe auch schon probiert die Titelleiste über SetWindowTextW zu ändern, aber das funktioniert leider auch nicht. Hat schon mal jemand einen Lösungsansatz für mich? |
Re: Form in DLL (Text in Titelleiste zu kurz)
Hat keiner ein Idee woran es liegen könnte? :cry:
|
Re: Form in DLL (Text in Titelleiste zu kurz)
Wird die Caption dynamisch in der DLL gesetzt? Wenn ja, zeig mal etwas Code.
Noramlöerweise hat man diesen Effekt wenn man eine Unicode-Zeichenkette einem Kontrol zuweist, das nur Ansi versteht. Unicode-Zeichenketten sehen nämlich so aus: #00xx#00xx bei Ansizeichen. #0 ist aber unter Windows das Stringendezeichen. Castet man den Unicode String vorher nicht nach Ansi ist eben nach dem ersten Zeichen schluss mit der Ausgabe. |
Re: Form in DLL (Text in Titelleiste zu kurz)
Hallo Luckie!
Die Caption wird eigentlich nicht dynamisch gesetzt sondern im OI festgelegt. Aber auch wenn ich die Caption zur Laufzeit ändere wird nur ein Zeichen in der Titelleiste angezeigt. Die Anwendung (stammt nicht von mir) in der später das AddIn laufen soll ist übrigends auf Unicode ausgelegt wenn das wichtig ist.
Delphi-Quellcode:
// Aufruf des Formulars in der Mainunit des AddIns
function TDelphiConnect.ShowConfigDialog(hWndOwner: LongWord): HResult; begin // Form erstellen wenn nicht vorhanden if frmSettings = nil then begin frmSettings := TfrmSettings.Create(nil); end; // Eigenschaften des Einstellungen-Formulars setzen with frmSettings do begin // Dialog modal anzeigen ShowModal; end; end; // Unit für das Formular procedure TfrmSettings.FormCreate(Sender: TObject); begin BorderIcons := [biSystemMenu]; BorderStyle := bsSingle; Caption := 'Einstellungen'; // <-- Es macht keinen Unterschied ob ich das hier setze // oder direkt im OI, das Ergebnis ist dasselbe // Fensterposition setzen Position := poMainFormCenter; end; Zitat:
Gruss Dieter |
Re: Form in DLL (Text in Titelleiste zu kurz)
Hallo Ringli
Zitat:
Delphi-Quellcode:
Grüße
// Aufruf des Formulars in der Mainunit des AddIns
function TDelphiConnect.ShowConfigDialog(hWndOwner: LongWord): HResult; begin // Form erstellen wenn nicht vorhanden if frmSettings = nil then begin frmSettings := TfrmSettings.Create(Application); end; // Eigenschaften des Einstellungen-Formulars setzen with frmSettings do begin // Dialog modal anzeigen ShowModal; end; end; // Unit für das Formular procedure TfrmSettings.FormCreate(Sender: TObject); begin BorderIcons := [biSystemMenu]; BorderStyle := bsSingle; Caption := Widestring('Einstellungen'); // <-- Es macht keinen Unterschied ob ich das hier setze // oder direkt im OI, das Ergebnis ist dasselbe // Fensterposition setzen Position := poMainFormCenter; end; (* //oder mit Umwandlung nach Ansi String // Unit für das Formular procedure TfrmSettings.FormCreate(Sender: TObject); Var s : String; begin BorderIcons := [biSystemMenu]; BorderStyle := bsSingle; s := 'Einstellungen'; // Durch die Zuweisung wandelt Dephi im Hintergrund einen Widstring zu Ansi Caption := s; // <-- Es macht keinen Unterschied ob ich das hier setze // oder direkt im OI, das Ergebnis ist dasselbe // Fensterposition setzen Position := poMainFormCenter; end;*) Sepp |
Re: Form in DLL (Text in Titelleiste zu kurz)
Hallo Sepp!
Weder
Delphi-Quellcode:
noch
Caption := Widestring('Einstellungen');
Delphi-Quellcode:
sind die Lösung des Problems. :cry:
s := 'Einstellungen';
Caption := s; Gruss Dieter [EDIT] Habe das hier völlig übersehen:
Delphi-Quellcode:
Wenn ich diese Zeile entsprechend von nil auf Application geändert habe bekomme ich nur diesen Fehler:
frmSettings := TfrmSettings.Create(Application);
Code:
[Fehler] Connect.pas(164): E2010 Inkompatible Typen: 'TComponent' und 'TGUID'
|
Re: Form in DLL (Text in Titelleiste zu kurz)
Hallo Ringli
das deutet drauf hin, dass dein Formular wohl kein von TForm abgeleitetes ist. Um da mehr zu sagen müsste man den Aufbau kennen. :? Grüße Sepp |
Re: Form in DLL (Text in Titelleiste zu kurz)
Inzwischen bin ich mit Sepp's Hilfe der Lösung des Problems etwas näher gekommen. Anscheinend ist der verwendete Compiler schuld. :-(
Das Projekt ist ursprünglich mit Delphi 2005PE erstellt worden und verursacht hier auch die beschriebenen Probleme. Der selbe Code läuft aber unter D6 Pro und Delphi 7 PE problemlos, d.h. die Caption des Fensters ist komplett sichtbar. Die Vermutungen gingen erst in Richtung des Delphi 2005 Pro-Importers für die Typbibliothek. Daraufhin habe ich die für das Projekt benötigte Typbibliothek auch mal mit D7PE importiert und anschliessend das Projekt auch hiermit kompiliert. Und siehe da die Anzeige der Titelleiste passte. Habe ich die mit D7PE importierte Typbibliothek in D2005 verwendet und das Projekt neu erzeugt, passte die Titelleiste wieder nicht. Ein Diff-Vergleich der importierten Typbibliotheken (D7PE/D2005Pro) brachte nur zwei unterschiedliche Zeilen hervor die bei einer Anpassung das Problem auch nicht gelöst haben. Der Code in der D7PE-Typelib sieht so aus:
Code:
Und das Gegenstück in der D2005-Typelib:
dtlServerPage = 'ActiveX';
dtlOcxPage = 'ActiveX';
Code:
Es scheint sich also um einen Bug in Delphi 2005-Compiler zu handeln und ich kann nur hoffen das es hierfür noch einen Bugfix geben wird... :-(
dtlServerPage = '(none)';
dtlOcxPage = '(none)'; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 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 by Thomas Breitkreuz