Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Problem mit Hint und Variablenverknüpfung


delphi10 - Do 29.01.09 22:21
Titel: Problem mit Hint und Variablenverknüpfung
Hallo

Weiß jemand warum

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Hint := hint + String;
oder 
Hint := String; nicht funktioniert,
dagegen
Hint := 'Text';
ohne Probleme läuft?

Eine Recherche über alle postings ergab, dass es vielleicht an der Delphi-Version liegen könnte. Kann das jemand sicher bestätigen?
Besten Dank
Gruß Delphi10


jaenicke - Do 29.01.09 22:29

Das sollte normalerweise keine Probleme machen. Hast du ein konkretes Beispiel?

Und was heißt es läuft nicht? Passiert nix? Hat Hint einen falschen Inhalt? Gibt es einen Fehler beim Kompilieren?

Ein Problem kann dabei z.B. auftreten, wenn du z.B. durch eine Bereichsüberschreitung bei dynamischen Arrays aus Versehen einen falschen Speicherbereich überschrieben hast. Denn das äußert sich dann durch solche "unerklärlichen Phänomene".


delphi10 - Do 29.01.09 23:05

Hallo Jaenicke
Danke für die schnelle Antwort.
Bei Zuweisung einer reinen Stringvariablen wird hint leer, bzw. nicht angezeigt.
Bei Zuweisung eines Textes + String wird nur der Text angezeigt. Ein Array benutze ich nicht, es sind immer explizit einzelne Zuweisungen.
Bespiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
DriveList := Form5.GetLogicalDrivesStr(false);
// Inhalt = 'CDEFGHIJKN'
Form5.CheckBox1.Hint := DriveList[n];
// Keine Anzeige
// Schreib ich so:
Form5.CheckBox1.Hint := 'Laufwerk: ' + DriveList[n];
// wird nur Laufwerk: angezeigt


jaenicke - Do 29.01.09 23:13

Was ist n? Liegt das sicher im Bereich der Stringlänge?

Wenn dabei eine Bereichsüberschreitung auftritt, dann wird dies nicht angezeigt, es sei denn du aktivierst das in den Optionen.


delphi10 - Do 29.01.09 23:32

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Was ist n? Liegt das sicher im Bereich der Stringlänge?

Wenn dabei eine Bereichsüberschreitung auftritt, dann wird dies nicht angezeigt, es sei denn du aktivierst das in den Optionen.


n soll hier - wie üblich - bei allgemeinen Erläuterungen einen beliebigen Wert in gültigen Grenzen ersetzen. Ich hätte auch schreiben können

Delphi-Quelltext
1:
Form5.CheckBox1.Hint := 'Laufwerk: ' + DriveList[2];                    
Ja, n liegt sicher im Bereich der Stringlänge. Die einfachen möglichen Ursachen habe ich schon mal ausgeschlossen.


jaenicke - Do 29.01.09 23:39

Naja, weil ich habe das ausprobiert, das klappt problemlos. :nixweiss:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm144.Button1Click(Sender: TObject);

  function GetMyString: string;
  var
    i: Integer;
  begin
    for i := 65 to 70 do
      Result := Result + Chr(i);
  end;

var
  a: string;
  n: Integer;
begin
  a := GetMyString;
  n := Length(a) div 2;
  Form144.CheckBox1.Hint := 'Laufwerk: ' + a[n];
end;
Testprojekt mit diesem Quelltext inkl. Exe und auch von Delphi 2006 (die steht bei dir ja im Profil) im Anhang.


delphi10 - Fr 30.01.09 22:24

Hallo Jaenicke

Besten Dank für Deine Hilfe. Also, Dein Kompilat lief auch bei mir sofort und nachdem ich die Sourcen bei mir kompiliert habe, funktionierte das auch sofort. Weiß der Teufel warum, aber danach(sic) lief auch mein Programm richtig. Was auch immer da verklemmt war, ich kann den Fehler nicht mehr reproduzieren. Vielleicht steige ich da später nochmal ein, im Moment ist es ja ok. Nochmals Danke.
cu delphi10