获取 FMX TMemo 中的插入符号位置行和字符

问题描述

我尝试在包含两个标签的状态栏中显示备忘录插入符号的位置。

我试过了:

lblX.Text := Memo.Caret.Pos.X.ToString();

lblY.Text := Memo.Caret.Pos.Y.ToString();

这两个值似乎代表了备忘录左侧和顶部的实际位置。

是否可以将其作为行(行)和列(字符)获取

我想澄清一下,我与 firemonkey 一起工作,以便能够将我的项目编译到 windows 和 linux。

感谢您的回答。

Selticq。

解决方法

我以前从未使用过 FMX,但使用 Code Insight 我立即发现 Memo.CaretPosition.LineMemo.CaretPosition.Pos 分别代表当前行和列。

documentation 证实了这一点:

Line 表示包含光标的行号,从零开始索引。

Pos 表示光标的水平字符坐标,从零开始索引。

[...]

因此,如果 Line = 3Pos = 5,则光标位于第四行和行首的第六个字符处。

,

如果你想显示备忘录插入符号的位置,你可以使用这样的代码:

#importing dependencies

import numpy as np
import logging
import discord
import PIL
import asyncio
import os

#importing commands from above dependencies

from discord import client
from discord.ext import commands
from PIL import Image,ImageFont,ImageDraw
from discord.member import Member

#enabling privileged intents

intents = discord.Intents.default()
intents.members = True
intents.presences = True
client = discord.Client(intents=intents)

#for custom image welcome message

@client.event
async def on_member_join(ctx,member: discord.Member = None):

    if member == None:
        member = ctx.author
    channel = client.get_channel("TOKEN")

    #-----------------------------------------------------------------------------#   

    #transforming user's avatar into a circle

    # Open the input image as numpy array,convert to RGB
    img=Image.open(member.avatar_url).convert("RGB")
    npImage=np.array(img)
    h,w=img.size

    # Create same size alpha layer with circle
    alpha = Image.new('L',img.size,0)
    draw = ImageDraw.Draw(alpha)
    draw.pieslice([0,h,w],360,fill=255)

    # Convert alpha Image to numpy array
    npAlpha=np.array(alpha)

    # Add alpha layer to RGB
    npImage=np.dstack((npImage,npAlpha))

    # Save with alpha
    Image.fromarray(npImage).save("D:\Coding\Python\Projects\discord_moderation_bot\imgs\result.png")
    
    #-----------------------------------------------------------------------------#
    
    #pasting user avatar into welcome banner
    
    img = Image.open("D:\Coding\Python\Projects\discord_moderation_bot\imgs\welcome_banner.png")
    pfp = Image.open("D:\Coding\Python\Projects\discord_moderation_bot\imgs\result.png")
    
    pfp = pfp.resize ((167,167))

    img.paste(pfp,(120,104))

    img.save("D:\Coding\Python\Projects\discord_moderation_bot\imgs\welcome.jpg")

    await ctx.send(file = discord.File("welcome.jpg"))


client.run("TOKEN")

如果您想要在正确的事件处理程序中调用该方法的完整示例代码,这里是:

procedure TForm1.UpdateCaretPosDisplay;
begin
    lblX.Text := (Memo1.CaretPosition.Pos + 1).ToString;
    lblY.Text := (Memo1.CaretPosition.Line + 1).ToString;
end;