AGB  ·  Datenschutz  ·  Impressum  







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

Form in DLL (Text in Titelleiste zu kurz)

Ein Thema von ringli · begonnen am 5. Okt 2005 · letzter Beitrag vom 29. Okt 2005
Antwort Antwort
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#1

Form in DLL (Text in Titelleiste zu kurz)

  Alt 5. Okt 2005, 14:23
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
Form.Caption := 'blubb'; die Titelleiste ändere erscheint da nur ein "b" anstatt von "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?
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Form in DLL (Text in Titelleiste zu kurz)

  Alt 6. Okt 2005, 17:32
Hat keiner ein Idee woran es liegen könnte?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Form in DLL (Text in Titelleiste zu kurz)

  Alt 6. Okt 2005, 17:38
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Form in DLL (Text in Titelleiste zu kurz)

  Alt 6. Okt 2005, 18:06
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 von Luckie:
Castet man den Unicode String vorher nicht nach Ansi ist eben nach dem ersten Zeichen schluss mit der Ausgabe.
Ich fürchte genau das passiert bei mir. Wie caste ich denn einen Unicode-String? Versucht habe ich es bereits mit PChar(), PWideChar(), PAnsiChar() und noch ein paar anderen Varianten...

Gruss
Dieter
  Mit Zitat antworten Zitat
Sepp

Registriert seit: 15. Sep 2004
Ort: Oberasbach
19 Beiträge
 
Delphi 6 Professional
 
#5

Re: Form in DLL (Text in Titelleiste zu kurz)

  Alt 6. Okt 2005, 20:50
Hallo Ringli

Zitat:
Wie caste ich denn einen Unicode-String? Versucht habe ich es bereits mit PChar(), PWideChar(), PAnsiChar() und noch ein paar anderen Varianten...
Versuch es mal so
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(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;*)
Grüße

Sepp
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Form in DLL (Text in Titelleiste zu kurz)

  Alt 6. Okt 2005, 21:26
Hallo Sepp!

Weder
Caption := Widestring('Einstellungen'); noch
Delphi-Quellcode:
s := 'Einstellungen';
Caption := s;
sind die Lösung des Problems.

Gruss
Dieter

[EDIT]
Habe das hier völlig übersehen:
frmSettings := TfrmSettings.Create(Application); Wenn ich diese Zeile entsprechend von nil auf Application geändert habe bekomme ich nur diesen Fehler:
Code:
[Fehler] Connect.pas(164): E2010 Inkompatible Typen: 'TComponent' und 'TGUID'
  Mit Zitat antworten Zitat
Sepp

Registriert seit: 15. Sep 2004
Ort: Oberasbach
19 Beiträge
 
Delphi 6 Professional
 
#7

Re: Form in DLL (Text in Titelleiste zu kurz)

  Alt 6. Okt 2005, 22:43
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
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Form in DLL (Text in Titelleiste zu kurz)

  Alt 29. Okt 2005, 00:14
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:
dtlServerPage = 'ActiveX';
dtlOcxPage = 'ActiveX';
Und das Gegenstück in der D2005-Typelib:
Code:
dtlServerPage = '(none)';
dtlOcxPage = '(none)';
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...
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:45 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