Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2154
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Mi 26.07.17 21:15 
Hallo!

Ich benutze eine TJvAppInstances-Komponente in meinem Programm und beobachte folgende unerwünschte Effekte:

Ich arbeite unter einem eingeschränkten Benutzerkonto und starte mehrere Instanzen meines Programms, wobei (a) das aktuelle, eingeschränkte Konto ist und (b) ein Administratorenkonto ist.

Wenn ich (a) und danach (b) starte, hängt (b), wenn ich dort versuche, auf JvAppInstances1.AppInstances.InstanceCount zuzugreifen, solange (a) noch läuft. Wenn (a) beendet wird, klappt es.

Wenn ich zuerst (b) und dann (a) starte, hängt (b) beim Aufruf von JvAppInstances1.AppInstances.InstanceCount und (a) öffnet sich erst gar nicht, wird aber im Taskmanager aufgelistet und öffnet sich erst, wenn (b) per Taskmanager abgeschossen wird.

JvAppInstances1.AppInstances.InstanceCount ist in jedem Fall zugewiesen ("Assigned").
Mehrere Instanzen unter verschiedenen Admin-Konten oder unter dem eingeschränkten Benutzerkonto verursachen keine Probleme.

Kann ich das im Programm irgendwie abfangen?

//Edit:
Es geht nicht ums Beenden per Taskmanager, es geht nur um JvAppInstances1.AppInstances.InstanceCount, das kommt im OnClose vor. Deaktiviere ich es dort, funktioniert alles wieder.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1671
Erhaltene Danke: 305

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mi 26.07.17 22:01 
Guten Abend galagher,

das hängt mit den Eigenschaften .Active und .AutoActive zusammen. Solange diese True sind, hängt sich die Anwendung auf. Ich weiss nicht was die Komponente genau bewirkt, wenn sie Aktiv ist, aber .InstanceCount lässt sich ebenso abfragen, wenn jene Eigenschaften auf False gesetzt werden.

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2154
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Do 27.07.17 18:46 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Guten Abend galagher,

das hängt mit den Eigenschaften .Active und .AutoActive zusammen. Solange diese True sind, hängt sich die Anwendung auf.
Jeweils nur eines auf False, dann beides auf False: Funktioniert leider nicht!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1671
Erhaltene Danke: 305

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Do 27.07.17 19:23 
Da hast du wohl recht. Gestern hat es so funktioniert, ich weiss auch nicht. Die kompilierte Anwendung hab' ich dann abwechselnd mit und ohne Adminrechte ausgeführt und den Wert beim Ausführen in der Caption ausgegeben.

Mal abgesehen davon: Was willst du mit der Komponente erreichen?

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2154
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Do 27.07.17 19:52 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Was willst du mit der Komponente erreichen?
Ich möchte einfach in der Caption die Anzahl der Instanzen anzeigen, sonst nichts!

Kann man irgendwie abfangen, dass eine Instanz unter einem anderen Benutzerkonto gestartet wurde? Ich weiss, wie ich den Benutzernamen der jeweiligen Instanz ermittlen kann, ich brauche aber den Benutzernamen der aktuellen Windows-Sitzung. Wenn ich den erstmal habe und er sich von jenem Benutzernamen unterscheidet, mit dem ich die neue Instanz starten möchte (per Windows "Als Administrator ausführen"), komme ich schon weiter!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1671
Erhaltene Danke: 305

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Do 27.07.17 20:31 
Die einfache Variante wäre mit FindWindow() nach dem Fenster der Anwendung Ausschau zu halten und mitzuzählen. Die andere Variante wäre die Anzahl der Prozesse mit ein und denselben Prozessnamen zu zählen, hier. Müsste man aber erst übersetzen. Dazu fehlt noch die Struktur PROCESSENTRY32. Die Funktion Process32Next sollte, denke ich, dabei sein, und wenn nicht, dann einfach nachschauen, wie sie deklariert gehört.

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)

