![]() |
Komponentennamen mit Leerzeichen möglich ???
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 ? |
Re: Komponentennamen mit Leerzeichen möglich ???
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 :gruebel: , dann geht nur der Weg ohne Delphi-Komponente. |
Re: Komponentennamen mit Leerzeichen möglich ???
Hallo,
Zitat:
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 |
Re: Komponentennamen mit Leerzeichen möglich ???
So sieht der Code aus
Delphi-Quellcode:
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.
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; |
Re: Komponentennamen mit Leerzeichen möglich ???
In diesem Fall wirst du die Delphi-DDE-Komponenten leider nicht verwenden können!
Welche Delphi-Version setzt du denn ein? |
Re: Komponentennamen mit Leerzeichen möglich ???
Hallo,
aus der Hilfe Zitat:
also Zitat:
Ich glaube, dass das DDE-Topic gar keine Leerzeichen haben darf. Heiko |
Re: Komponentennamen mit Leerzeichen möglich ???
Zitat:
|
Re: Komponentennamen mit Leerzeichen möglich ???
Zitat:
|
Re: Komponentennamen mit Leerzeichen möglich ???
Zitat:
Zitat:
Zitat:
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; |
Re: Komponentennamen mit Leerzeichen möglich ???
Zitat:
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 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