我为一些使用cordova和onsenui的公式编写了一个小型计算器应用程序.这个应用程序在Android和iphone上运行正常但是当我在ipad上使用它时,闪烁的光标不断弹出文本字段,就像在我的图像中一样发布后,光标应该是黄色的<< Liters>文本字段,但它会弹出它.这是viewform的代码
<table border="0" cellpadding="0">
<tr style="height: 28px;">
<td style="padding-right: 8px;">Litres:</td>
<td align="center" style="background-color: #92D050; color: #000000;"><b>{{litres | setDecimal:3}}</b></td>
<td><b> Required</b></td>
</tr>
<tr>
<td style="padding-right: 8px;">Bag Size:</td>
<td><ons-text-input ng-model="bagsize" placeholder="0" ng-change="doCalc()" type="number" pattern="[0-9]*" inputmode="numeric" min="0" style="width: 80px; background-color: #FFFF00; color: #000000"></ons-text-input></td>
<td><b> Litres</b></td>
</tr>
<tr style="height: 28px;">
<td style="padding-right: 8px;">No of Bags Required:</td>
<td align="center" style="background-color: #92D050; color: #000000;"><b>{{totalbags | setDecimal:3}}</b></td>
<td><b> </b></td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么它只会发生ipad,我该如何解决这个问题?
在多线程应用程序中使用TList是否安全,所有其他线程都可以访问它,但只有一个线程写入它.情景是
每个线程的唯一TList,只有该线程才会写入,而其他线程只访问它以从中获取数据.
安全吗?
我想在Delphi的画布上绘制时为字母添加字符间距.水平间距通过使用SetTextCharacterExtraAPI 工作正常,但如果我在画布上使用DrawText并在其中有一个换行符,我将如何调整垂直间距?我尝试过,SetTextJustification但我认为它只适用于太空角色.
无论如何我可以调整字符的垂直间距吗?
经过大量的搜索,我认为Indy TCP服务器将是我正在使用的Instant Messenger服务器上最好的.我现在面临的唯一问题是向其他连接的客户端广播和转发消息,向同一客户端发回响应似乎没问题并且不会挂起其他客户端活动,但是为了将消息转发给其他客户端我知道的机制是通过使用aContext.locklist,并在连接列表之间进行迭代,以找到要接收数据的客户端连接.
我认为这里的问题是它会冻结列表,并且在调用unlocklist之前不会处理其他客户端请求.那么它不会损害服务器的性能吗?锁定列表并在连接之间进行迭代以转发每条消息(因为这是在信使中经常发生的事情).有没有更好的方法来做到这一点?
我使用的是Indy 10和Delphi 7
广播代码:
Var tmpList: TList;
i: Integer;
Begin
tmpList := IdServer.Contexts.LockList;
For i := 0 to tmpList.Count Do Begin
TIdContext(tmpList[i]).Connection.Socket.WriteLn('Broadcast message');
End;
IdServer.Contexts.UnlockList;
Run Code Online (Sandbox Code Playgroud)
转发邮件的代码:
Var tmpList: TList;
i: Integer;
Begin
tmpList := IdServer.Contexts.LockList;
For i := 0 to tmpList.Count Do Begin
If TIdContext(tmpList[i]).Connection.Socket.Tag = idReceiver Then
TIdContext(tmpList[i]).Connection.Socket.WriteLn('Message');
End;
IdServer.Contexts.UnlockList;
Run Code Online (Sandbox Code Playgroud) 我遇到了为IdTCPServer的每个连接声明一个唯一全局变量的问题.我在这里要做的是.
TMyContext = class(TIdServerContext)
public
Tag: Integer;
Queue: TIdThreadSafeList;
FPacketBuffer: Pointer;
PacketBufferPtr: Integer;
constructor Create(AConnection: TIdTCPConnection; AYarn: TIdYarn; AList: TThreadList = nil); override;
destructor Destroy; override;
end;
Run Code Online (Sandbox Code Playgroud)
然后使用TMyContext(AContext).FPacketBuffer访问变量,但是当连接处于活动状态且新连接尝试连接时,我收到访问冲突错误.这是我的idTcpConnect和idTcpDisconnect中的内容
procedure TMainFrm.MainSckConnect(AContext: TIdContext);
begin
TMyContext(AContext).Queue.Clear;
TMyContext(AContext).Tag := -1;
GetMem(TMyContext(AContext).FPacketBuffer,65536);
end;
procedure TMainFrm.MainSckDisconnect(AContext: TIdContext);
Var Client: TClientInfo;
begin
//If TMyContext(AContext).Queue.Count > 0 Then TMyContext(AContext).Queue.Clear;
TMyContext(AContext).Queue.Clear;
FreeMem(TMyContext(AContext).FPacketBuffer);
If AContext.Data <> nil Then Begin
Client := Pointer(AContext.Data);
Clients.Remove(Client);
Client.Free;
AContext.Data := nil;
End;
end;
Run Code Online (Sandbox Code Playgroud)
在idtcpconnect中调用getmem时会发生错误,我想我做错了,我不知道如何为每个上下文创建一个唯一的全局变量.
我一直试图在边框中绘制一个带有间距的圆角矩形,但我似乎无法使用Canvas.RoundRect函数找到一种方法来做到这一点,而且我自己画数据并不是很好,我可以画画使用Canvas.MoveTo和Canvas.LineTo函数的间距矩形,但我不知道如何使边缘圆化.目前我正在做的是我在想要在边框中制作间距的地方制作黄色矩形,但问题是当我打印时我必须直接在打印机画布上绘图而我必须在透明纸上绘图,所以背景颜色会导致问题.任何可以帮我构建自定义绘图程序或告诉我如何擦除该区域并仍然在没有任何背景颜色的透明纸上打印的人.黄色背景颜色仅供预览,当我绘制到打印机画布时,背景是透明的.
通过边界线中的间距查看图像以了解我的意思.

