AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Komponentennamen mit Leerzeichen möglich ???
Thema durchsuchen
Ansicht
Themen-Optionen

Komponentennamen mit Leerzeichen möglich ???

Ein Thema von Stefanie · begonnen am 26. Okt 2009 · letzter Beitrag vom 26. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
Stefanie

Registriert seit: 12. Aug 2004
21 Beiträge
 
#1

Komponentennamen mit Leerzeichen möglich ???

  Alt 26. Okt 2009, 14:31
Hallo,
ich möchte einen DDE-Server(Sender) programmieren und der Name für das DdeServerItem(ist ja eine eigene Komponente) soll mit einem Leerzeichen versehen werden z.B. "ABC 10".
Leider wird das in Delphi nicht aktzeptiert. Ich möchte damit an eine Fremdanwendung Daten übermitteln, die leider nur funktioniert, wenn das Item eben dieses Leerzeichen enthält.
Gibt es evtl. doch eine Möglichkeit den Namen des DDE-Item mit Leerzeichen festzulegen ?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

Re: Komponentennamen mit Leerzeichen möglich ???

  Alt 26. Okt 2009, 14:40
Für jede Komponente, die man in Delphi auf ein Form oder Datenmodul gesetzt werden, wird automatisch ein Feld mit gleichem Namen angelegt. Daher müssen die Komponentennamen den Anforderungen an einen normalen Identifier genügen. Da diese keine Leerzeichen enthalten dürfen, kann auch der Komponentenname keine Leerzeichen enthalten.

Wenn DDE-Items überhaupt Leerzeichen enthalten dürfen , dann geht nur der Weg ohne Delphi-Komponente.
Uwe Raabe
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Komponentennamen mit Leerzeichen möglich ???

  Alt 26. Okt 2009, 14:48
Hallo,

Zitat:
Ich möchte damit an eine Fremdanwendung Daten übermitteln, die leider nur funktioniert, wenn das Item eben dieses Leerzeichen enthält.
Sicher ?

Was hat denn der Name der Delphi-Komponente mit der DDE-Kommunikation zu tun ?
Hast du dir die anderen Properties schon in der Hilfe angesehen ?

Was sagt denn DDESpy dazu ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Stefanie

Registriert seit: 12. Aug 2004
21 Beiträge
 
#4

Re: Komponentennamen mit Leerzeichen möglich ???

  Alt 26. Okt 2009, 15:59
So sieht der Code aus

Delphi-Quellcode:
var
  MainForm: TMainForm;
  MyDDEServerConv: TDDEServerConv;
  MyDDEServerItem : TDDEServerItem;

implementation

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
begin
  MyDDEServerConv := TDDEServerConv.Create(nil);
  MyDDEServerItem := TDDEServerItem.Create(MyDdeServerConv);
  MyDDEServerItem.ServerConv := MyDdeServerConv;
end;

procedure TMainForm.btn_startClick(Sender: TObject);
begin
  MyDDEServerItem.Text := 'Hallo';
end;
Wenn ich nun Excel als einfachen DDE-Empfänger nutze muß ich ja wie folgt eingeben "=DATA|MyDdeServerConv!MyDDEServerItem" wobei DATA der Name meines DDE-Senders(data.exe) ist. Meine Fremdanwendung möchte nun aber "=DATA|MyDdeServerConv!MyDDEServerItem 10" haben. Wie soll man das programmieren ? "var MyDDEServerItem 10 : TDDEServerItem;" geht ja nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

Re: Komponentennamen mit Leerzeichen möglich ???

  Alt 26. Okt 2009, 16:58
In diesem Fall wirst du die Delphi-DDE-Komponenten leider nicht verwenden können!

Welche Delphi-Version setzt du denn ein?
Uwe Raabe
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Komponentennamen mit Leerzeichen möglich ???

  Alt 26. Okt 2009, 17:02
Hallo,

aus der Hilfe


Zitat:
Die Eigenschaft Name der DDE-Server-Konversation bezeichnet das Thema, das von DDE-Clients für das Einrichten der Verbindung zur DDE-Server-Konversation verwendet wird.
Du hast also Recht.

also
Zitat:
DDE-Server-Elemente, die keiner DDE-Server-Konversation zugeordnet sind, ermitteln den Themennamen aus der Eigenschaft Caption des Formulars.

Ich glaube, dass das DDE-Topic gar keine Leerzeichen haben darf.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Komponentennamen mit Leerzeichen möglich ???

  Alt 26. Okt 2009, 17:03
Zitat von Uwe Raabe:
In diesem Fall wirst du die Delphi-DDE-Komponenten leider nicht verwenden können!
Wenn der Sourcecode vorhanden ist wäre ein kopie der Sourcen DDEMan möglich um die direkte verwendung des Namens (if (Ctrl.Name = ItemName) and ..) durch eine property "DDEName" zu ersetzen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#8

Re: Komponentennamen mit Leerzeichen möglich ???

  Alt 26. Okt 2009, 17:08