Für diesen Beitrag haben gedankt: galagher
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2154
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Do 27.07.17 22:10 
Ich habe hier etwas gefunden: www.tek-tips.com/faqs.cfm?fid=7523
Funktioniert, die Instanzen werden auch unter mehreren Benutzerkonten korrekt gezählt. Nur das Aktualisieren ist ein bisschen unelegant, weil ich ja nicht so einfach Daten zwischen den Instanzen austauschen kann. (Habe zwar auch dafür eine Prozedur parat, muss ich aber nicht erst einbauen).

Ich weise einmalig beim Programmstart die Anzahl der Instanzen einer Variablen iInstance zu. In FormActivate und ApplicationEvents1Idle rufe ich ProcessCount auf. So habe ich stets aktuelle Werte. Wenn iInstance > InstanceCount(ExtractFileName(Application.ExeName)) ist, dekrementiere ich iInstance.

Muss noch testen, klappt aber bisher fehlerfrei!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!

Für diesen Beitrag haben gedankt: Frühlingsrolle
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1671
Erhaltene Danke: 305

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Do 27.07.17 22:30 
Prima, das erspart dir die Übersetzung. :zustimm: Klar kannst du Werte zwischen 2 Anwendungen aus/tauschen. Such mal hier im Forum nach "Kommunikation zwischen 2 Formularen/Anwendungen".

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)

Für diesen Beitrag haben gedankt: galagher
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2154
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Do 27.07.17 22:36 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Such mal hier im Forum nach "Kommunikation zwischen 2 Formularen/Anwendungen".
Mache ich am Samstag!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2154
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Sa 29.07.17 10:22 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
"Kommunikation zwischen 2 Formularen/Anwendungen".
Das läuft letzendlich alles auf FindWindow hinaus, dazu brauche ich die exakte Caption des Fensters. Diese ist aber jedesmal anders.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1671
Erhaltene Danke: 305

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 29.07.17 11:43 
Die Caption des Fensters kann man auch indirekt ermitteln:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
function GetWindowCaption1(WndClass: string): string;
var
  hWnd: THandle;
  captionLength: Word;
  wndCaption: string;
begin
  result := '';
  hWnd := FindWindow(PChar(WndClass), nil);
  if hWnd <> INVALID_HANDLE_VALUE then  // INVALID_HANDLE_VALUE = $FFFFFFFF
  begin
    CaptionLength := SendMessage(hWnd, WM_GETTEXTLENGTH, 00);  // WM_GETTEXTLENGTH = 14
    SetLength(wndCaption, captionLength + 1);
    SendMessage(hWnd, WM_GETTEXT, captionLength + 1, Integer(@wndCaption[1]));  // WM_GETTEXT = 13
    result := wndCaption;
  end;
end;

function GetWindowCaption2(hWnd: HWND): string;
var
  captionLength: Word;
  wndCaption: string;
begin
  result := '';
  if hWnd <> INVALID_HANDLE_VALUE then
  begin
    captionLength := GetWindowTextLength(hWnd);
    SetLength(wndCaption, captionLength);
    GetWindowText(hWnd, PChar(wndCaption), captionLength + 1);
    result := wndCaption;
  end;
end;

// Abfrage
ShowMessage(GetWindowCaption1('TForm1'));
ShowMessage(GetWindowCaption2(Form1.Handle));

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)

Für diesen Beitrag haben gedankt: galagher
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2154
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Sa 29.07.17 12:12 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Die Caption des Fensters kann man auch indirekt ermitteln:
Das gibt mir die Caption des aufrufenden Fensters zurück, ich brauche aber alle Captions aller Fenster, die zB. den Text "SynEdit" enthalten. Dann schreibe ich die in eine TStringList und sende anhand dieser Liste an alle betreffenden Fenster eine Nachricht.