谢谢
场景是我有两个线程和一个UI线程.单击登录按钮时的UI线程创建一个ClientThread,它创建一个套接字并运行,直到套接字连接,每当收到一条消息我使用处理程序将消息发布到另一个名为ProcessDataThread的线程,现在接收来自服务器的一些消息我需要从ProcessDataThread更新UI相关的东西,我搜索了很多,我发现这两种方式runonUiThread函数我想只能从无用的活动类和Asynctask方法运行,我不知道如何将活动上下文传递给...
这是代码
单击MainActivity中的"登录按钮"时执行的代码
public void onLoginClick(View view)
{
global_constants.clientObject = new ClientThread();
global_constants.clientThread = new Thread(global_constants.clientObject);
global_constants.clientThread.start();
}
Run Code Online (Sandbox Code Playgroud)
ClientThread中的代码运行方法
public class ClientThread implements Runnable {
.......
@Override
public void run() {
......
while(!Thread.currentThread().isInterrupted() && (!CloseThread))
{
byte[] buff;
....
global_constants.updateConversationHandler.post(new ProcessDataThread(buff));
}
}
}
Run Code Online (Sandbox Code Playgroud)
解析出传入的数据和东西后,ProcessDataThread中的方法代码
public class ProcessDataThread implements Runnable {
.........
void ProcessLoginFailedPacket(byte[] buff)
{
// how to call the UI thread from here for updating some UI elements??
}
}
Run Code Online (Sandbox Code Playgroud)
[编辑]
我将活动上下文存储在一个全局变量中然后以这种方式进行,但我不知道它是否会更安全
((Activity)global_constants.MainContext).runOnUiThread(new Runnable(){
public void run()
{ …Run Code Online (Sandbox Code Playgroud) 对不起,我知道这是一个非常无聊的问题,但有人可以看到这段代码,并解释这段代码应该做什么,并且delphi 7一直给我错误的线路开始说明期待:或者,
{$IFDEF CRYPT_BLOCK}
nested blocks not allowed!
{$ENDIF}
{$DEFINE CRYPT_BLOCK}
{$IFOPT O+}
{$DEFINE SAVE_OPT}
{$ENDIF}
{$O-}
{$IfNDef UNSAFE_CRYPT}
begin
{$ENDIF}
asm db $EB, $06, $EB, $FC, $EB, $FC, $FF, $F8 end;
Run Code Online (Sandbox Code Playgroud)
谢谢