问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

delphi编程 实现一功能

发布网友 发布时间:2023-12-25 13:36

我来回答

5个回答

热心网友 时间:2024-01-12 01:15

源文本文档
一台电脑是由多部分组成的,其中包括有[显示器/显示器是电脑的标准输出单元,可显示程序执行及操作的过程与实时性的输出结果],键盘,鼠标,和主机!
其中主机包括有CPU,内存,[硬盘/简称HD,是个人计算机中最主要的储存设备即辅助内存],主板,电源等部件!
---------------------------------------------------
你在盒子上说
其实DATA.TXT里的的文字是随机的,关键字的位置和个数都不能确定的,按道理不可能用LABEL来组合。
下边是我的道理^_^
首先字都是读到数组里的,字号是固定的,一个汉字占两个字节,一个全角标点也两个字节,所以可以量出来在这个应用程序窗体上一行最多可以放多少个字(假设窗体长1000像素,字50X50像素) 也就是说每行最多输出20字
首先先把字符定义出来,还有,计数器 L=20
数组1=一台电脑是由多部分组成的,其中包括有
数组2=[显示器/显示器是电脑的标准输出单元,可显示程序执行及操作的过程与实时性的输出结果]
数组3=键盘,鼠标,和主机!<-这有个硬回车
数组4=[硬盘/简称HD,是个人计算机中最主要的储存设备即辅助内存]
数组5=主板,电源等部件
此处代码应该容易写

核心部分