Aber zuerst brauche ich die Captions!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1671
Erhaltene Danke: 305

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 29.07.17 16:19 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
// SubText ... Ein Wort, welches irgendwo in der Caption enthalten sein soll
procedure GetSpecificWindowCaption(AList: TStrings; SubText: string); 
  function GetAllWindows(hWnd: HWND; AList: TStrings): Boolean; stdcall;
  var
    captionLength: Word;
    wndCaption: string;
  begin
    captionLength := GetWindowTextLength(hWnd);
    SetLength(wndCaption, captionLength);
    GetWindowText(hWnd, PChar(wndCaption), captionLength + 1);
    Alist.Add(wndCaption);
    result := true;
  end;
var
  tmp: TStringList;
  i: Integer;
begin
  if (AList <> niland (SubText <> ''then
  begin
    tmp := TStringList.Create;
    try
      EnumWindows(@GetAllWindows, Integer(tmp));
      tmp.BeginUpdate;
      for i := 0 to tmp.Count - 1 do
        if Pos(UpperCase(SubText), UpperCase(tmp[i])) <> 0 then
          AList.Add(tmp[i]);
      tmp.EndUpdate;
    finally
      tmp.Free;
    end;
  end;
end;

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)

Für diesen Beitrag haben gedankt: galagher
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2154
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Di 01.08.17 20:56 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
SubText ... Ein Wort, welches irgendwo in der Caption enthalten sein soll
Das ist perfekt! Darauf muss man aber auch erst kommen! Danke! :D

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1671
Erhaltene Danke: 305

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 01.08.17 21:31 
Die Lösung liegt in der EnumWindows() Funktion. Wenn keiner von uns darüber bescheid gewusst hätte, wäre der Quelltext nicht zustande gekommen. Das funktioniert aber auch nur, wenn das betreffende Fenster offen! ist. D.h. je nach Anwendungsfall: Ein Ordner wird geöffnet, oder eine Datei ausgeführt. All das sind offene Fenster. In deinem Fall ist es ein Formular/Fenster, welches eine besondere Beschriftung ("SynEdit") aufweist.

Es könnte im Anschluss eine weitere Frage auftauchen, wie man nun im besagten Fenster auf ein bestimmtes Element/Control zugreift, wie z.B. ein TSynEdit, welches nachträglich ein paar Textteilen hinzugefügt bekommen soll.
Während man mit FindWindow() an das Fenster-Handle herankommt, kann man mit der erweiterten Funktion FindWindowEx() auch nach Unter-Elementen Ausschau halten. Dem ersten Parameter gibt man das momentane Fenster-Handle mit, den 2. Parameter kann man nil setzen, und die letzten zwei Parameter sollten bekannt/selbsterklärend sein.

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2154
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Do 03.08.17 19:04 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Es könnte im Anschluss eine weitere Frage auftauchen, wie man nun im besagten Fenster auf ein bestimmtes Element/Control zugreift, wie z.B. ein TSynEdit, welches nachträglich ein paar Textteilen hinzugefügt bekommen soll.

Ich mache das so:
Die sendende Form muss zunächst klarerweise senden können, dazu erstelle ich eine Liste mit den Fenster-Captions, an die ich senden will:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
sCaptionSubText := 'SynEdit ';  //Oder was man eben in der Caption sucht!
//...

procedure TForm1.MakeCaptionList(const iD: Integer);
var
  i: Integer;
  List: TStringList;
begin
  List := TStringList.Create;
  try
    GetSpecificWindowCaption(List, sCaptionSubText);

    for i := 0 to List.Count-1 do
      SendText(Handle, iD, sCaptionSubText, List[i]);
  finally
    List.Free;
  end;
end;


Die empfangende Form bekommt eine Prozedur ReceiveData (www.entwickler-ecke....hlight=cbdata+strlen):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
private
  procedure ReceiveData(var Msg: TWMCopyData); message WM_COPYDATA;
//...

{----------------- ReceiveData - Text empfangen, Beispiel: --------------------}
procedure TForm1.ReceiveData(var Msg: TWMCopyData);
begin
(*//Optional kann der Identifier-Integer ausgewertet werden:
  if Msg.CopyDataStruct.dwData = 0 then [...] //Wenn 0 oder was auch immer, tu was!

  //Optional kann der Integerwert der Stringlänge ausgewertet werden:
  if Msg.CopyDataStruct.cbData = [...] //tu was!
*)


  {Nun den gesendeten Text verarbeiten:}
  if PChar(Msg.CopyDataStruct.lpData) = sCaptionSubText then
  begin
    if (Msg.CopyDataStruct.dwData = iCaptionUpdate) or
       (Msg.CopyDataStruct.dwData = iCaptionDecCount) then
      SetMainFormCaption(Msg.CopyDataStruct.dwData);
  end;
end;

Um auf Komponenten zuugreifen, kann man alles mögliche machen, zB Memo1.Lines.Add(PChar(Msg.CopyDataStruct.dwData)); - oder man könnte mit FindComponent arbeiten, was auch immer man möchte.
Im Wesentlichen kommt es nur auf Msg.CopyDataStruct.dwData an, denn das enthält den zu sendenden Text. Was das empfangende Fenster damit macht, steht in ReceiveData.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1671
Erhaltene Danke: 305

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 04.08.17 07:54 
:zustimm: so kann man es auch machen. Solltest du einmal auf ein fremdes Fenster zugreifen müssen, um einen Textinhalt auszulesen oder neu zu setzen, erweist sich FindWindow() mit FindWindowEx() als nützlich.
Die etwas andere Möglichkeit wäre gewesen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
function SendText(CaptionSub: string; AControl: TClass;
  Msg: string): Boolean;
var
  i: Integer;
  hnd: HWND;
  List: TStringList;
begin
  result := false;
  try
    List := TStringList.Create;
    GetSpecificWindowCaption(List, CaptionSub);
    for i := 0 to List.Count - 1 do
    begin
      hnd := FindWindow(nil, PChar(List[i]));
      hnd := FindWindowEx(hnd, 0, PChar(string(AControl.ClassName)), nil);
      result := SendMessage(hnd, WM_SETTEXT, 0, Integer(PChar(Msg))) = 0;
    end;
  finally
    List.Free;
  end;
end;

// Aufruf
begin
  SendText('Form1', TSynEdit, 'Neuer SynEdit Text');  // kann man auch Abfragen (if ... then)
end;

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)