Zitat von Bernhard Geyer:
Zitat von Uwe Raabe:
In diesem Fall wirst du die Delphi-DDE-Komponenten leider nicht verwenden können!
Wenn der Sourcecode vorhanden ist wäre ein kopie der Sourcen DDEMan möglich um die direkte verwendung des Namens (if (Ctrl.Name = ItemName) and ..) durch eine property "DDEName" zu ersetzen.
Der Sourcecode steht in Ddeman.pas und es erscheint mir doch recht aufwendig, das Ganze umzustricken. Ist nicht gerade ein Paradebeispiel für transparenten Code.
Uwe Raabe
  Mit Zitat antworten Zitat
Stefanie

Registriert seit: 12. Aug 2004
21 Beiträge
 
#9

Re: Komponentennamen mit Leerzeichen möglich ???

  Alt 26. Okt 2009, 17:36
Zitat:
Welche Delphi-Version setzt du denn ein?
momentan RAD Studio 2007 - das Problem ist aber unter Delphi 7 identisch

Zitat:
Ich glaube, dass das DDE-Topic gar keine Leerzeichen haben darf.
Das ist gut möglich, aber so ist's nun mal. Da hält sich scheibar nicht jeder dran.

Zitat:
Wenn der Sourcecode vorhanden ist wäre ein kopie der Sourcen DDEMan möglich um die direkte verwendung des Namens (if (Ctrl.Name = ItemName) and ..) durch eine property "DDEName" zu ersetzen.
Das wäre durchaus möglich, hab sowas aber noch nie gemacht. Eine Kopie in meinem Projektordner kann ich ja problemlos modifizieren.
Wo und wie müßte man denn da ansetzen?
Hier die Deklaration des TDdeServerItem aus der ddeman.pas

Delphi-Quellcode:
{ TDdeServerItem }

  TDdeServerItem = class(TComponent)
  private
    FLines: TStrings;
    FServerConv: TDdeServerConv;
    FOnChange: TNotifyEvent;
    FOnPokeData: TNotifyEvent;
    FFmt: Integer;
    procedure ValueChanged;
  protected
    function GetText: string;
    procedure SetText(const Item: string);
    procedure SetLines(Value: TStrings);
    procedure SetServerConv(SConv: TDdeServerConv);
    procedure Notification(AComponent: TComponent;
      Operation: TOperation); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function PokeData(Data: HDdeData): LongInt;
    procedure CopyToClipboard;
    procedure Change; dynamic;
    property Fmt: Integer read FFmt;
  published
    property ServerConv: TDdeServerConv read FServerConv write SetServerConv;
    property Text: string read GetText write SetText;
    property Lines: TStrings read FLines write SetLines;
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
    property OnPokeData: TNotifyEvent read FOnPokeData write FOnPokeData;
  end;


implementation

uses SysUtils, Dialogs, Consts, Clipbrd;

type
  EDdeError = class(Exception);
  TDdeSrvrConv = class;

{ TDdeSrvrItem }

  TDdeSrvrItem = class(TComponent)
  private
    FConv: TDdeSrvrConv;
    FItem: string;
    FHszItem: HSZ;
    FSrvr: TDdeServerItem;
  protected
    procedure SetItem(const Value: string);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function RequestData(Fmt: Word): HDdeData;
    procedure PostDataChange;
    property Conv: TDdeSrvrConv read FConv write FConv;
    property Item: string read FItem write SetItem;
    property Srvr: TDdeServerItem read FSrvr write FSrvr;
    property HszItem: HSZ read FHszItem;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Komponentennamen mit Leerzeichen möglich ???

  Alt 26. Okt 2009, 18:03
Zitat von Uwe Raabe:
Der Sourcecode steht in Ddeman.pas und es erscheint mir doch recht aufwendig, das Ganze umzustricken. Ist nicht gerade ein Paradebeispiel für transparenten Code.
Es gibt eine Stelle bei der der Item.Name Abgefragt wird (Insgesamt 5 stellen wo auch andere Name-Properties abgefrag werden).

Zitat von Stefanie:
Wo und wie müßte man denn da ansetzen?
Hier die Deklaration des TDdeServerItem aus der ddeman.pas
1, Kopiere ddeman.pas unter neuen Namen
2, Andere alle dort definierten Klassen
3, Definiere ein neues DDEItemName-Property vom Typ String
4, Suche nach ".Name = ..." wo das Name-Property von TDdeServerItem abgefragt wird
5, Ersetze es durch dein DDEItemName-Property
6, Sorge im Konstruktor/Setter des DDEItemName-Property dafür das niemals ungültiger/leerer Wert vorkommt.
7, Suche nach der Unit welche für die IDE-Editoren + Registrierung zuständig ist und führe 1+2 durch
8, Stell dein eigenes Package zusammen und nimm die Units dort auf
9, Registriere das Package in der IDE.
Windows Vista - Eine neue Erfahrung in Fehlern.
  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 00:16 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