これをキャンバスのテキストアウトに入れようとしています
名前 空飛ぶ溶岩水
そうすることで..プレイヤーが飛行、溶岩、水などの名前の下に何かを持っている必要があるかどうかを確認します。したがって、ラベル テキストはプレイヤー名から始まります。すべてのラベルにこれがあります。そして、canwater のような「おまけ」のいずれかが true の場合、関連するテキストを含む新しい行が追加されます。以下を参照してください。
canwater := (FTherePlayers.Player[strtoint(name2)].values['water'] = 'Yes'); //checks if unit can enter water
canlava := (FTherePlayers.Player[strtoint(name2)].values['lava'] = 'Yes'); //checks if unit can enter lava
canfly := (FTherePlayers.Player[strtoint(name2)].values['Flying'] = 'Yes'); //checks if unit can fly
labeltext := FTherePlayers.Player[strtoint(name2)].values['name'];
if canfly then
labeltext := labeltext+ #13#10+ 'Flying';
if canlava then
labeltext := Labeltext+#13#10+'Lava';
if canwater then
labeltext := labeltext+#13#10+'Water';
hexmap1.AddLabelName(Labeltext,posL); //add name to placement label
これで、キャプションに正しい情報が提供されます。ただし、新しい行を追加することはありません。代わりに、次のようになります
name[][]flying[][]lava[][]water[][]
ここで、[] は小さな四角です テキストアウトに使用しているコードは次のようになります。
procedure THexmap.AddLabelName(text :string; Position :TPoint);
var
hex_id :string;
P0:tpoint;
begin
with TempMap.canvas do
begin
hex_id := text;
hex_id := text;
{font := self.font;}
p0 := convertcoords(point(Position.X,Position.Y),ptROWCOL);
textout(p0.x - (trunc(textwidth(hex_id) / 2)) ,p0.y- (textheight(hex_id)) ,hex_id);
end;
Refresh;
end;
ほとんどの場合、新しい画像またはこの場合はテキストを一時マップにロードします。hex_ID は name/flying/lava です..ect PO は、マップ上の行 1 、列 3 に配置する場所です。テキストアウト、それがどのように機能するのかわかりません..しかし、「改行」コード#10#13がめちゃくちゃになっていることを理解してください。これを修正する方法についてのアイデアはありますか?
XY(tpoint) を取得する方法を追加しました
{******************************************************************************}
{ This function will return the Row / Col pair based on a given X/Y
for a using application that calls it}
function THexMap.ConvertCoords(point:Tpoint;pointtype:Tpointtype):Tpoint;
var
temp:TPoint;
begin
case PointType of
ptXY: {Convert from x/y to Row/Col}
Begin
temp.x:= round( (point.x + (HexRadius/2) ) / (1.5 * Hexradius));
if odd(temp.x) then
temp.y := round( (point.y + rise) / (rise*2))
else
temp.y := round( point.y / (2*rise));
{ This section insures row / col is good}
if (temp.x < 1) or (temp.y < 1) then
begin
temp.x := 0;
temp.y := 0;
end
else if (temp.y > HexRows) or (temp.x > HexColumns) then
begin
temp.y := 0;
temp.x := 0;
end;
ConvertCoords := temp;
end;
ptRowCol: { Converts Row/Col to X/Y }
begin
if point.x=1 then
temp.x:= HexRadius
else
temp.x := HexRadius+(point.x-1) * (round(1.5 * hexradius));
if odd(point.x) then
if point.y=1 then
temp.y:= rise
else
temp.y := rise+(point.y-1) * (2 * rise)
else
temp.y := (point.y * (2*rise));
ConvertCoords := temp;
end;
end;
end;