Für diesen Beitrag haben gedankt: galagher
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2154
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Fr 04.08.17 19:13 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Die etwas andere Möglichkeit wäre gewesen:
Muss ich unbedingt testen, gefällt mir auch!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1671
Erhaltene Danke: 305

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 05.08.17 15:06 
Gut, nur mach es besser als ich., also mach eine procedure daraus und initialisiere die Liste bitte vor dem try. :)

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2154
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Mo 07.08.17 21:57 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Gut, nur mach es besser als ich., also mach eine procedure daraus und initialisiere die Liste bitte vor dem try. :)
Ok, habe ich gemacht. Vor dem try, klar.
Mit TSynEdit kann ich das momentan nicht testen, da mein Programm "SynEdit" heisst. Also verwende ich zum Testen ein TMemo, da wird aber nur an das Memo des "eigenen" Fensters gesendet, und da auch nur an das zuletzt erstellte (Memo1 (nein), Memo2 (nein), Memo3 (ja)). Da kann ich gleich Memo3.Text := 'Neuer SynEdit Text' angeben!

Ich verwende eine Komponente, die ich von TJvWideHLEditor abgeleitet habe, und mit dieser oder dem Typnamen meiner Komponente - TWideHLEditorX - funktioniert es überhaupt nicht. :gruebel: :nixweiss:

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!