我有这样的菜单结构:
1. Option A
1.1 Option B
1.1.1 Option C
1.1.2 Option D
1.2 Option C
1.2.1 Option B
1.2.2 Option D
1.3 Option D
1.3.1 Option B
1.3.2 Option C
2. Option B
2.1 Option A
2.1.1 Option C
2.1.2 Option D
2.2 Option C
2.2.1 Option A
2.2.2 Option D
2.3 Option D
2.3.1 Option A
2.3.2 Option C
3. Option C
3.1 Option A
3.1.1 Option B
3.1.2 Option D
3.2 Option B
3.2.1 Option A
3.2.2 …Run Code Online (Sandbox Code Playgroud) 以下代码导致运行时错误.
每个都shared_ptr拥有相同的内存,但每个内存的数量仍然是一个.
因此,每个共享指针都是不同的,所以当它们超出范围时,它们会尝试释放块,这会导致损坏堆.我的问题是如何避免这种情况?
只想添加这样的声明
shared_ptr<int> x(p);
Run Code Online (Sandbox Code Playgroud)
不可谈判我必须申报.
#include <iostream>
#include <memory>
using namespace std;
int main ()
{
int* p = new int (10);
shared_ptr<int> a (p);
shared_ptr<int> b (p);
shared_ptr<int> c (p);
shared_ptr<int> d (p);
cout<<"Count : "<<a.use_count()<<endl;
cout<<"Count : "<<b.use_count()<<endl;
cout<<"Count : "<<c.use_count()<<endl;
cout<<"Count : "<<d.use_count()<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 有一个TFrame后代类如下:
TCustomHistoryFrame = class(TFrame)
tbMainFunction: TToolBar;
// there's more, of course, but that is irrelevant to the question
end;
Run Code Online (Sandbox Code Playgroud)
我注意到,当我Enabled将此框架的属性设置为时False,其组件tbMainFunction将不会(视觉上)被禁用.
我的第一个想法是覆盖虚方法TControl.SetEnabled.看看它的实现,我看到它在CM_ENABLEDCHANGED实际值不同时执行控制消息.
我不确定如何以Enabled正确的方式将框架的状态应用到工具栏.
常见的做法是什么?由于这个问题主要是以观点为基础的,所以让我重新说一下:
无论是重写SetEnabled还是处理都有哪些优点和缺点CM_ENABLEDCHANGED?
事情,我想到了自己:
SetEnabled:
CM_ENABLEDCHANGED:
TControl和)中有(至少)此消息的实现TWinControl.如果我在课堂上处理这些信息,他们还会被执行TCustomHistoryFrame吗?我在Delphi 10.2 Update 2中遇到了与RTTI相关的问题,并且能够将其跟踪到更少的代码量(见下文).
我有一些TPersistent-descendant类TMyObj发布类型的属性TArray<Integer>.当我通过GetDynArrayProp()它接收它的值并通过它查询它的大小时,DynArraySize()只能达到649个元素的大小.在此特殊计数之上返回一些非常大的值.
请注意,我的数组是从一个实例生成TDictionary<Integer,Boolean>的Keys拥有自己的财产ToArray的方法.我也尝试修改,TMyObj.GetDynArray以便它TArray<Integer>直接返回一个实例,它正常工作.因此,我认为这可能会以一些神秘的方式相关联.
我的使用有DynArraySize()什么问题?这种动态数组的神秘行为背后是什么?
program RTTIPropDynArray;
{$APPTYPE CONSOLE}
uses
System.Classes, System.Generics.Collections, System.SysUtils, System.TypInfo;
type
TMyDict = TDictionary<Integer,Boolean>;
TMyArray = TArray<Integer>;
TMyObj = class(TPersistent)
private
FValues: TMyDict;
function GetDynArray: TMyArray;
public
constructor Create(const ACount: Integer);
destructor Destroy; override;
published
property DynArray: TMyArray read GetDynArray;
end;
{ TMyObj }
constructor TMyObj.Create(const ACount: Integer);
begin
FValues …Run Code Online (Sandbox Code Playgroud) 我开始使用Objective-C开发并尝试理解弱和强引用.我想我明白了,但我不确定...
让我们考虑一下代码:
@interface SomeClass {}
@property (nonatomic, weak) NSString* propertyName;
@end
Run Code Online (Sandbox Code Playgroud)
现在,如果我在代码中的某个地方调用这样的东西:
NSString* s = someClassInstance.propertyName;
参考计数器不会递增.我的理解是否正确?
疑问1:什么是参考计数器值propertyName?
怀疑2:那么......你能举例说明我什么时候可以获得对这个属性的强烈引用?我希望你知道我的意思或我不明白的东西......
我会得到弱参考.
我想查询OLE应用程序的显示名称,它嵌入在我的Delphi XE4 Win32应用程序中.
TOleContainer使用类,容器可以包含不同的OLE应用程序(例如MS Word,MS Excel,...),具体取决于在其中编辑的文件.
我想要返回的是Microsoft Word 2007(或2010或2013或...)或至少Microsoft Word,因为它显示在普通Word实例的标题栏中.
编辑: TOndrej的回答非常有帮助.谢谢.
不幸的是,正如我在他的回答中的评论中所描述的那样,它没有显示真正的应用程序标题.我在SO上发现了这个问题.据说,我可以通过_Application.Caption属性访问主机应用程序的标题.我没有实例_Application,但IOleObject.Typecast(MyOleObjectInterface as _Application)失败了.
如何访问OleObject _Application?
我使用流将旧代码更改为新代码。但是当我启动tomcat时它不断出现
错误 osweb.servlet.DispatcherServlet - 上下文初始化失败 org.springframework.beans.factory.BeanDefinitionStoreException:无法读取候选组件类:文件 xxx(我的 FilePath)嵌套异常是 java.lang.ArrayIndexOutOfBoundsException:25091”
谁能告诉我是什么原因导致这个错误?我真的很感谢你的帮助。
/*old*/
for(String key:paramMap.keySet()){
if(key.startsWith("NUMBER_OF_") ){
String value = request.getParameter(key);
if(value!=null && !value.equals("")){
br.append(key.replace("NUMBER_OF_", "")).append(" = ")
.append('"').append(value).append('"').append(" and ");
}
}
}
/*new*/
new ArrayList<>(paramMap.keySet()).stream().filter(p -> p.startsWith("NUMBER_OF_")).forEach(
o ->{
String value = request.getParameter(o);
if(value!=null && !value.equals("")){
br.append(o.replace("NUMBER_OF_", "")).append(" = ")
.append('"').append(value).append('"').append(" and ");
}
});
Run Code Online (Sandbox Code Playgroud)
整个堆栈跟踪:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\apache-tomcat-7.0.61\webapps\web\WEB-INF\classes\com\ais\brm\web\controllers\system\metadic\MetaDicManageController.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:260)
org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242)
org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1419)
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) …Run Code Online (Sandbox Code Playgroud) 我是Pascal的新手,目前正在使用指针.我有2条记录,其中一条包含指向另一条记录类型的2条指针.
type
WaypointRef = ^Waypoint;
PathRef = ^Path;
Waypoint = record
id: integer;
Name: string;
pathRefs: array of PathRef;
end;
Path = record
distance: integer;
WaypointRefA, WaypointRefB: WaypointRef;
end;
Run Code Online (Sandbox Code Playgroud)
所有航路点都保存在一个阵列中.现在,当我试图读出路径的值时,我得到了神秘的结果:
writeln(waypoints[0].pathRefs[0]^.distance);
writeln(waypoints[1].pathRefs[0]^.distance);
Run Code Online (Sandbox Code Playgroud)
两者都应该打印相同的值,但它们不会.然而,更神秘的是,即使我尝试以下内容:
writeln(waypoints[0].pathRefs[0]^.distance);
writeln(waypoints[0].pathRefs[0]^.distance);
writeln(waypoints[0].pathRefs[0]^.distance);
Run Code Online (Sandbox Code Playgroud)
我得到2个不同的值.(正确的 - 先是173 - 然后是2次.)
waypoints[0].pathRefs[0]^
Run Code Online (Sandbox Code Playgroud)
总是指向同一个地址,因此我很困惑.我希望有人知道这个问题.
编辑:2似乎是默认值,因为如果我在路径创建时没有将任何值保存到"距离",它也会返回2.
EDIT2:这里是航点和路径创建的代码.我认为一定有失败.我现在可能会因设备内部的程序而混淆设计.我只是在试验.
procedure buildWaypoint(Name: string);
procedure addWaypoint(w: Waypoint);
var
lngth: integer;
begin
lngth := Length(waypoints);
SetLength(waypoints, lngth + 1);
waypoints[lngth] := w;
end;
var
w: Waypoint;
begin
w.id := id;
id := id + 1;
w.Name := …Run Code Online (Sandbox Code Playgroud) 我使用 Windows 消息 WM_SETREDRAW(请参阅MSDN)来锁定某些控件的重绘。通常,它是成对发送的。
但是在某些情况下,我不能保证这一点(例如,当它由第三方视觉组件的一个 - 通常,但不是每次,成对 - 回调事件触发时)。
如果至少一个控件已被锁定,则已经有一个计数器可以全局锁定各种操作。当消息不是成对发送时,会违反此计数器。
因此,我正在寻找一种可能性来检查控件是否已被锁定。我也很欣赏解决这个问题的替代想法。
先感谢您。
这些是我用于发送的包装例程WM_SETREDRAW:
function IsValidWinControlToUnLock(const WinControl: TWinControl): Boolean;
begin
Result := Assigned(WinControl) and
(WinControl.Handle <> 0) and
ControlIsVisible(WinControl); // assure the control and all its ancestors (via Parent) are visible
end;
function LockWinControl(const WinControl: TWinControl): Boolean;
begin
Result := IsValidWinControlToUnLock(WinControl);
if not Result then exit;
Inc(MyGlobalLockCounter);
WinControl.Perform(WM_SETREDRAW, 0);
end;
function UnlockWinControl(const WinControl: TWinControl): Boolean;
begin
Result := IsValidWinControlToUnLock(WinControl);
if not Result then exit;
WinControl.Perform(WM_SETREDRAW, 1);
Dec(MyGlobalLockCounter); …Run Code Online (Sandbox Code Playgroud) 我正在尝试在python中创建一个程序,告诉你你已经活了多少天.我目前的代码是:
import datetime
from datetime import timedelta
year = int(input('Enter the year'))
month = int(input('Enter the month'))
day = int(input('Enter the day'))
date1 = datetime.date(year, month, day)
now = datetime.datetime.now().date()
days = now - date1
print days
Run Code Online (Sandbox Code Playgroud)
目前它打印的数字是天数然后0:00:00.例如:5914 days, 0:00:00.有谁知道如何摆脱0:00:00?
procedure searchAndReceipt;
var
amt, counter, check: integer;
gtinStore, qtyStore: array of integer;
totalCost: real;
begin
check := 0;
totalCost := 0.0;
write('Enter how many products you are purchasing: ');
repeat
readln(amt);
if (amt > 11) and (amt <= 0) then
writeln ('Please re-enter how many products are you purchasing with a value between 1-10')
else
check:= 1;
until check = 1;
SetLength(gtinStore, amt);
SetLength(qtyStore, amt);
SetLength(receiptArray, amt);
for counter:=1 to amt do
begin
write('Enter a GTIN code: ');
repeat
readln(gtinStore[counter]); …Run Code Online (Sandbox Code Playgroud) delphi ×6
c++ ×1
datetime ×1
delphi-7 ×1
excel ×1
foreach ×1
java-stream ×1
ms-word ×1
objective-c ×1
ole ×1
overriding ×1
pascal ×1
pointers ×1
python ×1
python-2.7 ×1
rtti ×1
shared-ptr ×1
submenu ×1
winapi ×1