先检测首字符是不是"["
如果不是,测长,通过TEXTOUT(我记得好像是...)输出普通字符,每输出一个字符前都要扣一个计数器,然后下一个输出点是(500-50*L)如果计数器到0了或者字符是回车的话
那给TEXTOUT的TOP+80(字50 字纵间距30)
如果此数组字符输出结束了,下一个数组必定是"["开头,所以把现在剩余的长度加上关键字的长度(从[到/中间是关键字长度)如果数值<0
TEXTOUT的TOP+80
带有CLICK事件的LABLE1通过数组读取它的caption属性和hint属性(这不细说了)
TOP数值有了,LEFT=500-剩余字数*50 LABEL它也知道该往哪呆了
下一个输出点在LEFT=500-剩余字数*50+LABEL.WIDTH处,
到写这也差不多了..这点东西写了我一个多小时...

其实用哎呀.......的TCPPWEBBROWSER也行,不过.和你图上的软件风格就不一样了.

代码太有挑战.我决定不要分了..希望你自己应该能搞定,我知道,我这里边有很多细节都没有.但希望我写的会对你有帮助.
^_^

热心网友 时间:2024-01-12 01:15

介绍地址
我先看下再来,占个一楼,呵呵

热心网友 时间:2024-01-12 01:16

我是玩BCB的,BCB和Delphi除了语法,其它基本上是一样的。
所以,以我个人的看法说说,仅供参考。

1、想直线解决这个问题是没门的,基本上是办不到的。正如你所说,最大的问题,很难准确定位关键词,别的还可以想办法。
2、所以,只能绕弯子走,不过,如果是我来做的话,这弯子就绕得很大了,我会使用TCppWebBrowser控件,用Html网页来实现他。也就是说,你那个TXT文本文件要变成标准的Html格式,据我所知,Html里要实现你说的这个功能是不难的。不过界面就变了,呵呵。
3、当然,按我的做法,在事实上,所有的效果都会是Html出来的,程序就只变成一个壳了。

我想,除了我说的办法,可能没有别的方便的方法了。

热心网友 时间:2024-01-12 01:17

个人认为用动态生成label和form的方法应该是可以解决这个问题的。
先说一下想法吧:
第一步,用一个stringlist读data.txt,所用方法为LoadFromFile。
第二步,写两个函数,先命名为gettxt1和gettxt2,用pos来判断“[”、“]”和“/”的位置,各返回一个integer类型的变量。
第三步,写一个动态生成label控件的函数,返回值为integer类型(如果result为0,那么说明label不是“[]”内的内容,无onclick事件;如果为1,则是“[]”里的内容,有onclick事件)。
第四步,循环判断stringlist的每一行,其中用到的函数有length,copy,delete等。将stringlist中的第一行赋值给string1,用length得到长度,用gettxt1得到“[”的位置,如果存在“[”,得到它的位置,用copy截取其前面的字符串,赋值给string2,调用动态生成label控件,将其caption设为string2。如果不存在“[”,则直接跳过,判断第二行,如果第二行中存在“[”,获得其位置,并截取其前面的字符串,赋值为string3,用string2:=string1+string3的方法,获得完整的字符串,调用动态生成label控件函数,caption为string2;

再说“[]”里的内容获取,基本上同上面的方法,所不同的有两点:一是要将“[]”里的内容添加到一个stringlist类型中(该类型变量为全局变量),先命名为strshowtxt;二是caption为“[]”里的内容的label有onclick事件,而这个事件需要另写一个过程,这个过程先命名为showtxt。

第四步,如何显示关键字内容。
要想显示关键字内容,必需知道哪一个label的caption值为关键字,要实现这一步,就要在动态生成label时想办法。上面提到动态生成的label控件的函数,其中要有这一步,如果是“[]”里的字符,那么将这个label的tag值设为1(默认为0)。调用showtxt过程,循环判断strshowtxt每行中是否有这个关键字,没有,则直接跳过;有,就动态生成一个form和label,将label的caption值设为strshowtxt这一行的内容。

基本上就想到这么多,当然其中还是有许多不足吧,自己还没试,试过后就知道是不是能行。
//////////////////////////////////////////////
做出一部分,但还不能判断是点的哪一个,所以只要点label,就会出来,还在想....
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procere FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function showlabel(value:string;value1:Boolean):Boolean;
procere showtxt;
procere showform(Sender: TObject);
end;

var
Form1: TForm1;
n:integer;
lab:TLabel;
implementation

{$R *.dfm}

{ TForm1 }

function TForm1.showlabel(value: string; value1: Boolean):Boolean;
begin
lab:=TLabel.Create(form1);
lab.Caption:=value;
lab.Parent:=form1;
lab.Visible:=true;
lab.AutoSize:=true;
if n=0 then
lab.Left:=10
else
lab.Left:=n;
lab.Top:=10;
if value1 then
lab.Tag:=0
else
lab.Tag:=1;
lab.OnClick:=showform;
lab.Width:=lab.Width+32;
n:=lab.Left+lab.Width;
result:=true;
end;

procere TForm1.showtxt;
var
str:tstringlist;
string1,string2,string3:string;
i,m:integer;
begin
str:=tstringlist.Create;
try
str.LoadFromFile('E:\新建文件夹\data.txt');
string1:=str.Strings[0];
i:=pos('[',string1);
string2:=copy(string1,1,i-1);
m:=pos('/',string1);
string3:=copy(string1,i+1,m-i-1);
showlabel(string2,true);
showlabel(string3,false);
finally
str.Free;
end;
end;

procere TForm1.FormCreate(Sender: TObject);
begin
n:=0;
showtxt;
end;

procere TForm1.showform(Sender: TObject);
var
str,str1:tstringlist;
myform:Tform;
i,m,n:integer;
s,s1:string;
st:widestring;
la:TLabel;
begin
str:=tstringlist.Create;
str1:=tstringlist.Create;
myform:=Tform.Create(nil);
la:=TLabel.Create(myform);
try
str.LoadFromFile('E:\新建文件夹\data.txt');
for i:=0 to str.Count-1 do
s1:=s1+str.Strings[i];
n:=pos(']',s1);
m:=pos('[',s1);
while m<>0 do
begin
s:=copy(s1,m+1,n-m-1);
str1.Add(s);
delete(s1,1,n);
m:=pos('[',s1);
n:=pos(']',s1);
end;
for i:=0 to str1.Count-1 do
begin
m:=pos(lab.Caption,str1.Strings[i]);
if m<>0 then
st:=str1.Strings[i];
break;
end;
if m<>0 then
begin
myform.Caption:='内容';
myform.Width:=300;
myform.Height:=300;
la.Caption:=st;
la.Parent:=myform;
la.AutoSize:=true;
la.Top:=10;
la.Left:=10;
la.Visible:=true;
la.Width:=la.Width+100;
myform.ShowModal;
end;
finally
str.Free;
str1.Free;
myform.Free;
end;
end;

end.

热心网友 时间:2024-01-12 01:17

首先,可以考虑使用正则式来匹配字符串,正则式的资料请自行Google或百度,否则要在这里写书了。
其次,关于表现形式可以有多种,比如动态生成Label并设定相关属性;如果允许的话,使用RichEdit并设置字体和链接(类似超链接)等;实在不行,自己在Canvas上画吧,这个就比较麻烦了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
太和县环球嘉年华港口有限公司怎么样? 为什么抵触相亲? 鸡蛋怎么做好吃家常做法大全 为何抵触相亲 为什么很多人都抵触相亲? 鸡蛋怎么做才营养好吃呢? 怎么可以搞到110电话打过去给别人 植发后能保持多久?有人知道吗? 银联储蓄卡包括什么 怎么让电脑图标变小如何将电脑桌面上软件变小 请问一个手机号注册了两个,但登不上另一个怎么办啊? 一个手机号注册两个怎么弄 微信账户和一样吗 RunDll32 cmicnfg.cpi,CMICtrlwnd命令是什么啊? 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 怎么删除诺基亚自带的那些东西,铃声游戏之类的 一个手机号在注册了一个微信后又注册了新的,旧的怎么找回? 一个手机卡能注册两个吗 一个手机卡能注册两个吗 手机号1 24 手机号24小时内绑定了两个被限制 请问什么时候才能重 ... 微信账号和是一样吗 一年内怎么改第二次 手机号绑定了达到限制不能绑定其他是什么意思? 那个国家是第一个生产的大炮? HIT:我守护的一切闪退黑屏怎么解决 一年内怎么改第二次 倍鼻鼻宁喷雾剂中药雾化治鼻炎是怎么做到的?有谁能科普一下吗? 被误改被限制1年后才能改回来怎么弄? 如何查询录取通知书的发放信息啊? 辽宁省鞍山市铁东区邮政编码 两个绑定了同一个手机号怎么办?那原无法登录的话,怎样才能... 能整除8的数有( )。 长安欧力威X6还没过保修期空调就不行了一边热风一边冷风去4S店还要付钱... 航天信息U3财务软件财务报表打不开,点了后没反应,也没有任何提示,怎么... 一年没满 想更改怎么更改 改一年内怎么改第二次 如果第一个被删除了怎么注册第二个? 蜘蛛痣是肝硬化晚期的典型症状,常见于上半身,专家告诉你 教育科学学院,数学与系统科学学院,教师教育学院,如果我想当数学老师,考... 苹果X怎么改 《你的时代我的时代》吴白醉酒向艾情撒娇,这样的操作,一般女友会怎么想... 杭州传云物联网技术有限公司是国企还是私企? 沙漠化土地最宜种沙漠经济作物、农作物? 一张手机卡可以注册两个吗? 吃了木瓜丰胸葛根粉还可以再喝蜜蜂吗 如何在手机上同时登陆两个? 有天然提取的可以用于中药雾化的么?不想孩子再用抗生素激素了。_百 ... 同一部手机怎样申请第二个? 微信账号和是一样吗 一个手机号码可以申请二个吗?如何申请?